西门子6GK7243-1GX00-0XE0技术支持
1引言
随着计算机和通讯技术的发展,在工业测量和控制中广泛需要远程通讯。远端PLC等下位机做生产控制,本地计算机需要实时监测或参与控制生产现场的参数。实现以上要求的一个简便的途径是利用覆盖面广泛的公用电话网,使PLC等下位机利用调制解调器(MODEM)和计算机的调制解调器连接通讯,即可完成硬件上的连接。如图1所示。在软件方面,由远端下位机软件控制和远程监控站软件两部分组成。考虑到本地监控站软件只做数据监测或少许控制且编程相对简单,本地监控站的编程软件可以直接用语言。
2系统概述
本文以一个实际的小水电站的泻水闸门程控工程为例,着重叙述永宏PLC和PC做远程通讯的实现细节。系统的下位机控制采用永宏公司的FBs系列PLC对水库泻水闸门进行开度检测和开度控制,监控站的界面编程采用VB6.0编写。
硬件配置:远端FBs-CB25+ FBs-10MAU+ECOM外置MODEM+PWS1711
本地PC(含普通内置MODEM)
该系统主要控制要求,通过FBs-10MA外接一个旋转编码器检测闸门所在位置,跟据现场人机界面或者PC端(下游5Km处)的设定位置来控制牵引闸门的马达正反转,从而使闸门上升或下降到指定的位置。FBs-CB25所扩展得到的通讯口2(RS485)用于PWS1711的通讯,通讯口1(RS232)用于连接MODEM,主机上的可USB口用于连接调试用的笔记本电脑。
3调制解调器工作方式和设定
3.1 调制解调器工作原理
调制解调器分成两种模式,命令模式和联机模式。当调制解调器没有和其它设备连接时,其处于命令模式,这时下达给调制解调器的指令时作调制解调器本身设定或者动作用的。当调制解调器已经和其它的设备连接上时,此时调制解调就是处于联机模式,所有在此时由计算机送到调制解调器的讯息都将由经电话线传送到其它设备上。
用于控制调制解调器的特定指令集被称为“AT指令集”,通过该指令集,从基本的音量控制到内建参数设置的改变,都可以由VB经过串行端口而对调制解调器下达控制指令。AT命令集是调制解调器通讯接口的工业标准。所有的AT命令都以字符AT开始,作为前缀。前缀AT用以引起调制解调器的注意(Attention)检测计算机串行通讯口发送信号的速率,识别字符格式,包括字符长度和奇偶设定等。
调制解调器拨号之后,等待对方调制解调器送来的载波信号。如果在一给定时间内没有检测到载波, 调制解调器自动释放线路并送回结果码NOCARRIER,如果检测到载波信号, 调制解调器即送结果码CONNECT + 波特率,就进入联机状态,即可与远方系统进行通讯。
3.2 PLC连接调制解调器原理及其设置
在该系统中, PC做为主站,必须控制调制解调器主动拨号,在确认调制解调器和PLC的调制解调器联机成功后控制它进入联机模式,开始存取PLC数据。主站控制调制解调器拨号连接细节见下节,这里详述PLC端对调制解调器的设置方法。
PLC端PLC上电后必须初始化调制解调器,设置成自动应答来电状态。在这里把PLC初始化调制解调器的AT指令组合称为“MODEM驱动程序”。永宏PLC通过Port1来控制调制解调器,并把这种软件界面称为调制解调器专用界面。如图2设定或者设定特殊暂存器R4149的高八位为55H就可以把Port1设置为调制解调器专用界面,在该界面下PLC会启用“MODEM驱动程序”,此时,虽CPU仍然使用永宏〝标准通讯驱动程序〞来管理Port1的通讯,但必须通过调制解调器来联机,在通讯进行前,Por t1主控权是交由〝MODEM驱动程序〞管理,此时无法对PLC作任何存取动作。“MODEM驱动程序”即将调制解调器设为接收模式,并等待远方调制解调器拨号进来,一旦收发双方调制解调器联机成功,则PLC立即脱离接收模式,而进入联机状态,Port1控制权交由永宏〝标准通讯驱动程序〞管理。此时远方调制解调器便可任意存取或控制此PLC主机了。
调制解调器设置如图2所示,在PLC联机状态下,选取菜单中的“PLC”→“设定”→“Port1设定”来到图2,选择单选框的第二项“透过MODEM作远程CPU_bbbb”,该PLC一上电就通过自带的“MODEM驱动程序”把Port1设置为调制解调器专用界面。通讯格式设置为同调制解调器相同的N,8,1,为提高通讯效率可以把通讯速率设置为38400bps,或者更高(高为115200bps)。
4 PC端程序设计
4.1 拨号程序设计
PC端将以VB6.0所带的通信控件MSCOMM进行通信软件的开发,利用该控件控制串口实现对MODEM的控制。控制步骤如下:
一.通信参数设置
设置串口端口号,波特率,数据位,停止位,奇偶校验位及设置硬件握手协议,向MODEM发出DTR(已准备好)信号一便接管MODEM,程序如下:
If MSComm1.PortOpen Then
MSComm1.DTREnable = True
Else
MSComm1.DTREnable = False
End If
二.对MODEM初始化
发出一些命令来设置参数,其中S0=n(n>=1)自动应答.n为响铃次数;E0/E1关闭/打开命令字符回应;Q0/Q1设置MODEM返回/不返回结果码;M0/M1关闭/打开MODEM扬声器;Ln(n>=0)设置MODEM扬声器音量www.plcs.cn;P/T设置MODEM脉冲/音频拨号;程序如下:
If MSComm1.PortOpen Then
Do While Not MSComm1.CTSHolding: Loop
TXD= ATS0=1E1Q0M1L2T + Chr(13)
MSComm1.Output = TXD
End If
三.进行拨号
向MODEM发出ATD命令,程序如下:
MSComm1.Output=ATD & 05925998499+Chr(13)
当发送“ATD”+ 电话号码 + Chr(13)时,MODEM就开始拨号,拨号需要一定的时间,在拨号的过程中可以不断读取MODEM的CD指示灯的状态,当电话拨通后CD指示灯会点亮。并返回“CONNECT + 波特率”的信息。如果MODEM向PC的回应字符串中含有Connect或CDHolding属性值变为True(检测出载波),则表示已与远方MODEM连机了,此时可以传输数据。
当电话拨通后,MODEM不再接收AT指令,要使其回到命令状态,则必须发送“+++”信息,使MODEM回到命令状态,发送“ATH”+ Chr(13)则可以挂断电话,程序如下:
MSComm1.Output=ATH +Chr(13)
4.2 通讯程序设计
一.永宏PLC通讯协议
永宏PLC 通讯讯息格式可概分为6个数据域位, 如下图3所示,具体解释如下:
⑴.开头字符(STX):ASCI I码之开始字符STX。
⑵.从站号码:为两位数之16进制数值。
⑶.命令号码:为两位数之16 进制数值,为由主系统要求从系统所执行之动作类别。
⑷.本文资料:本文数据可为0(无本文数据)~500个ASCII字符。
⑸.侦误值(CHECKSUM): 侦误值系将前述~将各ASCII字符之16进制数码值(8位长度)从头至尾依序相加,但不考虑进位,终结果为侦误值。
⑹.结尾字符(ETX):ASCI I码之结尾字符ETX之16进制数码为03H。。
二.读数写数
本系统操作PLC的关键数据主要是水位的设定值PV=R0和当前值CV=R1,即要对暂存器R0进行写操作,R1进行读操作;
依照协议VB设计的通讯程序必须指定一个命令码,向PLC请求数据读取,查的该命令码为“46”,解释为:连续多个缓存器之数据读取。读取R1的PC命令的ASCII码写法为:
“STX+ 01(站号)+46(命令码)+01(连续数据个数)+R00001(数据开始地址)+LRC(侦误值)+ETX”
依照协议VB设计的通讯程序必须指定一个命令码,对PLC缓存器数据写入,查的该命令码为“47”,解释为:连续多个缓存器之数据写入。写入R0的PC命令的ASCII码写法为:
“STX+ 01(站号)+47(命令码)+01(连续数据个数)+R00000(数据开始地址)+(写入的数据资料,16进制)+LRC(侦误值)+ETX”
读取当前值CV=R1,程序如下
Private Sub Timer1_Timer()
MSComm1.Output= Chr(2)+ “014601R00001”+ Lrc(“014601R00001”)+Chr(3)
Delay (10) //延时
CV = Val(&H + Mid(MSComm1.bbbbb, 7, 4)) //数据处理,R0放于CV
CV.Text = CV
End Sub
写入设定值PV=R0,程序如下
Private Sub Command1_Click()
If Len(Hex(PV.Text)) = 4 Then PV = Hex(PV.Text)
If Len(Hex(PV.Text)) = 3 Then PV = 0 + Hex(PV.Text
If Len(Hex(PV.Text)) = 2 Then PV = 00 + Hex(PV.Text)
If Len(Hex(PV.Text)) = 1 Then PV = 000 + Hex(PV.Text) //10进制转换16进制
MSComm1.Output=Chr(2)+ “014701R00000”+ PV + +Lrc(“014701R00000” & PV)+Chr(3)
End Sub
三.侦误值(CHECKSUM)计算
为VB的编程方便,把该计算做成单独一个子程序,依所有数据累加,舍弃进位的规则VB的LRC编程如下:
Private Function Lrc(Dats) As bbbbbb
Dim i
Dim Sum
Sum =2
For i = 1 To Len(Dats)
Sum = Sum + Asc(Mid(Dats, i, 1))
Next i
Lrc = Right(0 + Hex(Sum + 2), 2)
End Function
5结束语
采用基于MODEM通讯的设计极方便地实现该小电站生厂调度,在这种只需短时间连接控制的系统应用上可以大幅度地减小通讯成本,具有一定的推广价值。通过MODEM的连接,利用永宏编程软件可以实现该设备的远程程序调试修改,通过两个MODEM还可以实现两台远程PLC的CPU连接通讯等
随着世界范围内城市化和机动化进程的加快,城市交通越来越成为一个全球话的问题。越来越多的车辆慢慢的影响了城市的交通的正常运行,交通灯也随之产生了各种设计方法,以此来防止减少交通事故。尤其是近年来,随着电子与计算机技术的发展,现在的交通灯可以通过可编程控制器PLC、单片机等进行控制。本文将介绍使用奥越信PLC对交通灯进行控制。
一、控制要求
1、循环模式,时间在6:00至24:00时红绿黄灯循环动作,在深夜24.00至6:00时段只闪烁黄灯;
2、南北红灯亮,东西绿灯亮,红灯持续60秒,东西绿灯持续54秒后,开始闪烁3秒后熄灭,东西黄灯亮,3秒之后黄灯熄灭。东西红灯亮,南北绿灯亮;
3、东西红灯持续60秒,南北绿灯持续54秒后,开始闪烁3秒后熄灭,东西黄灯亮,3秒之后黄灯熄灭,在循环模式时间段之内一直循环。
4、对应的方向的红绿灯时有对应的时间显示。
5、人行道,每个路口都有红绿灯,南北向通行绿灯应在南北主干道绿灯时对应,东西向通行绿灯应在东西主干道绿灯时对应,并有时间提示。
二、程序设计
1、根据要求,定义了如下表格的I/O分配,也可根据现场自行分配。
2、根据I/O使用情况以及上述的控制要求,本次设计选用的是奥越信的CPU(214-1BC23)这个型号,该型号带有两个通讯接口及3年的断电保持功能,运行性能也很稳定,支持时钟指令,在循环模式与深夜模式与正常时间一致。自带的14输入与10输出也能满足设计需求。
3、程序可根据下图交通灯时序图,以及表格的I/O分配编写。
三、
本次设计的是是用PLC的简单逻辑与时钟指令来实现对交通灯的准确控制,红绿灯的时间长短可根据现场需要进行调节,CPU的两个通讯口一个可做成触摸屏或者上位机监控,可实时监控运行状态及修改时间长短
1.STL指令
步进梯形指令简称为STL指令。使用STL指令的状态续电器的常开触点称为STL触点,它是一种“胖”触点,STL触点驱动的电路块具有三个功能,即对负载的驱动处理、指定转换条件和指定转换目标。
2.使用STL指令的编程方法
STL触点以便是与左侧母线相连的常开触点,当某一步为活动步时,对应的STL触点接通,它右边的电路被处理,直到下一步被激活。
某一STL触点闭合后,该步的负载线圈被驱动,该步后面的转换条件满足时,转换实现,即后续步对应的状态继电器为ON,后续步变为活动步,与原活动步对应的状态继电器被系统程序自动复位,原活动步对应的SET触点断开
多重数据块是数据块的一种特殊形式,如在OB1中调用FB10,在FB10中又调用FB1和FB2,则只要FB10的背景数据块选择为多重背景数据块就可以了,FB1和FB2不需要建立背景数据块,其接口参数都保存在FB10的多重背景数据块中。建立多重背景数据块的方法是:在建立数据块只要在数据类型选项中选择“实例的DB”就可以了,见下例。
下面通过一例简单介绍一下多重背景数据块使用的一些注意事项和方法。
例如,PLC控制两台电机,且控制两台电机的接口参数均相同。一般的作法,我们可以编写功能块FB1控制两台电机,当控制不同的电机时,分别使用不同的背景数据块就可以控制不同的电机了(如台电机的控制参数保存在DB1中,第二台电机的控制参数保存在DB2中,我们可以在控制台电机调用FB1时以DB1为背景数据就可以了,第二台同样以DB2为背景数据块)。这样就需要使用两个背景数据,如果控制的电机台数更多,则会使用更多的数据块。使用多重背景数据块就是为了减少数据块的数量。
像这种情况,我们就可以利用多重背景数据块来减少数据块的使用量。拿本例来说,我们就可以在OB1中调用FB10,再在FB10中分别调用(每台电机各调用一次)FB1来控制两台电机的运转。对于每次调用,FB1都将它的数据存储在FB1的背景数据块DB1中。这样就无需再为FB1分配数据块,所有的功能块都指向FB10的数据块DB10。原理图如下:
我们需要先后插入一个功能块FB10和数据块DB10,DB10就为FB10的多重背景多重数据块。如下图:
需要在FB10中指定其所包含的背景数据块。方法如下:在FB10局部变量定义窗口中,在“STAT”变量区中(必须在此变量区中)为每台电机的控制取好名称后,数据类型选择FB<nr>,确认后,再把<nr>改为1,即功能块FB1。如果你在变量表中已经定义了FB1的符号,则会自动出现其符号名。地址一般由CPU根据FB1的接口参数数量自动计算得到,采用默认值就可以了。
因为控制两台电机,需要在STAT中定义两个这样的变量。结果如下:
经过以上步骤,FB的背景数据块DB10中就完全包含了1#和2#电机所需的数据,如下图,其中地址2.0~8.0是台电机的接口区控制参数,10.0~16.0是第二台电机接口区控制参数。
这时,在FB10的指令列表中“多重实例”中就会出现已经添加的两个局部背景,如下图。
在程序中就可以分别调用这两个局部背景控制1号和2号电机了。程序如下:
这样,就可以在OB1中通过调用OB10就可以分别控制1#和2#电机了。如下图: