来自西门子技术支持热线的故事:CP341怎么收不到数据?

已锁定

西门子Auto

官方工程师

  • 帖子

    132
  • 精华

    16
  • 被关注

    227

论坛等级:侠圣

注册时间:2007-08-03

普通 普通 如何晋级?

来自西门子技术支持热线的故事:CP341怎么收不到数据?

4430

8

2010-10-26 17:26:50

今天和大家聊聊CP341模块的一个热线故事

这个模块的使用问题很常见,如何接线,怎么组态,程序设置等等问题,一般按照手册使用入门一步步组态是不会有问题的,但是还是有一些细节是需要考虑的。
客户的问题是这样的:
客户:采用的是ASCII 串行通讯方式与伺服液位计通信,双方约定波特率 1200 bps ,数据位8 位, 1位奇校验,1位停止位,数据收不到,但是接收灯一直亮。
我:检查诊断缓冲区(这句话经常说)
客户:CP341报错说缓冲区已满。
我问了一下ASCII的设置,其使用的接收条件为字符延时时间结束方法,设置的参数为100ms。
我:建议修改到40ms,问题解决。
那为什么要改成40ms呢?接收参数到底如何设置?


详细说来接收数据的条件有三种:
 1.字符延迟时间结束(On expiry of character delay time)
 2.接收固定长度字符(On receipt of fixed number of characters)
 3.接收文本结束字符(On receipt of end character)


第一种字符延迟时间作为结束标准,这种用的最多,客户使用的也是这个,定义两个连续接收到的字符间允许的最大间隔时间,当字符延迟时间结束时识别为消息帧结束, CPU 即可接收数据。
例如把字符延迟时间设置为400ms,


则一旦发送数据间隔大于400ms则认为第一帧结束。例如如下示波器捕捉报文显示:


这个时间怎么设置呢,这个时间是由两个参数决定一个是发送方间隔(send interval),这个发送方控制不由CP341决定,另一个参数是通信速率(transmission rate)。它们的关系如下图:


默认设置为传输4个字符需要的时间,比如通信速率是9600bps,则发送一个字符需要的时间为(1位起始位+8位数据位+1位停止位+1位校验位或者没有)/9600=1.04~1.1ms,默认参数为4ms。如果通信速率为9600,发送30个字节的数据根据上图公式,发送间隔不允许小于30+4 =34ms。客户使用的通信速率是1200bps,发送一个字符需要10ms,但是其发送间隔不确定(伺服液位计决定),由于其现象为缓冲区满,因此可以认为报文始终没有接收结束,字符延迟时间设置大于发送间隔,改小后可以解决,但是要注意不要过小。
第二种方式是固定帧长度作为结束标准, 顾名思义是指收到固定的字符数之后接收结束, CPU 接受 CP 所接收的数据。


如果发送的字符长度与设置不一致则需要考虑字符间隔时间,当长时间没有收到字符(大于字符间隔时间)则不足或超出的字符部分会被丢弃掉。
例如如下示波器捕捉报文显示:


第三种方式为判断消息帧的结束字符,必须确保用户数据中不存在指定的结束字符


在指定的字符延迟时间内没有收到结束字符,则被丢弃掉。
以上仅是对接收参数进行的简要描述,其他常见问题汇总 推荐大家有兴趣的话可以看一下:
串行通信模块常见问题集
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=f0426
来自西门子技术支持热线的故事:CP341怎么收不到数据? 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54044条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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