摆渡人小白
问题背景:两台1200PLC,TCP连接,PLC1写了两条Tsend_C指令向PLC2发送数据块F1和F2,然后PLC2接收的数据块R1和R2。
问题描述:正常情况下,R1接收F1,R2接收F2。但是写好程序下载到PLC之后,R1接收的是F2,R2接收的是F1。然后将PLC2停止重启,能够正常接收。(仿真中进行的)
具体看图
楼主最近还看过
攻城狮苏工
TCP连接可能存在不稳定或网络延迟,导致数据包传输的顺序错误。
郭远林
用TCP调试一下看看。是否发送 接收 等等
请叫我王老湿
通信触发最好是上一个完成去触发下一个开始,脉冲延时触发很多时候不太靠谱
havegood
提供一种不用编程,实现PLC之间通讯的方案:
相关案例:https://www.aihe-tech.com/nd.jsp?id=14#_jcp=1
"请叫我王老湿" 的回复,发表在3楼 对内容: 【通信触发最好是上一个完成去触发下一个开始,脉冲延时触发很多时候不太靠谱...】进行回复:
-----------------------------------------------------------------
老师您好,我这边试了将第一条的发送和接收指令的完成位用作第二条的触发,情况依旧——第一次下载到PLC运行结果交叉接收数据,将PLC2停止重启恢复正常。
关育谋
发送时第一条DONE完成后再去执行第二条。
"关育谋" 的回复,发表在7楼 对内容: 【发送时第一条DONE完成后再去执行第二条。】进行回复:
按顺序轮询解决了初次下载后运行时数据交叉接收的问题,但是停机重启接收端的PLC,主站不停机,数据交叉,再停止重启,又交叉接收回来,就这样反反复复。感觉还是程序有问题,还有就是两台PLC之间没有写多条Tsend_C的必要了,解决不了,以后就只写一组,收发都写在一个DB块里。
引用 "摆渡人小白" 的回复,发表在8楼 内容: "关育谋" 的回复,发表在7楼 对内容: 【发送时第一条DONE完成后再去执行第二条。】进行回复: ------------------------------------...
JSdanzi
发送时第一条DONE完成后再去执行第二条,利用上升沿触发
AC米兰
进来学习下,看看如何解决
莫言*莫言
确保PLC1中的Tsend_C指令和PLC2中的接收指令的执行顺序是同步的。如果PLC2的接收指令先于发送指令执行,那么它可能会接收到错误的数据块。
僻处自说
程序逻辑错误:
检查PLC1中Tsend_C指令的发送顺序是否正确无误。确认F1确实是在F2之前被发送。
同时,检查PLC2端接收指令(可能是TRCV_C或其他类似的接收指令)的逻辑是否正确配置。
浮游云中
可能是通信初始化问题,如果通信的初始化顺序或者方式有误,可能导致数据错乱。例如,如果PLC2的通信初始化早于PLC1,或者在PLC1发送数据前已经完成了接收准备,这可能会导致接收错误的数据块。
向前
有时候程序下载到PLC后,PLC的内存和内部状态可能会保留一些之前的值,这可能会影响程序的初始运行状态。通常重启PLC可以清除这些状态,使得程序从确定的初始状态开始运行。
心在跳
这种情况可能是由于程序中的Tsend_C指令的执行顺序或者接收指令的设置不正确导致的。当两台PLC通过TCP连接进行通信时,发送和接收数据的顺序应该是一致的。如果发送和接收的顺序不匹配,就会出现您所描述的情况。
冰山流水
确认Tsend_C指令的执行顺序是否正确。在PLC1中,确保先执行发送F1的指令,然后再执行发送F2的指令。在PLC2中,确保先执行接收R1的指令,然后再执行接收R2的指令。
solk_yt
接收指令的设置是否正确。在PLC2中,确保R1和R2的接收缓冲区大小与发送的数据块F1和F2的大小相匹配。
此外,还需要确保接收指令的触发条件和完成事件设置正确,以确保在正确的时间接收数据。
闪啊闪
看看是否有其他指令或逻辑影响了Tsend_C指令的执行顺序或接收指令的设置。
负债赌博
数据冲突吧,如果两台PLC同时写入相同的数据块,可能会导致数据冲突。您可以考虑使用锁定机制,确保在任何时候只有一个PLC写入数据块。