利用VB实现PC与PLC的联机控制
  近年来,随着可编程掌握器(以下简称plc)技术的不断进展,速度、功能、牢靠性和稳定性的不断提升,其在工业掌握中的运用越来越广泛。个人计算机(以下简称PC)具有人机界面好,编程软件丰富,数据处理快,信息存储便利,图像功能完善等优点。以PLC为下位机,以PC机为上位机的联机掌握模式,结合了PLC与PC各自的优点,提高了掌握力量和牢靠性,不仅操作使用便利,产品造价也较低,因而成为工业掌握中应用较多的模式。本文以电动机正反转掌握为实例,说明松下FP1系列PLC与PC实现联机掌握的方法。
  1. 松下FP1系列PLC与PC机的通信连接 
  松下FP1系列PLC均设有一个RS422串行通信接口。该接口既可用于PLC与PC机联机进行梯形图程序编程与调试,也可用于正常工作时的数据通信。PC机一般均设有一个以上的RS232C串行通信接口。由于RS232C和RS422属于不同的串行通信接口,通信信号的类型和工作方式不一样,因此,PLC与PC进行串行通信连接时,必需在中间安装一个RS422/RS232C适配器来完成信号的转换(部分PLC也具有RS232C口,此时可直接连接)。FP1系列PLC与PC机的通信连接如图1所示。
    2. PLC掌握电机正反转电路设计  PLC掌握电机正反转的接线如图2所示,其中SB0、SB1、SB2开关按钮分别用于掌握电机的正转、反转和停止;KM1、KM2分别为电机正反转掌握的接触器。由于PLC直接掌握沟通接触器,所以PLC应选择继电器输出型,并在接触器回路采纳互锁来保证电路的平安。
3. PC与PLC的联机掌握程序
  按上述图1完成PLC与PC机的通信连接后,还需采纳PLC联机编程软件或手持编程器对PLC内部通信参数专用的系统寄存器No.410~No.418进行设定,详细为:串口选择为COM1,波特率为9600bps,数据位长度为8位,停止位为1位,奇校验,单元号为1。
4.PLC掌握程序
PLC的掌握程序要既能现地掌握,又能使PC机通过串口通信实现上位机对电动机的正反转掌握和电机状态信息反馈。详细程序如图3所示。    程
  序中为实现PC机对电机的掌握使用了R100、R101和R102三个内部继电器。内部继电器可由PC机按松下FP1系列PLC的NEWTOCOL专用通信协议(详细协议可参考厂家资料),以
发送特定字符串的形式进行读写。为了仿效按钮操作的效果,三个内部继电器由上位机置位后启动对应的定时器,经0.8S后由定时器对内部继电器自动进行复位。
  5. PC机掌握程序与界面
  作为上位机,PC机通过人机界面,将操作人员的操作指令转换成相应的通信字符串并经串口发送至PLC,实现对电机的掌握;另一方面,PC机定时读取PLC寄存器的数据,从而可推断出PLC对电动机的掌握状态并在人机界面上显示出来。
PC机的程序利用Visual Basic 6.0进行开发,首先,从菜单“工程”→“部件…”→“控件”中添加串行口通信控件Microsofc Comm Control 6.0到工具箱中,然后从工具箱中往窗体添加下表所列的控件。
序号  控件类型
  控件名称 
  说 明 
  1
  form
  frmmain
  程序主窗体
  2
  frame
  Frame1
  框架
  3
  MSComm
  MSComm1
  串口通信控件
  4
  Timer
  Timer1
  定时器
  5
  CommandButton
  cmdzz
  正转按钮
  6
  CommandButton
  cmdfz
  反转按钮
  7
  CommandButton
  cmdtj
  停机按钮
  8
  Label
  Labdjzt
  电机状态显示标签
  添加上述控件后的程序窗体如图4所示。
  PC机的掌握程序如下:
Private Sub Form_Load() '窗体加载过程
MSComm1.CommPort = 1 '通信控件选用PC机的串口1
MSComm1.Settings = "9600,o,8,1" '设定串口1的波特率为9600bps,奇校验,8位数据位,1位停止位
MSComm1.PortOpen = True '打开串口1
Timer1.Interval = 1000 '定时器1的定时值为1s
Timer1.Enabled = True '启动定时器1
End Sub
  Function com(a As String, b As Integer) '向PLC读写寄存器内容函数 
适配器字符串是什么
MSComm1.InBufferCount = 0 '清空串口的接收缓冲区
MSComm1.Output = a '将要发送的字符串从串口发送出去
Do
DoEvents
Loop Until MSComm1.InBufferCount = b '等待PLC的响应字符至肯定位数
com = MSComm1.Input '读入串口接收到的字符串
End Function
  Private Sub Timer1_Timer() '定时读取Y0、Y1的值以推断电机当前状态 
a = "%01#RCP2Y0000Y0001**" + Chr(13) '定义读Y0、Y1值的通信字符串
s = com((a), 9) '读Y0、Y1的当前值
If Mid(s, 7, 1) = "1" Then '返回字符串中第7位为1表示Y0接通,电机正转
cmdzz.Enabled = False '电机已正转,禁止操作正转按钮但可操作反转按钮
cmdfz.Enabled = True
Labdjzt.Caption = "电机当前状态:正转"
ElseIf Mid(s, 8, 1) = "1" Then '反转
cmdfz.Enabled = False '电机反转,禁止操作反转按钮但可操作正转按钮
cmdzz.Enabled = True

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。