一杯清酒邀明月
天下本无事,庸人扰之而烦耳。

  通信指令本身不难,难的是对通信的理解。在学习PLC通信指令之前,我曾尝试去看通信相关的课程,然后告诉自己:算了,不必勉强自己,学不会的始终学不会。 

  数据的传输方式有并行和串行两种,其中并行是指同一时刻可以传输多个bit位的信号,有多少个信号位就需要多少根信号线;而串是指同一时刻只能传输一个bit位的信号,只需要一根信号线,如下图所示。PLC与其他设备的通信就是以串行的方式进行的。

  所以文章所谓的通信指令是基于串行的传输方式,这次先分享串行数据传送指令RS与校验码指令CCD,下次接着分享十六进制字符转ASCII码的交换指令ASCI与ASCII码转十六进制字符的交换指令HEX。

01、数据传送指令RS

  RS指令是PLC与外围设备进行数据传输的控制指令,从编程手册截图可以看到,RS指令不可用于32位,也没有脉冲执行型,它有4个操作数,源址 S· 和和终址 D· 只能是数据寄存器D,还有两个操作数n、m可以是常数K、H和寄存器D。RS指令的梯形图形式图下图所示。

  源址S是所发送数据的字元件首址,D是需接收数据的字元件首址;而m是发送数据的个数,n是接收数据的个数,其中n、m的取值范围为0~4096且n+m≤8000。这里要注意的数是,S和D不能使用相同编号的数据寄存器,但m和n可以使用同一数据寄存器。在驱动条件成立时,RS指令告诉PLC做好准备,接下来将要发送m个以S为首址的数据,并接收n个以D为首址的数据。

  例上图所示的执行指令RS D0 K5 D100 K10 ,X0置ON,寄存器D0~D5的开始做好发送数据的准备,而D100~D110也开始做好接收数据的准备。即RS指令执行时,数据并没有马上开始传输,而是处于待命状态。RS指令的应用,会涉及到几个特殊软元件,即下图所示的D8120、M8161、M8122、M8123。所谓通信格式字,简单来说就是PLC与外围设备进行数据传输时所约定的数据格式,例如数据传输怎么开始、如何结束、波特率为多少(每秒传输bit位的个数)等。

  RS指令的应用,会涉及到几个特殊软元件,即下图所示的D8120、M8161、M8122、M8123。所谓通信格式字,简单来说就是PLC与外围设备进行数据传输时所约定的数据格式,例如数据传输怎么开始、如何结束、波特率为多少(每秒传输bit位的个数)等。

  所以,在应用RS指令进行通信前,应先确定通信格式字。这有点像打篮球,比赛时跟队友沟通用手势进行,什么手势进攻、什么手势挡拆、什么手势用什么战术等,这都得事先约定。

  M8161的不同状态决定了RS指令对数据的处理方式:低8位模式或16位模式。所谓低8位,是指RS指令只对源址S和终址D的低8位数据进行传送和接收,而忽略高8位的数据。同理,所谓16位模式是指RS指令对源址S和终址D的16位数据均做发送和接收处理。例如PLC要发送数据:H01、H23、HAB、HCD,接收数据:H45、H67、H89。

(1)若M8161=ON,如下图所示,每个数据寄存器只有低8位用于保存所需的数据,而高8位为零,不做处理。

 (2)若M8161=OFF,如下图所示,每个数据寄存器共有16位,均用于存放数据,与低8位模式相比,少用了一半的数据寄存器。具体用什么模式根据实际情况而定,一般是采用低8位的数据处理模式。

  由M8161的功能和用途可以发现除RS指令外,CCD、ASCI、HEX指令对数据的处理模式也是由M8161的状态控制。也就是说,程序中,一旦M8161的状态被设定,RS、CCD、ASCI、HEX指令对数据的处理模式均相同。

  特殊继电器M8122和M8123是数据发送或接受的标志继电器,它们的状态直接决定了数据是否传输。若把数据传输看成赛跑,则执行RS指令就相当于裁判喊:“预备!”,此时各选手做好蹲踞;M8122置ON,相当于裁判喊:“跑!”,选手们开始跑步,即数据开始传送,M8123也是类似的道理。

  下图为RS指令应用的梯形图示例,在数据发送和接收之前,先确定好数据处理模式和写入通信格式字,如图中的H0C87为一种通信格式字。

  将所需发送的数据先保存到D0~D9,然后将M8122置ON,开始发送数据,数据发送完毕后,继续接收数据并相继保存到PLC的D100~D109中,数据接收完毕后,M8123自动置ON,此时PLC将D100~D109所存的数据转存到D300~D309中,最后将M8123复位,为下一次数据接收作准备。

  数据传送指令RS的理解并不简单,毕竟是通信,说到通信,我流了一地的辛酸泪。RS指令在平时用得不少,希望大家认真学习哦。

02、校验码指令CCD

  所谓校验,简单来说,就是判断数据传送时所传送的数据的正确性。而校验码就是校验的结果,不同的校验方式有着不同的校验结果。校验码指令CCD就是针对求和校验和异或校验而设计的,其编程手册截图如下图所示。

  所谓求和校验,是指将参与校验的数据求和,将求和结果的低8位作为校验码。例如求数据H12、H23、H34、H45、H56的求和校验码,直接将这几个数据相加等于H104,取低8位为H04就是其求和校验码。

  同理,异或校验,就是将参与校验的数据依次按位进行异或运算,最终结果即为异或校验码(列偶校验码)。如下图所示,求数据H12、H23、H34、H45、H56进行异或检验,先将H12与H23按位异或,结果为H31,然后将H31与H34按位异或……最终结果为H16,即异或检验码为H16。

  从编程手册截图可得,CCD指令不可用于32位,有脉冲执行型和连续执行型两种,操作数有3个。其梯形图形式如下图所示,源址S为参与校验的数据存储字元件首址;终址D为求和校验码存储字元件地址,其D+1为存储列偶检验码的地址;n为参与校验数据的个数,取值范围为0~256。

  当驱动条件成立时,对S所存的数据分别求解其求和校验码和列偶校验码,并存到终址D和D+1中。例如执行指令CCD D0 D100 K10,对D0~D9的数据求解其求和校验码和列偶校验码,并将求和校验码存到D100中,将列偶校验码存到D101中。

  在上文中提到,特殊继电器M8161的状态也决定了CCD指令的数据处理模式。若M8161=ON,CCD指令为8位数据处理模式时,仅对首址为S的n个数据寄存器的低8位数据进行求和、异或,而为16位数据处理模式时,将首址为S的n个数据寄存器的高8位、低8位看成两部分,分别进行求和、异或。

  例如执行指令CCD D0 D100 K3,其中(D0)=H0123,(D1)=H2345,(D2)=H3456。(1)若M8161=ON,对D0~D2的低8位进行校验,求和校验码为H23+H45+H56=HBE,列偶校验码为H30;(2)M8161=OFF,对D0~D3的16位进行校验,求和校验码为H23+H01+H45+H23+H56+H34=H16(结果为H116,取低8位),其中H01、H23、H34分别为D0D2的高8位,同理可得列偶校验码为H26。

  求和校验码和异或校验码都比较常用,所以也很有必要理解其含义。

  那么,这次的学习分享就到这里,共勉。

posted on 2023-08-04 15:36  一杯清酒邀明月  阅读(713)  评论(0编辑  收藏  举报