搜索
bottom↓
回复: 12

FreeModbus 配置串口为1/2位(停止位)数据都能正常通信, 为何?

[复制链接]

出0入0汤圆

发表于 2017-7-26 14:54:26 | 显示全部楼层 |阅读模式
实验环境:
<1> FreeModbus 1.5版本.
<2> ModbusPool 作为主机, (stm32f1)单片机作为从机.
<3> 使用RS485作为媒介进行通信.
<4> 使用9600波特率.
<5> 不管上位机还是下位机, 都不使用奇偶校验.

实验缘由:
如下图所示: 协议要求如果不使用奇偶校验位的话, 必须使用2位停止位.
我之前还没有在意这个, 赶紧实验下看看, 结果更没想到...


实验现象:
<1> 上位机(Modbus Pool)配置使用1位停止, 下位机(单片机)配置使用1位停止位.
<2> 上位机(Modbus Pool)配置使用1位停止, 下位机(单片机)配置使用2位停止位.
<3> 上位机(Modbus Pool)配置使用2位停止, 下位机(单片机)配置使用1位停止位.
<4> 上位机(Modbus Pool)配置使用2位停止, 下位机(单片机)配置使用2位停止位.

实验疑问:
上述4种情况经过验证, 数据都能正常通信, 并且不出现乱码. 请问大神, 该如何解释???

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2017-7-26 16:51:23 | 显示全部楼层
坐等大神...

出0入0汤圆

发表于 2017-7-27 13:34:53 | 显示全部楼层
实际情况是不管是从站还是主站,发送的时候都是发送设置的个数的停止位,但是接收的时候只检测第一个停止位,忽略第二个停止位。

出0入0汤圆

 楼主| 发表于 2017-7-28 08:48:49 | 显示全部楼层
lingdianhao 发表于 2017-7-27 13:34
实际情况是不管是从站还是主站,发送的时候都是发送设置的个数的停止位,但是接收的时候只检测第一个停止位 ...


大神, 我来理解下, 您看下是否正确?

1> 字符内的校验是采取奇偶校验的, 既然没开启, 自然不会校验.

2> 帧校验是采取CRC校验, 由于CRC只校验PDU部分(功能码+数据), 所以, 即使是少了一位, 也是校验不出来的.

恳请大神指教...因为我还没有彻底明白为什么(强调)字符的比特总数是11位, 并且还校验不出来...

出0入8汤圆

发表于 2017-7-28 09:07:02 | 显示全部楼层
擦鞋匠 发表于 2017-7-28 08:48
大神, 我来理解下, 您看下是否正确?

1> 字符内的校验是采取奇偶校验的, 既然没开启, 自然不会校验.

如果标准确实严格要求 11 位的长度的话,
那么你这样的情况,我只能说,设备是不符合标准的。
如果要 100% 符合标准的话,那么就是要 11 位。

但为什么这样也行,你还没看清串口传输的本质:
1、串口 line 默认是高电平,这也是 stop 位的逻辑。
2、当 line 由高到低跳变,就是 start 位,此时接收设备意识到一个新的 char 即将到来,这是第 1 个 bit 的传输单元。
3、紧接着按照波特率,分 8 个 bit 的传输单元,分别接收一个 char。
4、最后,在第 10 个 bit 的传输单元,line 要回到高电平,也就是 stop 位需要的逻辑

其中 char 数据,跟 start 位和 stop 位无关,而协议所谓的帧校验,校验的是这部分 char 数据。
stop 位需要回到高电平,后续数据的传输,才有可能重新触发 start 信号,即高到低的跳变。
也只有检测到 start,才会认为有 char 数据需要接收。所以你一个、两个停止位,line 线都是高电平,接收设备压根就不关心这个,只有下一个 char 要发送时,接收设备才会检测到 start 信号,才会开始接收。

出0入36汤圆

发表于 2017-7-28 09:10:20 | 显示全部楼层
本帖最后由 norman33 于 2017-7-28 09:13 编辑

楼主注意看下RS485的时序 当通信结束后总线被拉高 这个时候检测停止位 所以不管你配置1位还是2位都能被检测出来是停止位 只要不是连续不断的发送破坏总线空闲的状态
请忽略那个标注错误的 TTL电平

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2017-7-28 10:22:15 | 显示全部楼层
感谢楼上两位大神, 看来我要学习/理解的东西还有很多啊...路慢慢长...我该何去何从...

出0入8汤圆

发表于 2017-7-28 10:41:56 | 显示全部楼层
擦鞋匠 发表于 2017-7-28 10:22
感谢楼上两位大神, 看来我要学习/理解的东西还有很多啊...路慢慢长...我该何去何从...  ...

time + insight。
如果具备好的 insight,那么 time 会很短。

说到 insight,我再给你说一个问题:
我记得以前跟你说过标点符号的问题,你现在仍是英文模式,只不过有进步,变成:英文 + space。
这仍是不对的。
如果我是你的主管,你的文档这么写,内容都不用看了,直接打回去,整理好格式再来。
你好像一直没意识到这个问题,看看网络上、身边周围的人,多数人是跟你一样?还是不一样呢?
能不能意识到正统、主流的做法,这就是 insight 的一个体现。

你如果要说这样码字快的话,我想说的是:我们不是打字员,我们是程序员!

你可以看下:
阮一峰的这篇文章:「中文技术文档的写作规范」。

出0入0汤圆

 楼主| 发表于 2017-7-28 12:02:09 | 显示全部楼层
security 发表于 2017-7-28 10:41
time + insight。
如果具备好的 insight,那么 time 会很短。

感谢指正,向您学习。

出0入8汤圆

发表于 2017-7-28 15:33:13 | 显示全部楼层
擦鞋匠 发表于 2017-7-28 12:02
感谢指正,向您学习。

我上面说话可能直接了点(主管的栗子),还请勿上心。

出0入0汤圆

 楼主| 发表于 2017-7-28 15:49:46 | 显示全部楼层
大神指点,小弟大恩不言谢。。。

出0入0汤圆

发表于 2017-8-13 06:41:47 来自手机 | 显示全部楼层
有意思,学习了,谢谢

出0入0汤圆

发表于 2017-8-13 08:50:47 | 显示全部楼层
我用STC单片机的体会,下位机STC11F04,设置成2个停止位,那么,主站必须设置成2个停止位才能正常通讯,而下位机STC12C5404AD,设置成2个停止位,主站设置成1个停止位或者2个停止位都可以通讯。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-22 01:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表