首页 理论教育 PLC串口通信程序设计:实现PLC与PLC的通信

PLC串口通信程序设计:实现PLC与PLC的通信

时间:2023-06-16 理论教育 版权反馈
【摘要】:表5-6所示为三家PLC串口通信指令。图5-62 通信程序效果模拟表5-6 三家PLC串口通信指令在这些通信指令中,最常用的是发送与接收指令。选用哪个串口及通信帧格式由控制字C指定。串口只能按HostLink协议被动接受通信。自C200Hα机后才有串口指令,才可主动发起通信。含义为低字节先发送,指定逻辑端口3,使用串口1及串口通信单元地址12Hex。

PLC串口通信程序设计:实现PLC与PLC的通信

1.PLC串口通信指令

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

978-7-111-56641-0-Chapter06-67.jpg

图5-62 通信程序效果模拟

5-6 三家PLC串口通信指令

978-7-111-56641-0-Chapter06-68.jpg

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

(1)欧姆龙PLC串口指令

其指令较多。同样指令,机型不同,功能也不完全相同。表5-7所示为CJ系列机的串口指令。

5-7 CJ系列机串口指令

978-7-111-56641-0-Chapter06-69.jpg

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

1)发送指令TXD。用以向串口发送数据,指令的梯形图格式如图5-64所示。

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

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

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

978-7-111-56641-0-Chapter06-70.jpg

图5-63 帧格式

978-7-111-56641-0-Chapter06-71.jpg

图5-64 TXD指令

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

2)接收指令RXD。用以从串口读取数据,指令的梯形图格式如图5-66所示。

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

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

978-7-111-56641-0-Chapter06-72.jpg

图5-65 发送控制C字含义

978-7-111-56641-0-Chapter06-73.jpg

图5-66 RXD指令

978-7-111-56641-0-Chapter06-74.jpg

图5-67 接收控制字含义

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

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

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

5-8 串口有关辅助继电器功能及其说明

978-7-111-56641-0-Chapter06-75.jpg

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

3)串口通信单元发送指令。用以发送数据,其梯形图格式如图5-68所示。

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

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

978-7-111-56641-0-Chapter06-76.jpg

图5-68 TXDU指令

与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)显示。还有其它一些辅助继电器,其功能见表5-9。

978-7-111-56641-0-Chapter06-77.jpg

图5-69 发送控制字含义

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

5-9 有关辅助继电器功能

978-7-111-56641-0-Chapter06-78.jpg

m=D30000+100×单元编号CH

n=1500+25×单元编号

而对CP1H机,其计算公式为

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

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

而这些内存区的设定及状态见表5-10、表5-11所示。

图5-70所示为这个指令的使用实例。

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

控制字C设为1Hex,C+1为3112Hex。含义为低字节先发送,指定逻辑端口3,使用串口1及串口通信单元地址12Hex。

5-10 有关数据存储区设定

978-7-111-56641-0-Chapter06-79.jpg

5-11 有关内存位状态

978-7-111-56641-0-Chapter06-80.jpg

结合本例,如果原数据区的内容如图5-71a所示,那么,对应所发送的字符串将是如图5-71b所示。

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

4)串口通信单元接收指令。其梯形图格式如图5-72所示。

978-7-111-56641-0-Chapter06-81.jpg

图5-70 使用发送指令程序

978-7-111-56641-0-Chapter06-82.jpg

图5-71 原数据区内容

978-7-111-56641-0-Chapter06-83.jpg

图5-72 RXDU指令

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

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

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

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

1)RCV:为S7-200串口接收指令。其梯形图格式如图5-74所示。

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

TBL——字表的首地址;

PORT——选用的通信口。

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

2)XMT:为S7-200串口发送指令。其梯形图格式如图5-75所示。

978-7-111-56641-0-Chapter06-84.jpg

图5-73 控制字设置

978-7-111-56641-0-Chapter06-85.jpg

图5-74 RCV指令

978-7-111-56641-0-Chapter06-86.jpg

图5-75 XMT指令

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

TBL——字表的首地址;

PORT——选用的通信口。

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

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

(3)三菱PLC通信指令RS

其为三菱PLC串口通信发送、接收指令。其梯形图格式如图5-76所示。

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

m——发送数据的字数;

D——存储接收数据的首地址;

n——接收数据的字数。

978-7-111-56641-0-Chapter06-87.jpg

图5-76 RS指令

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

978-7-111-56641-0-Chapter06-88.jpg

图5-77 RS指令使用说明

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

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

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

(1)单向通信

一方只发数据,另一方只收数据。

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

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

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

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

以下列举程序实例:

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

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

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

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

提示:有时,设定下载后,需对PLC重新上电,设定才能生效。

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

978-7-111-56641-0-Chapter06-89.jpg

图5-78 串口1设定

978-7-111-56641-0-Chapter06-90.jpg

图5-79 PLC定时数据发送、接收程序

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

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

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

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

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

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

(2)双向通信

先甲方发数据、乙方收数据,后可能乙方发数据、甲方收数据。双向地交换数据。

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

978-7-111-56641-0-Chapter06-91.jpg

图5-80 改进的数据接收程序

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

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

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

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

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

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

2)指定一方为主动方,一旦通信停顿或出现其它通信不当,主动方负责发起再通信,

而由于这时另一方是处于接收数据状态,故新的通信进程可得以启动。这正像通电话:如突然断线,大家都回到接电话状态,并默认由某方再拨号,另一方等着。通话很快可得以继续。否则,双方都拨电话,或都不拨电话,通话就不能继续了。

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

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

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

我要反馈