S7-200自由口通信,接收丢包,烦请指教。 点击:1800 | 回复:17



sunsongweisdu

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 14回
  • 年度积分:0
  • 历史总积分:138
  • 注册:2010年10月23日
发表于:2011-08-13 10:09:42
楼主
各位朋友大家好!我在用S7-200的PLC做自由口通信的时候,遇到了接收数据丢包的问题。具体操作是这样的:PLC与设备A之间进行串口通信,波特率为38400,PLC每次发送一个包,数据格式为:包头,数据区,CRC检验及包尾,总共14个字节,设备A回复五个包,格式一样,两个包的时间间隔为20Ms,我的接收方式是设有接收缓冲区,长度为14个字节,接收结束方式为最大字符和信息定时器,PLC发送命令是在接收中断后150ms,可是无论怎么调这个时间及信息定时器的时间,丢包率都高达20%甚至30%;还请各位大侠指教一下。



ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2011-08-13 10:27:08
1楼
单次接收也会丢包吗?     

sunsongweisdu

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 14回
  • 年度积分:0
  • 历史总积分:138
  • 注册:2010年10月23日
发表于:2011-08-13 10:49:30
2楼
对,单次接收的时候,有时也会丢,设备A发过来5个包,有时只能收到两个或者三个。

gsja

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 175回
  • 年度积分:0
  • 历史总积分:730
  • 注册:2008年8月22日
发表于:2011-08-13 10:55:03
3楼

可能是设备的问题,我遇见过此种情况,要不就把程序传上来,大家帮你看看

 

sunsongweisdu

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 14回
  • 年度积分:0
  • 历史总积分:138
  • 注册:2010年10月23日
发表于:2011-08-13 10:59:55
4楼
回复内容:
对:gsja 关于

可能是设备的问题,我遇见过此种情况,要不就把程序传上来,大家帮你看看

 

内容的回复:不是设备的问题,设备A往PLC发数据的同时,还通过CAN口往外发送,从CAN上收到的数据是不丢的。您说的设备问题,是不是指设备并没有发出5个包?


gsja

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 175回
  • 年度积分:0
  • 历史总积分:730
  • 注册:2008年8月22日
发表于:2011-08-13 11:11:48
5楼
有些设备的通讯功能不是很好,感觉好像是反映迟钝一样,不响应主机命令,你确认程序没问题吗?发过来共同讨论一下1350230914@qq.com

gsja

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 175回
  • 年度积分:0
  • 历史总积分:730
  • 注册:2008年8月22日
发表于:2011-08-13 11:14:36
6楼

可以改一下通讯比特率试一下

gsja

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 175回
  • 年度积分:0
  • 历史总积分:730
  • 注册:2008年8月22日
发表于:2011-08-13 11:31:51
7楼
建议信息接受用空闲检测,信息结束用最大字符,一般38400的波特率信息发送出去到接受到信息最少要用12ms到20ms(因设备和收据包的大小而不同),你每个接收包之间的间隔时间20ms,150ms是肯定不够的

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2011-08-13 12:48:39
8楼
引用gsja 的回复内容:建议信息接受用空闲检测,信息结束用最大字符,一般38400的波特率信息发送出去到接受到信息最少要用12ms到20ms(因设备和收据包的大小而不同),你每个接收包之间的间隔时间20ms,150ms是肯定不够的


减小 波特率, 或在条件允许的情况下 减小布线距离; 做好防干扰措施,尤其是接地;

sunsongweisdu

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 14回
  • 年度积分:0
  • 历史总积分:138
  • 注册:2010年10月23日
发表于:2011-08-13 14:36:24
9楼

回复内容:
对:gsja 关于建议信息接受用空闲检测,信息结束用最大字符,一般38400的波特率信息发送出去到接受到信息最少要用12ms到20ms(因设备和收据包的大小而不同),你每个接收包之间的间隔时间20ms,150ms是肯定不够的 内容的回复:

我每一个包的数据为14个字节,算下来,需要不到4ms的时间,而设备A的20Ms间隔,是从发送前一包的开始算起,这样来说,五个包发送过来,如果不出现丢包,那么100ms就可以收完,所以我设的150ms足够,我现在是怀疑,我对自由口的接收用法不够准确;



sunsongweisdu

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 14回
  • 年度积分:0
  • 历史总积分:138
  • 注册:2010年10月23日
发表于:2011-08-13 14:37:52
10楼

回复内容:
对:miy_gongkong 关于引用gsja 的回复内容:建议信息接受用空闲检测,信息结束用最大字符,一般38400的波特率信息发送出去到接受到信息最少要用12ms到20ms(因设备和收据包的大小而不同),你每个接收包之间的间隔时间20ms,150ms是肯定不够的
内容的回复:



减小 波特率, 或在条件允许的情况下 减小布线距离; 做好防干扰措施,尤其是接地;


现场的环境很好, 是实验室环境,线长也在5米之内。我觉得不存在干扰的问题;


bhdxzgp

  • 精华:5帖
  • 求助:8帖
  • 帖子:141帖 | 5451回
  • 年度积分:0
  • 历史总积分:21609
  • 注册:2006年4月16日
发表于:2011-08-13 19:51:41
11楼

我在想如果是自由口的;通过485线进行数据传送 ,当发送命令到后,下层设备给PLC回报文时,总线可能还没有转成为接收模式;

因为485是半双功;你这个问题我也碰到过,!

sunsongweisdu

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 14回
  • 年度积分:0
  • 历史总积分:138
  • 注册:2010年10月23日
发表于:2011-08-14 10:17:54
12楼
回复内容:
对:bhdxzgp 关于

我在想如果是自由口的;通过485线进行数据传送 ,当发送命令到后,下层设备给PLC回报文时,总线可能还没有转成为接收模式;

因为485是半双功;你这个问题我也碰到过,!

内容的回复:你这个说法到是提醒了我,请问485从发送转为接收的模式转换需要多长时间呢?


gsja

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 175回
  • 年度积分:0
  • 历史总积分:730
  • 注册:2008年8月22日
发表于:2011-08-14 12:15:57
13楼
我觉的smb90,不应该为0,这样信息就检测不到开始,你用最大字符结束了一条信息,但无法检测到下一条信息的开始,建议smb90=5, 将最大时间延迟到200ms试一下

gsja

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 175回
  • 年度积分:0
  • 历史总积分:730
  • 注册:2008年8月22日
发表于:2011-08-14 12:20:10
14楼
你也可以将最大字符改为70,一次性将信息接受完毕

gsja

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 175回
  • 年度积分:0
  • 历史总积分:730
  • 注册:2008年8月22日
发表于:2011-08-14 12:30:06
15楼

可以用串口调试工具单独发送一条指令,看接受的信息是否正确

虫子

  • 精华:0帖
  • 求助:1帖
  • 帖子:20帖 | 1062回
  • 年度积分:0
  • 历史总积分:3730
  • 注册:2009年8月01日
发表于:2011-08-14 14:00:58
16楼
引用gsja 的回复内容:

可以用串口调试工具单独发送一条指令,看接受的信息是否正确





sunsongweisdu

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 14回
  • 年度积分:0
  • 历史总积分:138
  • 注册:2010年10月23日
发表于:2011-08-17 09:31:43
17楼
问题的原因找到了,是设备A发送的数据不均匀,并非20ms发一个包,有时会积压好多个包一块发过来。解决方案正在进一步的研究中。

热门招聘
相关主题

官方公众号

智造工程师