自由协议通信十四讲:OCS控制器串口收发功能详解.pptx

自由协议通信十四讲:OCS控制器串口收发功能详解.pptx

入门级OCS控制器X2专题讲座授课人:张伟宁马骏王静波ControlIOCommHMI美国浩纳尔一体化PLC专题系列讲座

第十四讲:自由口通信1.串口发送和接收数据功能块介绍2.自由协议编程注意事项3.多站点双向通信的一般编程思路4.实例演示–GPS数据接收和解析

发送端口数据串口收发功能块名称描述Port选择要从哪个通信端口发送数据NumberofBytes要发送的字节数,最大255DataAddress要发送数据的起始地址TxCounts已发送数据长度,如果该功能块未得电,则该值为-1

接收端口数据串口收发功能块名称描述Port选择要从哪个通信端口接收数据NumberofBytes要接收的字节数,最大255DataAddress要接收的数据存放的起始地址RxCounts已接收数据长度,如果该功能块未得电,则该值为-1

自由协议编程注意事项1.SEND功能块的导通时间当要发送的字符数较多,或者通信波特率较慢时,通过SEND块发送的数据有可能在一个扫描周期中发送不完,这就要求我们给SEND功能块的使能不能仅仅是一个脉冲,而应该是一个持续的给定。然后我们可以判断当已发送的字节数大于等于我们设定的字节数时,认为发送完成,然后断开SEND功能块的使能条件。当然,如果发送的字节数很少,可以一个扫描周期发送完,用脉冲信号使能SEND也是可以的。

自由协议编程注意事项2.RECV功能块与缓存区在串口通信中存在缓存区的概念:当OPEN对应的端口后,如果总线上有数据,OCS会把数据存放在对应端口的缓存区,然后只有当RECV功能块得电一次的时候,才会从缓存区中把最先进入缓存区的数据传递给RECV块内的寄存器,其数量小于等于RECV块的设定值。比如,假设缓存区内有37个字节的数据,我们的RECV块设定为取19个字节,当RECV块前的使能条件从OFF变为ON时,会把19个字节的数据放置在%R2401开始的连续寄存器中,同时缓存区还剩下18个字节;当RECV块的使能条件第二次从OFF变为ON时,会把剩下的18个字节的数据放置在%R2401开始的连续寄存器中,此时缓存区数据清零。数据缓存区总线同时也要注意,同SEND数据一样,RECV块也未必能在一个扫描周期收到所需要的所有数据,所以在程序中也可能需要做类似于SEND的比较处理。

自由协议编程注意事项3.CLOSE功能块的应用从数据缓存区的应用中我们会看到一个问题,假设每次设备会回复给我们19个字节的数据,但因为干扰或某种原因,总线上变成了20个数据,该数据进入缓存区后,如果没有及时处理,会导致其后每次RECV块执行时获取的数据错位,进而造成其后的数据解析出错。目前,我们常用的做法是,当每次RECV块收到其所需的数据后,直接CLOSE掉对应的端口,然后在下个扫描周期再OPEN这个端口。CLOSE端口可以清除掉其内的所有数据,这样,我们只损失了一次应答的数据,它对下一次应答不会造成影响。4.SEND和RCVE块不能同时导通这个很好理解,因为大多数应用场合里,总线是处于半双工模式,所以在一个扫描周期中,请确保每个端口的程序中,只有一个SEND或者RECV块被使能导通。如果同时导通多个块,其执行结果未必是我们想看到的。

多站点双向通信的一般编程思路下面列出了一种简单的自由口多站点双向通信时的编程思路,供参考:首先我们设定一个定时器,让其每固定一个时间对一个寄存器加1,时间间隔可以按照不同设备和网络情况进行调整。当寄存器=1时,OPEN端口当寄存器=2时,置位SEND块发送条件,把a设备的报文MOVE给SEND块里的寄存器,用SEND块对设备a发送数据;在执行B步的同时,不断检测SEND字符的数量,当达到要发送的数量后,复位SEND条件,置位RECV块条件,开始接收数据;不断检测RECV的接收字符数量,当发现其大于等于所需字节数后,把接收到的数据MOVE到另一段寄存器进行解析处理,并复位RECV的条件;当寄存器=n时(n-2所代表的时间即为自由口设备的最大通信响应时间,这个按需要调整),无论是否接收到所需数据,都复位RECV的条件;F.当寄存器=n+1时,置位SEND块发送条件,把b设备的报文MOVE给SEND块里的寄存器,用SEND块对设备b发送数据;。。。。。。当做完所有设备的通信后,CLOSE端口,复位计时器;123。。。。nn+178。。。。M时间Open端口向设备aSend数据从设备aReceive数据向设备bSend数据Close端口。。。。。。。

多站点双向通信的一般编程思路以上思路的优点在于比较简单,程序执行严格按照时间步骤,比较清晰,易于实现。缺点

文档评论(0)

1亿VIP精品文档

相关文档