技术论坛

 很多人问过这个问题:一个口切换几种波特率做modbus通讯或者切换其他什么的

返回主题列表
作者 主题
芳季
至圣

经验值: 66560
发帖数: 14740
精华帖: 100
楼主    2021-01-14 11:23:03
主题:很多人问过这个问题:一个口切换几种波特率做modbus通讯或者切换其他什么的

今天我做了一下这个试验。

使用一个智能电度表。MB通讯。plc读取各种测量值。表设定的波特率可以随时改,随时生效,不用重启。plc程序除了正常的轮询外,增加了一些自动切换波特率的程序。

当表的波特率变化了之后,当前通讯出现3错误。这时程序切换波特率到下一种。

关键动作:断开ctrl的Mode端,一个周期,然后再接通。

然后再开始正常的轮询。

假如当前扔然报错3,那么继续切换下一个波特率,再断通一次Mode端。

直到找到正确的波特率,通讯不出错。就继续使用这个波特率一直通讯。

实验现象是无论表上切换什么波特率,经过一定的搜寻时间后(这个时间主要是通讯的超时时间和出错重试次数),就会重新通讯上。

看来,在plc单方面的原理上,完全可以任意切换波特率。至于真正网络上如果真的存在多种波特率的话,是否互相影响?这个……。又或者甚至一个通讯口既做自由口通讯又做MB通讯等等,都是可能的。



Zaxife
至圣

经验值: 12573
发帖数: 2503
精华帖: 31
1楼    2021-01-14 11:36:06
主题:回复:很多人问过这个问题:一个口切换几种波特率做modbus通讯或者切换其他什么的
这样虽然可以,但你不觉得太浪费通讯周期时间了么?感觉得不偿失。
holdkcsxyz
至圣

经验值: 13006
发帖数: 1813
精华帖: 22
2楼    2021-01-14 11:38:14
主题:回复:很多人问过这个问题:一个口切换几种波特率做modbus通讯或者切换其他什么的

感谢分享,有空测试再请教。以前讨论过网络中既有的MB_RTU,又有自由口。

能很好的调度网络中的N种不同协议,N种不同速率的协议就是强大的,图灵奖级的TCP协议全栈。

WWCWWC
至圣

经验值: 71673
发帖数: 8015
精华帖: 145
3楼    2021-01-14 11:43:15
主题:回复:很多人问过这个问题:一个口切换几种波特率做modbus通讯或者切换其他什么的

没有具体测试过,理论上应该是可以的。

只是这样的控制,丢失数据的可能会变的大很多。但是,毕竟也是一种比较特殊的用法。


芳季
至圣

经验值: 66560
发帖数: 14740
精华帖: 100
4楼    2021-01-14 12:05:09
主题:回复:很多人问过这个问题:一个口切换几种波特率做modbus通讯或者切换其他什么的

想方便最好当然是使用相同协议相同波特率啦。所以走这条路的人就多了。谁愿意走弯路?有陆路谁愿意走水路?有桥走谁愿意走渡轮?

yming
至圣

经验值: 126782
发帖数: 21986
精华帖: 823
5楼    2021-01-14 12:32:21
主题:回复:很多人问过这个问题:一个口切换几种波特率做modbus通讯或者切换其他什么的

没错!确实是可以的。

所有通讯模块的 xxx_INIT, xxx_LOAD功能块都是设置通讯端口的。

就是由程序来改变设置用的。

条件就是当前通讯完成后,空一个周期。调用这个初始化功能块,改变端口设置。做下一步的通讯(速率、协议的改变。)

总线形式下,挂在总线上的所有端口,都是侦听状态。当检测到是给自己的正确报文,就接收,然后应答。

如果速率不正确,不会接收,也不会应答的。

从站如此,主站也如此。


学而时习之,不亦说乎?温故而知新,不亦乐乎?
芳季
至圣

经验值: 66560
发帖数: 14740
精华帖: 100
6楼    2021-01-14 21:17:30
主题:回复:很多人问过这个问题:一个口切换几种波特率做modbus通讯或者切换其他什么的

换波特率呢就是玩玩而已,说真的,有条件的最好是试试切换协议。例如USS /MODBUS。例如两种自游口协议。例如同时连屏和变频器。例如……。这些需求都是听过的。

yming
至圣

经验值: 126782
发帖数: 21986
精华帖: 823
7楼    2021-01-15 09:23:24
主题:回复:很多人问过这个问题:一个口切换几种波特率做modbus通讯或者切换其他什么的

换协议也是可以的。就是要看看协议。不是停止一个周期,而是总线“安静”一段时间。


学而时习之,不亦说乎?温故而知新,不亦乐乎?
yanxiao
至圣

经验值: 26125
发帖数: 11967
精华帖: 43
8楼    2021-01-19 23:29:46
主题:回复:很多人问过这个问题:一个口切换几种波特率做modbus通讯或者切换其他什么的

两种协议,或者两种波特率,是否能够“可靠”地被其它站点识别,就是靠校验手段。

最基础的校验手段,是单字节的帧校验,区分为停止位错误校验、奇偶校验,虽然简单,也有一定的可靠性。一个数据帧有若干字节组成,波特率不正确的话,不太可能不出现停止位错误和奇偶校验错误。只要检出错误,从站就不会应答,不会干扰正确站点的通讯。

进一的校验是数据完整性的校验,和LRC、CRC等算法,CRC的算法要比LRC可靠,运算量也大。

配合上述两种方式均起作用,误应答的可能性几乎为0。


但,我不建议使用库来做这些事,那个效率可能不好掌控。

玩这种不常规的,就写针对性的通讯程序,可能是比较好的选择。


事情看两面。

有些通讯协议,有单字节的命令或响应,这就不好办了。出错概率大大增加,没有可玩性了。


芳季
至圣

经验值: 66560
发帖数: 14740
精华帖: 100
12楼    2021-01-21 11:59:35
主题:回复:很多人问过这个问题:一个口切换几种波特率做modbus通讯或者切换其他什么的

这个试验,可以归可以,用是另外一回事。就好像后驱的可以漂移,但是马路上哪里见过有车这么转弯的?(至少我没有见过)

最好是想方设法用不上这个方法最好。只是在生死关头手上还有一招,无往而不胜。

因为到底人家制作了这样的一个程序可以这样做。那么我也只是顺水推舟做出来玩玩而已。

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