现在市场常见的IO模块自由组合时协议是怎么确定的呢?
现在大部分远程IO厂家模块都可以自由组合,有的是自定义协议,有的是modbus。他们可以自由组合。比如依次挨着串联在一起,其中有5~8根线分别是供电和485之类。。
比较好奇的一个点是拼在一起后模块同时上电,它们能自动识别在它左边有几个模块,并一次排序,比如8个模块,ID自动就是1~8
有朋友知道他们的实现逻辑吗?在没有主机的情况, 象 ws2812一样,有个串联的信号线 用1根线作为地址编码依次级联下去 本帖最后由 qtechzdh 于 2024-3-28 11:31 编辑
你用一个支持菊花链的并串转换的IC,试一下 关注一下,我也想了解 可以参考Interbus这种总线,422的物理层接口。
主机发送一个数据帧,第一个从机收到数据帧后在里面填充自己的内容,然后传递给下一个模块,下一个模块加入自己的数据内容后再往后传递。
如果是环形,最后一个模块收到数据后反馈给主机,主机通过一个整体的数据帧即可获取整个总线的数据内容。如果最后一个模块没有下一级,则数据反馈给上一级模块,最终回到主控。
qtechzdh 发表于 2024-3-28 20:45
可以参考Interbus这种总线,422的物理层接口。
主机发送一个数据帧,第一个从机收到数据帧后在里面填充自己 ...
(引用自6楼)
请问怎么区分“第一个”和“下一个”?物理上的并不代表软件上的。 本帖最后由 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号转回主机,通信完毕
qtechzdh 发表于 2024-3-29 09:04
首先物理层是手来手通信,也就是说,每个从机 有2个端口(就用interbus的422吧)一个和上一级通信,另一 ...
(引用自8楼)
这个通信,是否定期来扫描?还是开机扫描一下?否则中途加入设备就不知道了 modbus 发表于 2024-3-28 10:37
用1根线作为地址编码依次级联下去
(引用自3楼)
1根线是怎么编码呢?能否详细说一下? bad_fpga 发表于 2024-4-17 21:21
1根线是怎么编码呢?能否详细说一下?
(引用自10楼)
可以传送一个固定周期的PWM信号,通过脉冲宽度来编码,比如脉冲宽度在0.5ms-1.5ms之间表示地址1,1.5ms-2.5ms之间表示地址2 bad_fpga 发表于 2024-4-17 21:20
这个通信,是否定期来扫描?还是开机扫描一下?否则中途加入设备就不知道了 ...
(引用自9楼)
协议会规定的
页:
[1]