还在用 modbus 协议?You out 了

[复制链接]
 楼主| wh6ic 发表于 2019-6-21 12:46 | 显示全部楼层 |阅读模式
以前老看到谁、谁、谁的产品使用了 modbus 协议,感觉真是 “高大上”。  只是俺老土,一直是用私有协议,用起来还行,就一直没有玩这个协议。
今天碰到个用 modbus 的出问题的,仔细看协议,WTF,这是什么鬼! 包前面多了几个乱码,居然就找不到命令、回复了。这种四五十年前的土鳖协议,该扔了。

评论

[url=home.php?mod=space&uid=1167]@xch[/url] : 去本贴 41 楼去看看,也许能 挣到点 小钱钱哟  发表于 2019-6-23 13:52
[url=home.php?mod=space&uid=1167]@xch[/url] :正解  发表于 2019-6-21 21:06
xch
[url=home.php?mod=space&uid=505293]@wh6ic[/url] :不知道猪界有这定律,几十年过去猪就能超越人类?5千年过去也没见一只啊!  发表于 2019-6-21 20:31
xch
[url=home.php?mod=space&uid=505293]@wh6ic[/url] :当然不敢骂人,骂猪的胆子还是有点。  发表于 2019-6-21 18:43
[url=home.php?mod=space&uid=1167]@xch[/url] :个半吊子,还敢出来乱骂人  发表于 2019-6-21 18:09
[url=home.php?mod=space&uid=1167]@xch[/url] :几十年前的老东西。 有问题,怎么就不能提?你爹的东西吗?  发表于 2019-6-21 18:08
xch
[url=home.php?mod=space&uid=505293]@wh6ic[/url] :猪才到处喷,连modbus都喷。知道你几斤几两?猪肉涨价了就不知天高地厚了?  发表于 2019-6-21 18:06
[url=home.php?mod=space&uid=1167]@xch[/url] :我惹到你了?你说猪是个什么意思 !!不会说人话,就不要到处喷  发表于 2019-6-21 15:55
[url=home.php?mod=space&uid=1167]@xch[/url] :你说猪是什么意思?!!!  发表于 2019-6-21 13:33
xch
它的协议栈小。一般猪都无法设计出这种几百字节就能搞定的协议栈。  发表于 2019-6-21 13:16
叶春勇 发表于 2019-6-21 12:47 | 显示全部楼层
的确很少用了,现在基本以太网了。

评论

@zyj9490 :modbus是高级协议。可以用串口,也可以用以太网。我串口modbus代码都扔到github开源了。不折腾了。  发表于 2019-6-21 12:54
成本啊,最简便,最灵活,最通用的协议。私有协议不利于大规模组网,还要加通信管理机(协议中转),定制化的设备代价很不便宜。  发表于 2019-6-21 12:52
zyj9490 发表于 2019-6-21 12:55 | 显示全部楼层
叶春勇 发表于 2019-6-21 12:47
的确很少用了,现在基本以太网了。

工控,低层设备应用得很多。
zyj9490 发表于 2019-6-21 12:57 | 显示全部楼层
叶春勇 发表于 2019-6-21 12:47
的确很少用了,现在基本以太网了。

MODBUS-RTU,MODBUS-TCP,适用于不同的网络,资源不够的MCU串口的RTU比较实用。
叶春勇 发表于 2019-6-21 13:01 | 显示全部楼层
zyj9490 发表于 2019-6-21 12:55
工控,低层设备应用得很多。

参考北京和利时,美国foxboro的dcs系统。
模块与模块之间的通讯协议是用profibus。但是stm32的崛起,can总线还是不错的。
分模块与服务器的通讯还是以太网。

485组网,多挂几个从站,各种问题。
zyj9490 发表于 2019-6-21 13:05 | 显示全部楼层
叶春勇 发表于 2019-6-21 13:01
参考北京和利时,美国foxboro的dcs系统。
模块与模块之间的通讯协议是用profibus。但是stm32的崛起,can ...

