近年来,随着可编程控制器(以下简称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
labdjzt.caption = 电机当前状态:反转
elseif mid(s, 7, 1) = 0 and mid(s, 8, 1) = 0 then '停机
cmdfz.enabled = true '电机已停止,可操作正转或反转按钮
cmdzz.enabled = true
labdjzt.caption = 电机当前状态:停止
end if
end sub
private sub cmdzz_click() '正转指令
a = %01#wcsr01001** + chr(13) '定义将r100置1,启动正转的通信字符串
s = com((a), 7)
end sub
private sub cmdfz_click() '反转指令
a = %01#wcsr01011** + chr(13) '定义将r101置1,启动反转的通信字符串
s = com((a), 7)
end sub
private sub cmdtj_click() '停机指令
a = %01#wcsr01021** + chr(13) '定义将r102置1使电机停转的通信字符串
s = com((a), 7)
end sub
运行上述程序,既可在pc机上实现对电机正反转以及停止的控制,也可在现地通过sb0、sb1和sb2按钮实现对电机的控制;既可在现地启动或停止电机转动,也可在pc机上实现停机或电机转动控制。由于pc机定时读取plc内部y0、y1的值,所以在现地操作改变电机的工作状态时,在pc机程序中可显示出当前电机的工作状态并禁止相应的操作,真正实现了pc与plc的联机控制。
6. 结束语
上述设计已在实践中应用。经验证,可在此基础上,增加联机通信故障自动检测报警功能,利用数据读写命令实现联机大批量数据传送,根据现地来的状态信息增加pc机动画演示功能,从而使pc与plc的联机控制程序更加完善,控制界面更加形象。根据上述原理,结合pc与plc控制的特点,可在其它控制场合使用上述方法实现双机甚至多机联机控制。