回复:S7200smart 开放TCP通讯每次接收打的返回值有错位,会丢掉开头的几个字节,每次不是固定的

已锁定

Zaxife

  • 帖子

    2450
  • 精华

    31
  • 被关注

    78

论坛等级:至圣

注册时间:2008-07-24

普通 普通 如何晋级?

发布于 2021-09-19 15:02:26

10楼

展开查看
以下是引用太原紫晶在2021-09-18 11:30:31的发言 >9楼

怎么封包呢?

以下是引用Zaxife在2021-09-14 16:28:14的发言 >3楼:OUC的TCP指令...

引用3楼详细内容:

OUC的TCP指令是一数据流的方式发送、接收的,并不是每次Done都是一帧完整的数据帧啊,你需要自己封包、拆包数据的,否则会被活活坑死的。

如果PLC主程序周期很慢?那么有可能一次主程序周期就接收了好几帧数据,这时候你就需要根据缓冲区里面现有的数据按拆包关键字来拆分成多帧数据。

如果PLC主程序周期很快?那么有可能多次主程序周期才能接收到一帧完整的数据帧,这时候你就需要从缓冲区里面找出需要的数据帧了。


那些对你来说可能有点不适合。

给你个建议吧:

1、两个设备同一个交换机或者直连;

2、TCP_RECV每次Busy=0、Done=1、Status=0时,把DataPtr指向的Length个数据BLKMOV_B追加到节点缓冲区;

3、然后循环查找节点缓冲区里面有没有一帧完整的数据,有就BLKMOV_B出来看是不是需要的数据,没有就等到有为止或者超时重新开始计数。



评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9019条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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