我是一套216CPU的系统,现在需要做一个自由口通讯,用的是串口测试软件读的数据,我第一次做自由口,按照帮助例程做的,可是就是读不到数据。小弟就费解了,而且我只用发送不需要接收。清各位高人帮忙。
问题补充:
发送数据已经解决了,用的SMB34每隔50ms发送一次。但是我也用了PID程序,SMB34对PID有什么影响吗?会有什么结果,然后我想一分钟发送一次数据该如何完成?
最佳答案
:自由口和modbus通信
modbus通信中最大的缺点是通信的时间太长,主要是在对数据的校验上,crc校验码的计数时间是最浪费plc时间的。所以在数据量较大时从站的响应时间就会很慢。这是modbus协议自身的问题很难通过程序解决。在对数据质量要求不高的情况下也可通过自己编写程序减少crc校验时间或不做crc校验。
实现从站:
由于从站是对主站的响应,发送的数据往往是不一致的,因此crc校验的值也是不相同的,因此实现从站功能最好还是使用西门子库中的从站功能程序,可在以下网址下载西门子库的软件包:http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=S0010
要减少crc校验时间可以将主站的请求数据不做crc校验而直接采用,当然对标准的主站响应还是要计数crc校验码的,因此有时时间也不会剪短多少,尤其是主站只读数据时,而在主站写数据时,数据量又很多时时间就会剪短很多。这种做法牺牲了通信的质量。
实现主站:
主站的功能是访问从站,有读写两种功能,有时我们只需向从站读数据,要实现这种功能就无需使用库的程序,可以最小的减少plc的资源和时间。方法是首先配置端口的物理参数:波特率、数据位、停止位、奇偶校验等,这在下面的附件中自由口初始化子程序中实现。
然后是发送请求数据,在数据块中已经将发送的数据定义好并计算出crc校验码,只要使用xtm指令将定义好的数据发送出去就好了。数据发送完执行中断使能接受功能。将接受的数据转移到想要的地址。再次执行发送指令就可不断读取固定参数的数据而且不会占用太多资源。这也是牺牲了通信的质量换来的。
要实现读写两种功能,就要crc校验程序,因为每次的值不同,校验码也就不相同对于标准的从站来说这是不可缺少的。然后将每次计数的crc校验附在数据后就可以实现了,这里区别就是发送的请求是固定的还是变化的。
附件是一个简单modbus通信的例子,同样有自由口配置的部分,希望对大家在使用自由口和modbus时有用
提问者对于答案的评价:
谢谢 很全面
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc313689.html