发布于 2010-08-06 09:29:33
18楼
我现在的项目是PLC作为TCP服务器,上位软件作为TCP客户端。
CP343-1直接组态TCP连接就可以了,本机端口设为502,PLC端为2000.
现在的工作就是实现MODBUS TCP FC03读寄存器和FC 16写寄存器的功能。
FC03读的指令还好处理一点,经过参考有关资料,将下发报文的第8、第9个字节作为DB块的地址和DB块中字节的地址,然后再把下发报文的前8个字节复制后加到我要发送的数据前面发送出去就可以了。这部分的功能已经实现。
现在的难点是写寄存器的问题:
我调用的是通信功能块中的FC5、FC6来收发数据的,FC6的接收缓冲区无法判断TCP数据流的开始和结束,我感觉其接收缓冲区类似与一个环形结构,如果实际发送的数据不等于定义的接收缓冲区的大小,那么接收的数据就乱套了,很难在程序中处理。
参考资料:http://www.ad.siemens.com.cn/applic/publicsystem/article.asp?articleid=448
之所以读的指令好处理一些,是因为读的报文是固定的12个字节,那么我就可以把FC6的接收缓冲区直接定义为固定的12个字节,然后对其分析就可以了。
而写的指令复杂一些,每次都是不固定的长度,那么如何定义缓冲区的大小呢?有什么办法能让FC6每次接收的数据都从接收缓冲区的头一个字节开始呢?
不知道FB64接收数据的机制是否和FC6一样呢?
不知道各位大侠能不能指点一下呢?谢谢了
业精于勤,行成于思