理论教育 PLC串口指令通信程序设计优化指南

PLC串口指令通信程序设计优化指南

时间:2023-07-01 理论教育 版权反馈
【摘要】:表6-12为三家PLC串口通信指令。表6-13 CJ系列机串口指令串口帧格式也有多种,如图6-70所示。执行本指令,将串口接收操作数N指定字节的数据,并予以存储。选用哪个串口及通信帧格式式由控制字C指定。而这就绪则是用辅助继电器A392.14和A392.06ON表示。在主动发起通信的同时,仍可使用Host Link协议被动通信。含义为低字节先发送,指定逻辑端口3,使用串口1及串口通信单元地址12H。

PLC串口指令通信程序设计优化指南

1.PLC串口通信指令

串口自由通信要用到串口通信指令或通信功能块。表6-12为三家PLC串口通信指令。

表6-12 三家PLC串口通信指令

978-7-111-39745-8-Chapter07-81.jpg

在这些通信指令中,最常用的是发送与接收指令。

(1)欧姆龙PLC串口指令。其指令较多。同样指令,机型不同,功能也不完全相同。表6-13为CJ系列机的串口指令。

表6-13 CJ系列机串口指令

978-7-111-39745-8-Chapter07-82.jpg

串口帧格式也有多种,如图6-70所示。使用什么帧格式,由调用指令时,使用的控制字决定。

1)发送指令TXD。用以向串口发送数据,指令的梯形图格式为978-7-111-39745-8-Chapter07-83.jpg

这里,S指定发送数据存放的首地址,C为控制字,N为指定发送数据的字节数。

执行本指令,将从串口发送操作数N指定字节的数据。数据的开始地址由操作数S指定。选用哪个串口及通信帧格式由控制字C指定。控制字C的含义如图6-71所示。

978-7-111-39745-8-Chapter07-84.jpg

图6-70 帧格式

不过,数据真正发送还需在串口发送准备就绪才能实现。而这就绪则是用辅助继电器A392.13(对通信板1)和A392.05(对通信板2)ON表示。

最多可发送的字节数为259。但除去帧的开始及结尾,真正包含的数据最多数据为256字节。

2)接收指令RXD。用以从串口读取数据,指令的梯形图格式为978-7-111-39745-8-Chapter07-85.jpg

这里,D指定接收数据存放的首地址,C为控制字,N为指定接收数据的字节数。

执行本指令,将串口接收操作数N指定字节的数据,并予以存储。数据存储的开始地址由操作数D指定。选用哪个串口及通信帧格式式由控制字C指定。控制字C的含义如图6-72所示。

不过,数据接收还需在串口接收准备就绪才能实现。而这就绪则是用辅助继电器A392.14(对通信板1)和A392.06(对通信板2)ON表示。

最多可接收的字节数为259。但除去帧的开始及结尾,真正包含的数据最多数据为256B。

使用发送、接收指令,首先要做好串口设定,其次还要弄清有关通信控制与状态辅助继电器的含义及其使用。表6-14所示为有关辅助继电器的功能及其说明。

978-7-111-39745-8-Chapter07-86.jpg

图6-71 发送控制字C含义

978-7-111-39745-8-Chapter07-87.jpg

图6-72 接收控制字含义

表6-14 串口有关辅助继电器功能及其说明

978-7-111-39745-8-Chapter07-88.jpg

(续)

978-7-111-39745-8-Chapter07-89.jpg

提示:早期欧姆龙C系列机没有串口指令。串口只能按Host Link协议被动接受通信。自C200Hα机后才有串口指令。才可主动发起通信。在主动发起通信的同时,仍可使用Host Link协议被动通信。但对CJ机,当处于Host Link协议时,不能调用通信指令,而处RS-232模式时才可调用

3)串口通信单元发送指令。用以发送数据,其梯形图格式为978-7-111-39745-8-Chapter07-90.jpg

这里,S指定发送数据存放的首地址,C为控制字,N为指定发送数据的字节数。

执行本指令,将从S到S+(N/2)-1源字中读取数据,在串口通信模块处于无协议模式下,将所读数据向通信对方发送。选用哪个模块、模块上哪个通信口以及通信帧格式式由控制字C及C+1指定。控制字C及C+1的含义如图6-73所示。

与TXD命令不同的是,它的控制字有两个。C仅用低字节,功能与TXD的相同。C+1是新加的。其低字节用以指定通信模块的地址。通信模块的地址与所设定的机号有关。可按下式计算:

80(十六进制)+4×机号(对口1)或

