lyping1987 发表于 2024-3-27 23:14:06

现在市场常见的IO模块自由组合时协议是怎么确定的呢?

现在大部分远程IO厂家模块都可以自由组合,有的是自定义协议,有的是modbus。他们可以自由组合。

比如依次挨着串联在一起,其中有5~8根线分别是供电和485之类。。

比较好奇的一个点是拼在一起后模块同时上电,它们能自动识别在它左边有几个模块,并一次排序,比如8个模块,ID自动就是1~8

有朋友知道他们的实现逻辑吗?在没有主机的情况,

wxws 发表于 2024-3-28 08:46:54

象 ws2812一样,有个串联的信号线

modbus 发表于 2024-3-28 10:37:58

用1根线作为地址编码依次级联下去

qtechzdh 发表于 2024-3-28 11:28:17

本帖最后由 qtechzdh 于 2024-3-28 11:31 编辑

你用一个支持菊花链的并串转换的IC,试一下

bad_fpga 发表于 2024-3-28 20:09:19

关注一下,我也想了解

qtechzdh 发表于 2024-3-28 20:45:12

可以参考Interbus这种总线,422的物理层接口。
主机发送一个数据帧,第一个从机收到数据帧后在里面填充自己的内容,然后传递给下一个模块,下一个模块加入自己的数据内容后再往后传递。
如果是环形,最后一个模块收到数据后反馈给主机,主机通过一个整体的数据帧即可获取整个总线的数据内容。如果最后一个模块没有下一级,则数据反馈给上一级模块,最终回到主控。

kttest 发表于 2024-3-29 08:25:03

qtechzdh 发表于 2024-3-28 20:45
可以参考Interbus这种总线,422的物理层接口。
主机发送一个数据帧,第一个从机收到数据帧后在里面填充自己 ...
(引用自6楼)

请问怎么区分“第一个”和“下一个”?物理上的并不代表软件上的。

qtechzdh 发表于 2024-3-29 09:04:23

本帖最后由 qtechzdh 于 2024-3-29 09:10 编辑

kttest 发表于 2024-3-29 08:25
请问怎么区分“第一个”和“下一个”?物理上的并不代表软件上的。
(引用自7楼)

首先物理层是手来手通信,也就是说,每个从机 有2个端口(就用interbus的422吧)一个和上一级通信,另一个端口和下一级通信。
当主机发送数据帧,假设AA01,AA代表扫描硬件指令,01代表数据长度。
第一个从机收到指令,得到AA01数据包,然后在数据包里面增加自己的ID,指令变成了AA 22 02 ,意思是扫描指令,22是第一个设备的类型,02是当前数据长度,把这个数据包发送给下一级节点。
下一级节点收到指令AA 22 02,在数据包里面增加自己的识别ID,指令变成了 AA 22 08 03 ,其中08是设备2号的ID。
如果是环形的结构,2号直接将数据发送到主机,主机获取到指令,就能知道。第一个物理设备的ID是22 ,第二个物理设备的ID是02。
如果是单线结构,2号将数据在发送给1,号 1号转回主机,通信完毕

bad_fpga 发表于 2024-4-17 21:20:56

qtechzdh 发表于 2024-3-29 09:04
首先物理层是手来手通信,也就是说,每个从机 有2个端口(就用interbus的422吧)一个和上一级通信,另一 ...
(引用自8楼)

这个通信,是否定期来扫描?还是开机扫描一下?否则中途加入设备就不知道了

bad_fpga 发表于 2024-4-17 21:21:27

modbus 发表于 2024-3-28 10:37
用1根线作为地址编码依次级联下去
(引用自3楼)

1根线是怎么编码呢?能否详细说一下?

modbus 发表于 2024-4-17 22:14:26

bad_fpga 发表于 2024-4-17 21:21
1根线是怎么编码呢?能否详细说一下?
(引用自10楼)

可以传送一个固定周期的PWM信号,通过脉冲宽度来编码,比如脉冲宽度在0.5ms-1.5ms之间表示地址1,1.5ms-2.5ms之间表示地址2

qtechzdh 发表于 2024-4-17 22:44:30

bad_fpga 发表于 2024-4-17 21:20
这个通信,是否定期来扫描?还是开机扫描一下?否则中途加入设备就不知道了 ...
(引用自9楼)

协议会规定的
页: [1]
查看完整版本: 现在市场常见的IO模块自由组合时协议是怎么确定的呢?