在串口连网的平台上,通信主动方PLC处于自由协议模式,根据通信被动方PLC厂商通的信协议,调用有关串口通信指令或函数实现与被动方PLC通信。
与无协议通信不同的是,协议通信只需在主动方执行发送通信命令的程序,而被动方无须执行通信程序。协议通信另一好处是,被动方可以是低档的、不具备串口通信指令的PLC,如欧姆龙CPM1A机。
用协议通信虽较为简单,但要弄清PLC的通信协议,否则这样的通信是无法实现的。
以下以欧姆龙PLC为例介绍此类通信。这里PLC1为通信主动方,用自由协议,设定为RS-232模式,要执行发送与必要的接收程序;而PLC2为被动方,用HostLink协议,设定为Host Link模式,不用执行程序。
图5-81 协议通信准备程序
图5-81所示为协议通信准备程序。而调用发送指令的细节与无协议通信相同。在此略。该程序的通信命令为ASCII码字符串,本例为“@00WR0100FFFF”。其含义是使对方PLC的0100通道的各个位置1。
提示1:要使这个通信命令实现,还要预先把对方PLC处于“监控”模式。如果处于“运行模式是无法改写PLC数据的。
提示2:有关HOSTLINK协议及FCS(校验码)见本书附录。
该程序运行开始时,即把命令用的ASCII字符的十六进制值,用双字传送指令赋值给D100~D107中(D107仅用高字节)。接着调用FCS功能块,以进行校验码计算。这是Host Link协议要求的。校验码是上述命令字符ASCII码十六进制值的异或而得。占两个字节。不足两个字节时,高位应补0。加在上述命令码之后。
计算FCS校验码功能块用ST(结构化文本语言)编写。其变量设置如图5-82所示。这里有输入变量、输出变量及内部变量。
其中内部变量a定义为字数组变量,而且用AT地址,即与实际内存地址关联。所以,a数组虽为内部变量,但实际为实际内存地址。所以,实质是用以作通信命令字符串的输入。输入变量dNum,为无符号整型数INT,指明通信命令字节数。输出为字FCS,存放校验码ASCII字符的十六进制值。
a数组设定如图5-83所示。图中“编辑变量”窗口是功能块在选择插入变量时打开的。
(www.xing528.com)
图5-82 变量设置
从图5-83可看出,在打开的“编辑变量”窗口上,有“高级”按钮项(只有内部变量编辑时此按钮才激活)。用鼠标左键点击此“高级”按钮,将弹出“高级设置”窗口。之后,可在“高级设置”窗口上,选择“数组变量”,并定义数组大小(本例选用50);再选择“AT(指定地址)”,规定的选择范围为D0~D32718中选择(本例选D100)。选择后,用鼠标左键点击“确定”,高级设置成功,并关闭“高级设置”窗口。再在“变量设置”窗口上,用鼠标左键点击“确定”,a数组设定成功,并关闭“变量设置”窗口。
图5-83 编辑变量及高级设置窗口
经这样设置,a数组下标0,将指向D100;下标1,将指向D101。余类推。建立与实际地址关联的数组,为计算FCS提供了方便。
而用ST语言编写的计算FCS校验码的程序代码如下(代码含义见注释):
提示:欧姆龙新型PLC有FCS指令,可用于FCS计算。
在图5-81程序中,W0.0ON时,将调用XFER指令,把D100~D107之间7个字的值,即上述命令码,依次传送给D300~D306。接着调“ASC”指令,把在D200中存储FCS的值转换为ASCII码,并存入D220中。再调两次“MOVD”指令,实现把FCS两个字节加在命令码之后。之后,再调“逻辑或”及“MOV”,在命令字符字符串的最后,再加上字符“∗”(十六进制值2A)及回车符(十六进制值0D)。最终按HostLink协议,把编辑后的命令字符串存放在D300~D308(D308仅使用其高字节)中。
有了合乎HostLink协议的通信命令字符串,调用命令发送指令,即可发送通信命令。如通信正确,则使对方PLC的0100通道的各个位置1了。当然,也可使0100字的各个位置不同的值。
提示1:欧姆龙CJ机还支持MODIBUS RTU协议。可作为主站发送MODIBUS RTU协议命令,与对方作为MODIBUSRTU协议从站的PLC或只能装置通信。其细节见本书附录E。
提示2:对被动方而言,协议通信的命令并不是PLC要执行的指令,而是一种能为PLC识别的操作要求。PLC接受通信命令后,将按要求,与对方交换数据,或进行相应的操作。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。