81(十六进制)+4×机号(对口2)

其高字节的第8~11位,指定使用模块上的串口1(设定值为0)或1(设定值为1)。高字节的第12~15位,指定通信使用的逻辑通信口,在0~7之间选择。因为通信模块通信要接收FINS协议管理。不同通信口可共用一个逻辑通信口,但同时只能一个使能(Enabled)。使能与否,分别由辅助继电器A202.00~202.07的状态位(对应逻辑口0~7)显示。还有其他一些辅助继电器,其功能见表6-15。

978-7-111-39745-8-Chapter07-91.jpg

图6-73 发送控制字含义

表6-15 有关辅助继电器功能

978-7-111-39745-8-Chapter07-92.jpg

(续)

978-7-111-39745-8-Chapter07-93.jpg

此外,使用串口通信模块通信所作的设定不像CPU模块上的串口,使用CX-Programer设定窗口进行。而用I/O表及其设置项进行。也可对指定的相关数据区赋值实现。相关数据区与设定模块机号有关。其计算公式如下:

m=D30000+100×单元编号CH

n=1500+25×单元编号

而对CP1H机,其计算公式为

数据存储区:m=D30000+100模块机号

核心区:n=CIO 1500+25模块机号

而这些内存区的设定及状态见表6-16、表6-17。

表6-16 有关数据存储区设定及状态

978-7-111-39745-8-Chapter07-94.jpg

表6-17 有关内存位状态

978-7-111-39745-8-Chapter07-95.jpg

图6-74所示为这个指令的使用实例。

本例的使用模块的机号设定为2。用端口1。所使用数据区D30205为1100H,含义为使用帧起始、结束代码。D30204为203H,含义是制定帧起始代码为02H(ST)、结束代码为03HexD30205设定为003H。

978-7-111-39745-8-Chapter07-96.jpg

图6-74 使用发送指令程序

控制字C设为1H,C+1为3112H。含义为低字节先发送,指定逻辑端口3,使用串口1及串口通信单元地址12H。结合本例,如果原数据区的内容如图6-75a所示,那么,对应所发送的字符串将是如图6-75b所示。

执行本程序,只要逻辑通信口 使能(A202.03 ON)、之前指令又不是执行中(1559.05 OFF),当0.0 ON时,将把字符串“ST”+“1234ABCDEF”+“ED”发送给通信对方。

4)串口通信单元接收指令。其梯形图格式为978-7-111-39745-8-Chapter07-97.jpg

978-7-111-39745-8-Chapter07-98.jpg

图6-75 原数据区内容

执行本指令,将从通信模块的串口上接收通信对方发送的,由操作数N指定字节的数据。所接收数据存储开始地址由操作数D指定。而选用从哪个模块、模块上哪个通信口接收,以及通信帧格式由控制字C及C+1指定。控制字C及C+1的含义如图6-76所示。

978-7-111-39745-8-Chapter07-99.jpg

图6-76 控制字设置

与RXD命令不同的是,它的控制字有两个。C仅用低字节,功能与RXD的相同。C+1是新加的。其低字节用以指定通信模块的地址。通信模块的地址使用及相关设置与TXDU指令相同。

提示:欧姆龙CJ系列机有关串口通信模块有多种型别与版本。不是所有机型都支持这两个指令。是否支持,在使用之前可用CX-Programer软件对其进行配置。如可设置成无协议通信模式,则支持;否则不支持。

(2)西门子S7-200串口指令。

1)RCV:为S7-200串口接收指令。其梯形图格式为978-7-111-39745-8-Chapter07-100.jpg

这里EN——指令执行条件,输入为ON,则执行本指令;

TBL——字表的首地址;

PORT——选用的通信口。

执行本指令,则从指定通信口接收一个或多个字符,并存储于TBL+1开始的存储区中。而接收字节数则由TBL确定,最多可接收255个。同时,可以通过设定,在接收时产生相应的中断事件,如接收到一个字符中断,或接收到终止字符中断,以调用中断子程序,做相应的通信数据处理

2)XMT:为S7-200串口发送指令。其梯形图格式为978-7-111-39745-8-Chapter07-101.jpg

这里EN——指令执行条件,输入为ON,则执行本指令;

TBL——字表的首地址;

PORT——选用的通信口。

执行本指令,则从指定通信口发送接收一个或多个字符。而所发送数据则预先存储于TBL+1开始的存储区中。而发送字节数则由TBL确定,最多可接收255个。同时,也可以通过设定,在发送时产生相应的中断事件,以调用中断子程序,做相应的通信数据处理。

