回复:能用CPU317-2PN/DP建立TCP连接实现Modbus-TCP通信读取从站数据吗?

火麒麟

西门子1847工业学习平台

  • 帖子

    571
  • 精华

    18
  • 被关注

    20

论坛等级:侠圣

注册时间:2006-09-21

普通 普通 如何晋级?

发布于 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一样呢?
不知道各位大侠能不能指点一下呢?谢谢了
业精于勤,行成于思
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54757条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。