现在那一种现埸总线还没有一统天下的能力,各有各的优点和不足点。
叶春勇 发表于 2019-6-21 13:10 | 显示全部楼层
我搞电子初期,就是搞定了modbus和三菱plc的通讯协议。这是我熟悉的东西。后来stm32f407+以太网,在也不想用串口。
zyj9490 发表于 2019-6-21 13:21 | 显示全部楼层
61850体糸中,各部件都是用以太网来联网,在应用层上跑61850协议。在电力行业,此协义太超前,目前难推(新站,先进的变电站,发电厂)。对于改造型的项目难以推。
叶春勇 发表于 2019-6-21 13:30 | 显示全部楼层
zyj9490 发表于 2019-6-21 13:21
61850体糸中,各部件都是用以太网来联网,在应用层上跑61850协议。在电力行业,此协义太超前,目前难推(新 ...

的确,工业协议进步很缓慢。
2002年我在一家电厂,看着上万个io,dcs系统。
一套系统数百万元,几个工程师日夜不停的组态。当时的高科技。现在不值钱了。
比如以太网,stm32f407,一套系统不过百元。
以前串口+以太网。
现在全以太网不成问题。
叶春勇 发表于 2019-6-21 13:45 | 显示全部楼层
楼主私有协议什么样的?能不能借鉴下。看看效率如何?

评论

@R2D2 :谢谢指点,我软件比硬件强,以后多交流。  发表于 2019-6-21 18:39
最近十多年自己能定软硬件协议的场合都改成CAN了,物理层就比485好太多。用MODBUS都是大型工业控制网络里面,你总要跟别人接口吧,MODBUS协议就是事实上的工业标准,这个很难改的,就算物理层在向TCPIP迁移,协议层还要MODBUS。  发表于 2019-6-21 18:34
 楼主| wh6ic 发表于 2019-6-21 13:56 | 显示全部楼层
叶春勇 发表于 2019-6-21 13:45
楼主私有协议什么样的?能不能借鉴下。看看效率如何?

至少要加个比较有特征的识别用包头吧。比如0x5A;或者 0x55,0xAA 之类的包头
  按这个modbus,收到什么垃圾都要进入解包程序,稍微不小心,程序不够健壮,收到乱码,就玩不下去多杯具。

评论

[url=home.php?mod=space&uid=32418]@R2D2[/url] :原来是个二百五,你自己楼底 16:54 提起的485,十分钟转个眼就忘了。原来你还是个健忘货,果然是个残次品,那对老**蛮值得同情  发表于 2019-6-21 17:17
**,我说的是MODBUS,你说485干什么?转移话题只能说明你的智力低下。赶紧回家找你母亲喝奶去吧。  发表于 2019-6-21 17:05
[url=home.php?mod=space&uid=32418]@R2D2[/url] :你个半吊子,你奸父**制造出来的一只会满嘴喷 米田共 的次品,跑这来学人说话,快回炉去吧。485地线出问题或者电路设计问题监听时很容易识别出一堆乱码,总线空闲个屁。  发表于 2019-6-21 17:02
半瓶子醋,你裤裆里面没有小钢**就敢满大街乱跑???MODBUS在485上面有两种模式,RTU适合实时性非常强的设备,以3.5个字节周期的总线空闲作为新一帧包头的标志。ASCII模式就是你说的有特征的包头包尾,:是包头,CRLF是包尾,中间只能由0~9,A~F十六种字符。  发表于 2019-6-21 16:54
叶春勇 发表于 2019-6-21 14:03 | 显示全部楼层
wh6ic 发表于 2019-6-21 13:56
至少要加个比较有特征的识别用包头吧。比如0x5A;或者 0x55,0xAA 之类的包头
  按这个modbus,收到什么 ...

0x55,0xaa开头,那你的协议只能用ascii通讯了,比如整数0xffff,只能发'f''f''f'f'ascii码了。
modbus有crc校验,乱码没事的。
modbus有freemodbus库,这些老东西移植一下就能用,不用看协议。

评论

@wh6ic :后面的0xaa 0x55怎么办。  发表于 2019-6-21 18:40
@叶春勇 :0x11 不是包头,直接扔了  发表于 2019-6-21 18:14
@wh6ic :假设出现半包0x11。。。。0xaa 0x55.。。。。  发表于 2019-6-21 18:10
@叶春勇 :如果有特征包头字(节),合法的包处理完就全部丢弃了,根本就不会去识别包内可能有的特征字。  发表于 2019-6-21 16:51
@叶春勇 :如果通讯包出现0x55,0xaa量怎么办?  发表于 2019-6-21 16:27
@wh6ic :modbus-rtu,用的是t3.5间隔,乱码帧过不了crc。 你用0xaa,0x55,汽车lin总线就有,不要晶振的串口。  发表于 2019-6-21 16:23
十六进制码而已,关 ascii 什么事? 另外,CRC校验码在最后面,收到乱码也要老老实实 完整 读取整个包,无法提前丢弃,也无法在处理后丢弃整包数据,只能一个字节一个字节丢弃,无谓增加协议的处理量  发表于 2019-6-21 14:23
hobbye501 发表于 2019-6-21 15:43 | 显示全部楼层
我们都用的MODBUS-RTU
zyj9490 发表于 2019-6-21 16:27 | 显示全部楼层
本帖最后由 zyj9490 于 2019-6-21 18:24 编辑
wh6ic 发表于 2019-6-21 13:56
至少要加个比较有特征的识别用包头吧。比如0x5A;或者 0x55,0xAA 之类的包头
  按这个modbus,收到什么 ...

在中断里处理放一个状态字,第一状态,目标主机是否一致,不是,复回,第二步功能码,是否本从机兼容的功能码,第三步,正常接收的状态码,这样可以加快坏包处理。如果不论好坏,做全包处理,会大大加重MCU的负担。

评论

这种类似三菱plc的通讯协议。  发表于 2019-6-21 18:19
oufuqiang 发表于 2019-6-21 16:40 | 显示全部楼层
其实不是协议的问题,是写程序的人的问题。很少有人把接口写的健壮的。讲得简单点,一堆乱码里面插一帧正常数据帧,能正常响应的太少了。
zuoanhuafeng 发表于 2019-6-21 16:43 | 显示全部楼层
叶春勇 发表于 2019-6-21 13:10
我搞电子初期,就是搞定了modbus和三菱plc的通讯协议。这是我熟悉的东西。后来stm32f407+以太网,在也不想 ...

请问,以太网与modbus相比,有哪些优势?
zuoanhuafeng 发表于 2019-6-21 16:43 | 显示全部楼层
叶春勇 发表于 2019-6-21 13:10
我搞电子初期,就是搞定了modbus和三菱plc的通讯协议。这是我熟悉的东西。后来stm32f407+以太网,在也不想 ...

请问,以太网与modbus相比,有哪些优势?
xyz549040622 发表于 2019-6-21 16:56 | 显示全部楼层
zuoanhuafeng 发表于 2019-6-21 16:43
请问,以太网与modbus相比,有哪些优势?

应用场合不同,仅此而已,没可比性。
xyz549040622 发表于 2019-6-21 16:57 | 显示全部楼层
工控上基本好多modbus的天下,毕竟串口两根线,多方便,成本也低,兼容性也好。

评论

目前这个应用挺多的  发表于 2019-6-24 08:58
R2D2 发表于 2019-6-21 16:58 | 显示全部楼层
zuoanhuafeng 发表于 2019-6-21 16:43
请问,以太网与modbus相比,有哪些优势?

MODBUS/TCP就是在以太网上面跑的MODBUS协议,你这问题属于文盲水平。

评论

直男啊  发表于 2019-6-21 18:17
您需要登录后才可以回帖 登录 | 注册

本版积分规则

95

主题

3943

帖子

42

粉丝
快速回复 在线客服 返回列表 返回顶部