提示:S7-200机使用上述两指令,必须使用程序,把通信口设定自由协议方式。否则指令无法正确执行。具体使用实例见本章第3节图6-128。同时,RCV及XMT指令不能同时有效,如果同时发生则会产生错误,此错误需要重新启动才可以清除错误,通信才能继续在用PC/PPI电缆时,发送和接收之间有一定的时间间隔,这是由电缆本身的切换时间决定的。关于通信超时的问题,在SM187.2设为1的时候,并不是超过SMW192的时间值即终止接收,而是只有接收到首字符后未能在规定时间内完成接收才可以自动终止接收,如果收不到首字节,RCV将一直保持有效。

(3)三菱PLC通信指令RS。其为三菱PLC串口通信发送、接收指令。其梯形图格式为

978-7-111-39745-8-Chapter07-102.jpg

这里S——预先存储发送数据的首地址;

m——发送数据的字数;

D——存储接收数据的首地址;(www.daowen.com)

n——接收数据的字数。

由于它的发送、接收用都同一指令。所以在进行通信时,虽先执行此指令,但真要发送或接收数据,还要由特殊继电器激发。如FX机发送由M8122,接收由M8123激发。其使用如图6-77所示。

978-7-111-39745-8-Chapter07-103.jpg

图6-77 RS指令使用说明

由图6-77可知,①为先执行RS指令,为通信做好准备。②为处理发送数据,当X010从OFF到ON,则使M8122置位,启动发送请求,当发送完毕,M8122将自动复位。③是处理接收数据,当做好通信准备,如接收完数据,则M8123 ON,则可把接收区的数据传送到D200~D209中。如收到数据后需要发送,可把要发送的数据从D300~D319中的数据传送到D0~D19中,并启动数据发送。至于M8123的复位将自动完成,不必用程序干预。

(4)和利时LM机串口功能块。和利时LM机没有串口指令,但有相关功能块。

LM机RS-232口自由协议通信功能块有4个:Set_COMM_PRMT、COMM_SEND、COMM_RECEIVE和Reset_COMM_PRMT。包含在库文件Hollysys_PLC_Comm.lib中。

(a)设定功能块Set_COMM_PRMT。用于RS-232串口通信参数的设定。其梯形图格式如图6-78所示。输入输出说明见表6-18。

978-7-111-39745-8-Chapter07-104.jpg

图6-78 功能块Set_COMM_PRMT

表6-18 功能块Set_COMM_PRMT输入输出说明

978-7-111-39745-8-Chapter07-105.jpg

调用本功能块,如它的输入端MODE的值为2#10001000,即16#88,当输入端EN从OFF到ON时(上升沿使能),则使能通信口设定。结果是RS-232通信口设定为无协议工作模式,无奇偶校验、8位数据位、波特率为9600bit/s。一经设定,即使EN端复位,将保持设定值不变。

提示:使用Set_COMM_PRMT功能块,把串口设置自由工作模式后,要想恢复为原来状态,需要将RUN/STOP开关拨到STOP位置。只有这样,才可以进行程序的登录与监控。

(b)功能块COMM_SEND。功能块COMM_SEND用于RS-232口通信数据的发送,其梯形图格式如图6-79所示,输入输出说明见表6-19。

对通信口进行了自由协议工作模式设定后,调用本功能块有效。调用时,若输入端Number的值设为4(意即发送4个字节),TBL输入端设为200(意即发送数据M区的起始地址为MB200),当输入端EN从OFF到ON时(上升沿使能),则将MB200~M203的4个字节数据,从串口发送出去。发送未完成,则Q等于1;发送完成,Q等于0。

978-7-111-39745-8-Chapter07-106.jpg

图6-79 功能块COMM_SEND

表6-19 功能块COMM_SEND输入输出说明

978-7-111-39745-8-Chapter07-107.jpg

(c)功能块COMM_RECEIVE。功能块COMM_RECEIVE用于RS-232口通信数据的接收,其梯形图格式如图6-80所示,输入输出说明见表6-20。

对通信口进行了自由协议工作模式设定后,调用本功能块有效。调用时,若输入端Number的值设为4(意即发送4个字节),TBL输入端设为200(意即发送数据M区的起始地址为MB200),当输入端EN从OFF到ON时(上升沿使能),则将接收到的数据,存储到MB200~M205的4个字节中去。接收未完成,Q等于1;接收完成,Q等于0。

978-7-111-39745-8-Chapter07-108.jpg

图6-80 功能块COMM_SEND

表6-20 功能块COMM_RECEIVE输入输出说明

