楼主最近还看过
1、2一起回答:
发送通过置位发送标志进行,发送完成后发送标志会自动复位,因此,不会出现数据撞车。当然,虽然手册上写着,不要同时驱动针对同一个串口的多条指令,你应要杠同时驱动也没有办法,大不了PLC停机吧。
3、既然不存在数据撞车,那还要避免什么呢?要避免对方接受到不完整的指令(用户在没有发送完成后就复位了发送指令),那么请好好使用系统提供的标志位。
广播指令就是喊话,直接向ModbusRTU网络中所有从站发送数据,不在于从站是否收到,既然都不在乎了,还管其他的干什么。
4、同时收发是指发送和接收是同时,而不是说可以同时接受或者发送给2个人。
HAVE FUN!
在串口通讯中,通常使用完成信号来复位发送的寄存器,并在收到完成信号后持续一个扫描周期。这样可以确保发送的数据被正确地传输和接收,并且通讯过程能够有序地进行。
如果在发送数据后尚未收到回复之前又触发了另一条发送指令,这可能会导致数据冲突或“撞车”,从而影响通讯的可靠性和数据的完整性。为了避免这种情况,通常需要采取一些措施,例如使用忙标志位、互斥锁或队列等机制来确保在发送和接收过程中的数据一致性和正确性。
在FX5U等可编程逻辑控制器(PLC)中,Modbus-RTU通讯协议通常用于串口通讯。其中,“广播指令”和“广播延迟”是用于控制广播通讯的两个参数。广播指令是指PLC发送的广播信息,用于通知所有连接的设备进行某些操作,例如读取或写入数据。而广播延迟是指PLC发送广播指令后等待设备响应的时间间隔。如果将广播延迟设置得较高,PLC将等待更长的时间来接收设备的响应,这有助于减少数据冲突或“撞车”的可能性。但是,具体现象还取决于设备的实际响应时间和通讯环境等因素。
在使用422(全双工)通讯协议时,理论上是可以同时收发的,但是是否能够实现同时给两个设备发送不同的数据则取决于具体的通讯协议和设备配置。如果使用无顺序通讯协议,那么理论上应该可以同时向多个设备发送数据,但是这需要确保设备的接收能力、处理速度以及通讯协议的配置能够支持这种操作。为了避免数据冲突或“撞车”,通常需要在发送和接收过程中采取相应的控制和同步措施。
"yuanle" 的回复,发表在1楼
对内容: 【1、2一起回答:发送通过置位发送标志进行,发送完成后发送标志会自动复位,因此,不会出现数据撞车。当然,虽然手册上写着,不要同时驱动针对同一个串口的多条指令,你应要杠同时驱动也没有办法,大不了PLC停机...】进行回复:
-----------------------------------------------------------------
好的,感谢指点迷津!那是不是说FX5U会自动进行内部轮询,标志位是没有特殊寄存器,PLC内部进行置位复位对吗?我之前用的台达ES2不行的。
第一个问题,不是,串口通信的主站的通信延时时间到就会跳到下一个去访问,发送一条指令,正常收到回复且回复的内容和校验位均正常直接进行下一设备的访问,如果没有收到,则会继续发送第二遍指令,接着就是第三遍指令,如果三遍都没有收到回复则判定这个设备离线,错误标志位置位,直接进行下一个设备访问。这地方有个通讯超时时间,就是在规定时间内从站没有回复的话,主站将会报错,并跳过该设备。正常通讯都是这样的机制,当然你也可以写成这设备不回复我就死等,后面的其他设备我也不管。
第二个问题,如果你写过通讯的话,你就会明白,一般接收都是用的中断服务,发送完指令后,打开接收中断,此时如果有回复则执行中断服务程序,解析数据,验证校验位等一系列操作,回复的内容和校验正确则视为有效数据,参与后面的逻辑,如果不正确则清空缓存,舍弃数据,并报错。在执行中断程序时是不发送的。如果没有收到任何内容,超时时间到以后接受中断关闭,准备第二次发送,第二次指令发出后接受中断再次开启。所以在第二条访问指令发送时接收中断没打开设备即便是回复了正确的内容也没有服务接收,更没有撞车这一说。当然也有不少卧龙写的不用中断接收,那样的话通讯就成了概率问题了,因为只有在数据不撞车的那一个周期通讯是成功的,其他都是失败,这种巧合在CPU高速的扫描下勉强能用,正常的串口通讯TX和RX的灯是交替闪烁的,这种卧龙程序就是这俩灯各闪各的,直到某一瞬间交替一下就通讯上了。
第三个问题,广播指令就是在总线上呼叫所有设备,广播延时就是等待回复的时间,你用过总线仪表吗,一般会给你配一个调试软件,那个软件可以搜索他们家仪表的地址,此时用的就是广播指令,一般地址为00就是广播,他会从1-255去搜索总线设备,每个设备都会扫一遍,扫到以后会在软件上显示该设备的地址,典型的西门子老200PLC在使用PPI线缆编程是就会搜索设备,这个过程就是广播,你会看到他的地址在不断的变化,广播延时就是第一个设备和第二个设备之间的延时,延时调高以后这个地址变化就慢了而已。也就是说原先从1-255用了10秒就扫完了,你提高广播延时以后就需要20秒才能扫完,这个延时一般默认就行,除非碰见响应速度慢的设备你需要调一下,比如虚拟串口的无线设备对这个时间需求较大。
第四个问题,同步通讯是指同时收发,也就是约定好12点整我发送,你也12点整准时接受,这种一般都有一个同步源,比如这个12点的时钟,大家都得认。也就是乐队的指挥一样,手势一高咱就吹拉弹唱高音,手势一低就都低音,自然就成曲了。要没有这个同步源,各种乐器要搞起来好像很难成曲。422可以给10个设备同时发送,但总线上连接的设备只有其中一个会回复,这一点和485是一样的,比如总线上连接了10个设备,我发送了一条指令给1号设备,其他设备都可以收到这条指令,但只有1号设备会回复我,其他设备收到指令以后就跟没收到一样,你发指令必须要明确发给谁,谁才会回复你,其他设备也会收到这条指令,但人家不回复你,因为这条指令不是发给他的。