技术论坛

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

作者 主题
官方工程师
西门子官方工程师

经验值: 2465
发帖数: 132
精华帖: 16
主题:来自西门子技术支持热线的故事:CP341怎么收不到数据?


只看楼主 楼主 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

 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=749967&b_id=4&s_id=0&num=8

游侠

经验值: 544
发帖数: 375
精华帖: 0
回复:来自西门子技术支持热线的故事:CP341怎么收不到数据?


只看楼主 1楼 2010-10-29 10:37:26
我在现场中也遇到这样的问题,但是更换了一块CP341卡件,就能接收到数据了,组态没有做任何修改,不知道为什么?卡件已发SIEMENS进行检测了!现场总是有很多意外的事情出现!不断学习中。。。。。。。。。。。。
xbsong8010
以下网友喜欢您的帖子:

  
游民

经验值: 123
发帖数: 22
精华帖: 1
回复:来自西门子技术支持热线的故事:CP341怎么收不到数据?


只看楼主 2楼 2010-10-29 11:08:28
又是一个好故事,高技术就是要追求理论与细节。学习了!
 
以下网友喜欢您的帖子:

  
oYo
游侠

经验值: 498
发帖数: 295
精华帖: 0
回复:来自西门子技术支持热线的故事:CP341怎么收不到数据?


只看楼主 3楼 2010-11-02 15:02:02
这么深奥的东西 ..........学习了.......
不过应该给出default值 省得用户自己去计算 设置...或者设计自动计算功能...
值得改进
对于最终使用者,需要更多的节约时间。
换句话说 : 越傻越好!
OK, do it !
以下网友喜欢您的帖子:

  
侠士

经验值: 1232
发帖数: 296
精华帖: 0
回复:来自西门子技术支持热线的故事:CP341怎么收不到数据?


只看楼主 4楼 2010-11-03 09:21:24
详细说来接收数据的条件有三种:

 1.字符延迟时间结束(On expiry of character delay time)

 2.接收固定长度字符(On receipt of end character)

 3.接收文本结束字符(On receipt of fixed number of characters)
呵呵,纠个错,英文解释错了,2和3颠倒
谢谢楼主,在300上用串口模块不多,但是1200和200用的比较多,原理是一样的,讲的很清楚
 
以下网友喜欢您的帖子:

  
游民

经验值: 92
发帖数: 42
精华帖: 0
回复:来自西门子技术支持热线的故事:CP341怎么收不到数据?


只看楼主 5楼 2010-11-03 09:29:25
非常感兴趣,深入学习下
www.lingkun.net
以下网友喜欢您的帖子:

  
侠客

经验值: 925
发帖数: 425
精华帖: 3
回复:来自西门子技术支持热线的故事:CP341怎么收不到数据?


只看楼主 6楼 2010-11-03 13:43:56
通信速率要是9600的话,设置成4ms,一般都没有问题。
 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8562
发帖数: 3432
精华帖: 56
回复:来自西门子技术支持热线的故事:CP341怎么收不到数据?


只看楼主 8楼 2011-09-04 12:50:24
485和232都搞不清楚那就有点夸张了……
If anything can go wrong, it will.
以下网友喜欢您的帖子:

  
游侠

经验值: 400
发帖数: 121
精华帖: 0
回复:来自西门子技术支持热线的故事:CP341怎么收不到数据?


只看楼主 9楼 2011-10-02 19:04:14
用2台西姆宏S1204和CP341做的MODBUS通信,速率9600,收发时间是30MS,通信正常。设置成其他时间,通道就有干扰,如第一台的第一个通道是200,第二台的第一通道也是200,时有时无,改回30MS,一切正常了,不知是什么原因。
??1.字符延迟时间结束
?
???2.接收固定长度字符
?
???3.接收文本结束字符
这3种形式不知怎么用,每隔30MS发送一次。看了这个帖子,似乎明白点儿了。
 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
来自西门子技术支持热线的故事:CP341怎么收不到数据?
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。