978-7-111-39745-8-Chapter07-109.jpg

(d)功能块Reset_COMM_PRMT。功能块Reset_COMM_PRMT用于RS-232口通信G3专有协议的恢复,其梯形图格式如图6-81所示,输入输出说明同表6-18。

978-7-111-39745-8-Chapter07-110.jpg

图6-81 功能块Reset_COMM_PRMT

调用本模块,输入端MODE的值应选为16#80。这样,当输入端EN从OFF到ON时,RS-232口将恢复为无奇偶校验、8位数据位、波特率38400bit/s的G3专有协议模式。

此外,LM机还有4个RS-485功能块,用于处理RS-485串口通信。具体是:Set_COMM2_PRMT、COMM2_SEND、COMM2_RECEIVE和Reset_COMM2_PRMT。包含在库文件Hollysys_PLC_Comm2.lib中。具体使用见有关说明书。

2.通信处理及通信程序实例

PLC间用串口通信指令通信,主要是理解好、用好上述指令或功能块。具体有两种情况。

(1)单向通信:一方只发数据,另一方只收数据。

发送数据方先准备好数据,再执行发送指令发送数据。注意,两次发送数据发送之间,要有时间间隔。而且时间间隔也要恰当。否则发送数据缓冲区可能堆满数据,造成通信故障,或发送数据不够及时,降低通信效率

接收方则定时执行接收指令,接收数据。其时间间隔应与发送方的一致。接收数据后,还要做数据转移及处理。

有的PLC的数据接收缓冲区,有收到数据的标志,则可利用此标志,起动接收数据指令的执行。缓冲区没有数据,不执行读数据指令,一旦缓冲区有数据,则执行读数据指令。

有的PLC有通信中断功能,那在通信之前,先开接收数据中断。一旦收到数据,再用中断子程序进行读数。

以下列举两个程序实例:

1)两台欧姆龙PLC串口指令通信实例。PLC1定时发送数据,PLC2即时接收数据。在通信前,首先要分别对两台PLC都做好串口设定。设定可使用CX-Programer软件,通过USB口与PLC联机后进行。图6-82所示为串口1设定的情况。

联机后,首先要使PLC处编程状态。接着打开设定窗口。这里选用通信板1,即串口1。从图6-82可知,通信设置为定制,即用户自定。图中1示出选波特率为9600bit/s,格式为8位数据位(可保证传送所有二进制数据),2位停止位,无奇偶校验。图中2所示的通信模式为RS-232,接收字节为16,不用起始码及结束码。这样选择,所使用的数据区不超过16个字节。

978-7-111-39745-8-Chapter07-111.jpg

图6-82 串口1设定

设定后,点击窗口上“选项”下拉菜单,再在其上,选“传送到PLC”项(图中4)。按提示操作,将把这里的设定下载给PLC。

下载后,可再在“选项”下拉菜单中,选“校验”项,将进行是否下载成功的检查,如成功将弹出“PLC设置检验”窗口,并提示“检验成功”。否则将显示“检验错误”。

提示:有时,设定下载后,须对PLC重新上电,设定才能生效,即检验才能成功。

除了设定,还要编程。图6-83a所示为PLC1为定时发送数据程序。而图6-83b所示为PLC2定时接收数据程序。

从图6-83可知,两个程序都是先进行初始化,做好通信准备。图6-83a把D100(控制字)赋值为十六进制数100(使用串口1,无起始及结束字节,先发送高字节),D101赋值为十六进制数10(发送16个字节、8个字)。图6-83b把D103(控制字)赋值为十六进制数100(使用串口1,无起始及结束字节,先发送高字节),把D104赋值为十六进制数10(发送16个字节、8个字)。

进而,都是进行定时器调用。目的都是生成1s脉冲信号T1。接着PLC1是在发送就绪标志ON及定时时间到时,调用发送指令。而PLC2是在接收完成标志ON及定时时间到时,调用接收指令。

978-7-111-39745-8-Chapter07-112.jpg

图6-83 PLC定时数据发送、接收程序

可知,PLC1执行图6-83a程序,将相隔1s,将把D0~D7间8个字、16个字节的当前值向PLC2发送。当然,不用定时发送,而用先设置逻辑条件,在条件满足时发送也是可以的。

而PLC2执行图6-83b程序,将相隔1s,将从串口读取的数据,存入D200~D207间8个字,16个字节中。

一般讲,数据发送比数据接收要简单些。发送准备就绪,执行发送指令总能把数据发出。但数据接收则比较麻烦些。当串口出错、接收数据溢出等情况,将不能接收数据。有时,还可能出现数据存储“串位”。图6-84所示为改进的数据接收程序。

