CPU为416,用CP443通讯模块同PC机走TCP通讯:
问题1.通讯虽然建立成功,但是AG_LSEND指令的输出ERROR一直为1,Status状态值为7000H,并且获取不到Done的信号(需要获得),PC机能够收到PLC发出的数据(帮助文档显示只会发生在400系列);
AG_LRECV指令状态值Status一直在8180H和8181H之间变化,PC机发数据给PLC必须要发送两次或者多次,PLC接收区才能得到PC机发送的数据;
问题2.AG_LSEND指令和AG_LRECV指令在程序的多处调用(引脚ID和LADDR不变),但是发送使能ACT是不同的信号,这样是否会影响数据的发送与接收?
问题3.AG_LSEND和AG_LRECV指令需要在程序的多处调用,如何能做到每个都能发送成功,而不会遗漏?如果在前一个数据正在发送的过程中,再次触发ACT,此时是否就会漏发?
虽然能够发送接收数据,但是不能得到Done信号,ERROR为1,请大神帮忙解决一下,谢谢!
图片说明:
最佳答案
你收发的数据,长度固定吗?
《怎样使用通讯功能块 FC50 和 FC60 编程?》
https://support.industry.siemens.com/cs/document/18513371/怎样使用通讯功能块-fc50-和-fc60-编程??dti=0&lc=zh-CN
《当在 STEP 7的 CPU 中用户程序里调用 FC5/50 和 FC6/60 通讯块时需要记住的要点有哪些?》
https://support.industry.siemens.com/cs/document/26708188/当在-step-7的-cpu-中用户程序里调用-fc5-50-和-fc6-60-通讯块时需要记住的要?dti=0&lc=zh-CN
《当调用通信功能块 FC5/50 "AG_SEND/AG_LSEND" 和 FC6/60 "AG_RCV/AG_LRCV" 传送 "REAL" 类型的变量时应该注意些什么?》
https://support.industry.siemens.com/cs/document/15262983/当调用通信功能块-fc5-50-ag_send-ag_lsend-和-fc6-60-ag_rcv-ag_lrcv-传送-real-类型的变量时应该?dti=0&lc=zh-CN
配置注释:
为了通过S7-300 和 S7-400 CP 卡的“发送/接收”接口进行通讯时,需要在 STEP 7的 CPU 中用户程序里调用如下的通讯块。
在 S7-300 CPU 中 FC5/6 “AG_SEND/AG_RECV”用于最大至8192字节的数据传输,而在 S7-400 CPU 中用于最大240字节的数据传输。
在 S7-400 CPU 中 FC50/60 “AG_LSEND/AG_LRECV”用于最大至8192字节的数据传输,而在 S7-300 CPU 中不能使用。
上述通讯块在 SIMATIC_NET_CP 库中可以找到。
调用这些功能块时需要注意如下要点:
在 S7-300 和 S7 400 CPU 中,通信块 FC5/50 “AG_SEND/AG_LSEND”由输入参数 ACT “高”脉冲触发。然后块开始执行,此时 ACT 端必须为“低”电平,直到异步通信任务完成后置位输出参数 DONE 或者 ERROR 为止。
在 S7-400 中,通信块 FC50 “AG_LSEND”的输出参数 ERROR=1 和 STATUS=0x7000 时表示在 ACT=0 时通信功能已调用。这种情况下通信块 FC50 “AG_LSEND”再次调用时无需在输入参数 ACT 用一个“高”电平来触发一个新的发送任务。
更多关于 STATUS=0x7000 的信息参见条目号: 17877734。
只要没有建立连接或连接终端,就会导致块的输出参数状态为 ERROR=1 和 STATUS=0x8183 或者 0x8304。大约在延迟1秒钟后块才能再次被调用。
输出参数 ERROR=True 和 STATUS=0x80C3 “CPU资源(内存)被临时占用”是指 S7 CPU 的资源被临时占用了。这些资源取决于所用 CPU。在 STEP7 项目中可以通过 CPU 属性对话框中“Communication”标签下检查最大连接数和预留的连接资源数。
在工业以太网 CP 设备手册中,第二章“Requirements for Use”既是关于那个 CPU 支持相关工业以太网 CP 的信息。
注:
下述条目是调用通信功能块的例子程序。
在 S7-300中使用 FC5/6 “AG_SEND/AG_RECV”条目号: 17853532
在 S7-400中使用 FC5/60 “AG_SEND/AG_RECV”条目号: 18513371
提问者对于答案的评价:
那我程序多处调用这个发送块,怎么获取到Done的信号啊,目前程序能发送成功报文,但是从未得到Done的信号。。。。,不清楚是不是因为在不同的地方调用了这个块,Done置位了,随后又在下个调用的地方又重新启动了发送任务,所以在监控的地方没有得到Done的信号?
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc291043.html