7
兰州西门子授权一级代理商通讯电缆供应商
近年来,随着可编程控制器(以下简称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 | bbbb | 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 bbbb_Load() '窗体加载过程
mPort = 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 bbbbbb, b As Integer) '向PLC读写寄存器内容函数
MSComm1.InBufferCount = 0 '清空串口的接收缓冲区
MSComm1.Output = a '将要发送的字符串从串口发送出去
Do
DoEvents
Loop Until MSComm1.InBufferCount >= b '等待PLC的响应字符至一定位数
com = MSComm1.bbbbb '读入串口接收到的字符串
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控制的特点,可在其它控制场合使用上述方法实现双机甚至多机联机控制。
一、前言
交通灯控制系统是一个老掉牙的问题,各种方式的控制系统也不断产生。随着我国经济建设的不断发展,城市化进程不断加强,机动车辆也不断增多,交通信号控制功能不断扩展,其控制效率要求不断提高。基于PLC的交通灯控制系统能把可编程控制器的软硬件系统功能强大、性好,逻辑编程方法简单,易于开发复杂控制系统、有丰富的扩展模块和联网能力和应用范围十分广泛的特点结合起来,使系统易于实现。
本系统采用日本松下电工生产的小型FP0系列PLC作主控系统,其体积小但功能强大。我们按照现有十字路口的交通灯的设计方案来说明基于PLC的交通灯控制系统的方便性特点,也间接说明其在满足控制系统要求的功能扩展上也易于实现。
二、系统控制设计
1、系统功能要求
交通灯系统启动时,红、绿、黄灯按一定时序轮流发亮。,南北红灯亮,东西绿灯亮。南北红灯维持35s(可由用户设定),在南北红灯亮同时东西绿灯也亮,并维持30s,到了30s时,东西路灯闪亮,闪亮周期为1s。绿灯闪亮3s后熄灭,东西黄灯亮,并维持2s。到2s时,东西黄灯熄、红灯亮,同时南北红灯熄,绿灯亮。东西红灯亮维持25s(可由用户设定),南北绿灯亮维持20s。到20s时,南北绿灯亮3s后灭,南北黄灯亮,并维持2s。到2s时,南北黄灯熄、红灯亮,同时东西绿灯亮,开始下一周期的动作;系统可间显示;当紧急状态要一侧方向通过时,可以使南北方向红灯亮,东西方向绿灯亮或者南北方向绿灯亮,东西方向红灯亮;在特殊情况下,系统可以人为根据各方向车流量,进行各车道通行时间的变;在某时段如23:00至次日6:00车流量很少情况下,系统可以设定为各方向的只有黄灯闪烁。
2、系统设计
2.1硬件设计
硬件主要采用日本松下电工生产的小型FP0-C32CT型(带日历时钟功能)PLC,其I/O分别各有16个;根据系统要求需要进行I/O扩展要求,需要配一级扩展单元FP0-E16YT,其有16个输出。其I/0分配如表1,其控制输入输出接线原理图如图1所示。输出设备是电压高,功率大的设备,可由PLC输出给中间继电器,再通过中间继电器进行外部设备的输出控制。
表1 系统I/0分配表
输入 | 功能 | 输出 | 功能 |
X0 | 系统启动按钮SB1 | Y0 | 南北红灯 |
X1 | 系统停止按钮SB2 | Y1 | 东西绿灯 |
X2 | 南北方向急停开关S1 | Y2 | 东西黄灯 |
X3 | 东西方向急停开关S2 | Y3 | 东西红灯 |
X4 | 南北方向时间增加按钮SB3 | Y4 | 南北绿灯 |
X5 | 南北方向时间减少按钮SB4 | Y5 | 南北黄灯 |
X6 | 东西方向时间增加按钮SB5 | Y20-Y2F | 用于数码时间显示 |
X7 | 东西方向时间减少按钮SB6 |
|
|
图1 外部接线原理图
2.2软件设计
系统软件设计内容包括交通灯顺序循环控制、两方向的急停控制、数码时间显示控制、定时时段控制、各路通行时间变控制几部分。顺序循环控制主要采用定时器指令编写,通过时间的顺序运行,来达到各路灯的按要求输出;通过配合各路急停开关的闭锁实现各方向的红灯或绿灯亮,当急停开关恢复后,又通过对定时器的内部经过值SV赋值,达到路灯进行切换恢复的目的,程序参考图2。我们可以通过PLC内部的日历时钟功能,对内部运行的时钟数据存储区进行取值比较,用类似急停控制的方法,实现某时段各方向的黄灯闪(程序略);由于采用的定时器立的,故对于各路通行时间变控制可以采用对定时器TM0对TM4的设定值SV赋值来改变,当然各方向时间也不能无限增大和减小,我们可以通过比较指令限制其在的数值范围(程序略)。通过对定时器TM0对TM4中变化的经过值EV,我们可以通过指令实时把他们转为BCD码,再由专门指令直接转换为七段码数值,用于对各方向时间的显示(程序略)。
图2 顺序循环控制和急停控制的程序
三、系统扩展性
随着城市交通系统的日趋复杂和控制自动化程度的加大,使用该套PLC的交通灯控制系统,也能实现其自动控制的过程。如某些交通道路有六车道及人行道等,各道进行相应时序控制;有些交通道路采用智能化控制,根据车自动改变各方向的通行时间,并通过控制系统对各路通信号和系统参数进行远程监控和设置等;FP0系列PLC体积小,软硬件功能强,具有运行速度快、程序容量大、指令功能强、具有远程通讯功能等等,其可进行三级I/O扩展单元,大I/O点数达128个,在通讯方面,FP0可以经RS232口直接连接调制解调器,在选用调制解调器方式下,FP0使用AT命令自动拨号以实现远程通讯;其也可以使用C-NET通讯单元,把多个FP0单元连接一起构成分布式控制网络,实现计算机监控,计算机与多台PLC连接图如图3所示。通过上面说明,使用基于PLC的控制可以满通灯系统硬件功能的扩展和分布式监控网络化的需要。
图3 计算机与多台PLC控制单元连接图
四、总结
通过调试,本系统使用PLC中的定时器分段设置,容易配合急停控制、各方向时间变控制和间的显示,该交通信号灯的控制系统结构简单,接线容易,程序编写的控制算法灵活方便,在软硬件的维护上比较容易,性也比较高。在可扩展性方面比较容易,易实现智能的交通监控和控制,满足根据道路情况和季节变化情况的通行时间的改变,减少各方向的车辆滞留,缓解交通拥挤情况,其经济和社会效益比较明显。
问:我有一个改造项目新系统的313C PLC需要从老系统上用MpI通讯读取一个模拟量和16个数字量的数据,现在问题是用定义全局数据通讯还是在新系统plc中用sfc67和sfc68通讯,是不是编程通讯比全局数据通讯速度快稳定?请高手指点。(还要问一句如果用编程通讯的话怎么把定义好的全局数据给删除掉)如果不用全局数据的话,用编程,两个plc在组态里用不用连?是不是只用设置一下地址就行了吧?
答:全局数据通信是PLC之间进行的不需要编程通过MPI接口在CPU间循环地交换少量数据,当过程映像被刷新时,在循环扫描检测点上进行数据交换;而无组态的连接的MPI通信(编程通信)通过调用SFC67和SFC68来实现,MPI无组态连接就是MPI通信时,不需要组态,只要编写通信程序即可实现通信,PLC之间可以采用双边编程通信和单边编程通信方式,你这里应该是采用单边编程通信方式,因为CPU313C需要从老系统上用MpI通讯读取一个模拟量和16个数字量的数据,只要在CPU313C上进行编程就可以实现数据交换,编程通信要比全局的数据量要大,速度快;
你把两个PLC之间的MPI端口连接起来,设定主站CPU313C的MPI通信参数(波特率187.5kbit/s)和主站的MP地址如“3”,不能与老的PLC的MPI地址重复,把两个站的波特率设定一样,各自下载到PLC中;因为你只想老系统上用MpI通讯读取一个模拟量和16个数字量的数据,在CPU313C中单边编程,在读取数据区只要对方的PLC的MPI地址和数据区就可以了。
X_PUT(SFC68)为发送数据的指令,通过此指令将数据写入不在同一个本地S7站中的通信伙伴,其中DEST_ID为对方的MPI地址(这里指你的老系统PLC的MPI地址)和VAR_ADDR为对方的数据区,SD为本地数据区,保证SD参数定义的数据长度和数据类型与通信伙伴上VAR_ADDR一致;
X_GET(SFC67)为接收数据的指令,可以从本地站S7站以外的通信伙伴(这里指老系统上PLC站)中读取数据,其中参数DEST_ID和VAR_ADDR分别指对方的MPI地址和对方的数据区,RD为本机的数据区保证RD参数定义的接收区(CPU313C)至少和由VAR_ADDR参数定义的要读取的区域一样大,而且类型相匹配。如果不想要全局数据通信,只要在硬件组态界面中选择菜单Options(选项)/Define bbbbbb Data“(定义全局数据)界面中,打开全局变量发送和接收组态,断口连接,执行保存编译,下载到PLC就可以了。
一:触摸屏的参数。查看一下触摸屏的参数设置。
这里面有几个参数需要特别注意的
1:通信口的设置---------一定要确认清楚PLC连接触摸屏的COM1口还是COM2口
2:设备类型------------------这个是重要的,如果协议没选对的话,其他就不用说了
3:连接方式------------------PLC跟触摸屏的连线,确认好事RS485,还是RS232C
4:接口参数跟PLC站号----------------一定要跟PLC里面的设置一致。
二:如果参数确认设置好了,接下来就排查线路的问题。
确认RS485,RS232C的做线是否正确,触摸屏与各种PLC接线的做法不一样。这个可以参照维控(plc与触摸屏通信线接法帮助文档)查看
这个是正常排查通信问题的基本方法。
接下来教大家如何绕开触摸屏的问题------在线模拟。
在通讯不上的时候,有的客户会猜测可能是触摸屏的问题,或者接口的问题。
在线模拟就是绕开触摸屏,直接用PLC跟电脑进行连接。
具体的做法:
1:PLC跟电脑要通过RS232进行连接。有的PLC有RS232的接口,有的没有,没有的可以通过转接头接到电脑上。
2:新建一个简单的工程。放两个元器件,一个数值显示,一个数值输入。地址设置PLC里面的地址。
3:工程参数设置一定要跟PLC里面的设置一样。
4:点击在线模拟功能
这样子做就可以很明显查看PLC能不能跟PC通信上。如果可以通信上就可以排除PLC方面的问题,跟参数设置的问题