从图6-84可知,程序总是进行接收计数器与设定的接收数据字节设定值比较。一旦出现前者大、等于后者,将执行接收指令。之后还使串口复位、初始化。为新的接收作准备。而且一旦串口出错,即标志A392.12ON,也将初始化串口。经实际调试,效果能好些。

2)两台LM机RS-232串口通信实例。两PLC的CPU模块都选用LM3109,通信协议采用自由协议。第1台PLC为主站,发送数据,第2台PLC为从站,接收数据。

978-7-111-39745-8-Chapter07-113.jpg

图6-84 改进的数据接收程序

(a)主站PLC程序设计。

变量声明如下:

978-7-111-39745-8-Chapter07-114.jpg

978-7-111-39745-8-Chapter07-115.jpg

主站梯形图程序如图6-85所示。

图6-85节1为通信口设定。设定波特率为9600bit/s,8位数据位,无奇偶校验。如设定成功,%QX0.0 ON。节2为执行赋值指令,分别把通信数据10、20、30及40赋值给%MW800、%MW802、%MW804及%MW8064个字。节3为启用与设定定时器0TON1、TON2。节4为定时执行发送数据指令,把%MW800、%MW802、%MW804及%MW8064个字,8个字节的数据向对方PLC发送。如数据发送成功,%QX0.1置位。节5为延时执行复位指令,使%QX0.1复位。节4、节5配合,当发送数据成功,可使%QX0.1控制的指示灯闪烁。

978-7-111-39745-8-Chapter07-116.jpg

图6-85 通信主站梯形图程序

(b)从站PLC程序设计。

变量声明如下:

978-7-111-39745-8-Chapter07-117.jpg

978-7-111-39745-8-Chapter07-118.jpg

从站梯形图程序如图6-86所示。

图6-86节1为通信口设定。设定波特率为9600bit/s,8位数据位,无奇偶校验。如设定成功,%QX0.0 ON。节2为启用与设定定时器0TON1。节3为定时执行接收数据指令,并把4个字,8个字节的数据,分别存于%MW800、%MW802、%MW804及%MW806中。如数据接收成功,%QX0.1置位。

(2)双向通信:先甲方发数据,乙方收数据,后可能乙方发数据,甲方收数据。双向地交换数据。

编写这样的通信程序,也是要用好发送与接收指令。同时,还要处理好时序、应答及故障应对3个问题。

978-7-111-39745-8-Chapter07-119.jpg

图6-86 通信从站梯形图程序

时序很重要。一方发送数据后,要等待一定时间,才能得到对方的应答。发送数据与得到应答总是成对的,有确定的顺序,要用定时器处理好这个顺序。

由于RS-232、RS-422是双工的,发送与接收各有其信道,可同时进行,而互不干扰。若处理不好时序,很可能把对上一次的应答当做对本次的应答。这时,尽管通信正常,但由于“张冠李戴”,将是危险的。

而如用RS-485口通信,由于它是单工的,在发送数据时,就不能接收数据,反之也一样。而且从硬件上讲,在“收”状态与“发”状态转换是要时间的,如几毫秒,这就不仅要处理好时序,还要处理好必要的转换等待。否则将出现通信停顿:要不双方都发数据,结果谁也收不到数据;要不双方都在接收数据,当然也是什么数据都收不到。

应答也很重要。应答的数据最好能把发送的数据适当重复返回,这样即使时序错位,出现“张冠李戴”现象,也能察觉出来,可避免出错。

为了避免通信停顿,有两个办法:

1)双方基本状态,都应处在接收数据状态,发送数据后,就进入此状态。

2)指定一方为主动方,一旦通信停顿或出现其他通信不当,主动方负责发起再通信。而由于这时另一方是处于接收数据状态,故新的通信进程可得以启动。这正像通电话:如突然断线,大家都回到接电话状态,并默认由某方再拨号,另一方等着。通话很快可得以继续。否则,双方都拨电话,或都不拨电话,通话就不能继续了。

故障应对也是必须要考虑的。因为用通信交换数据,涉及通信双方,出错的几率总是存在的。为此,可用定时器及计数器进行控制。定时器类似看门狗,看通信的应答是否超时。超时,则重发数据。用计数器计重发次数。一旦次数也超过,则报警,或提示作相应处理。

从上介绍知,PLC间用串口通信指令通信是较麻烦的,故用的很少。较好的通信方法是用串口链接或协议通信。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