目的:主要是想分享一下,在做TCP/IP或者UDP时,各个参数设置到底是个嘛意思,毕竟曾经设置的时候,名称我是知道了,但是具体的意思不清晰。想到哪儿,写到哪儿哈。截图时间不准,因为测试有调整或验证过程,还有补充过程时重新截图了哈
软件参数:TIA V19+PLCSIM Advanced V6.0+NetWork Assistant V5.0.14
IP设置:
PLC S7-1500:192.168.0.1
PLCSIM Advanced:192.168.0.155
(使用数据块方式来配置通信参数,方便理解各项参数)
关键名词解释
TSEND_C中的CONT和REQ管脚
CONT:控制连接的建立
REQ:上升沿激活一次发送作业
ActiveEstablished:主动连接还是被动建立连接
ID:建立的通信链路ID
1,PLC是客户端还是服务端,决定参数ActiveEstablished
ActiveEstablished=1时,模式为主动连接(PLC作为客户端),ActiveEstablished=0,模式为被动连接(PLC作为服务端)
当ActiveEstablished=1,服务端通信未准备好,CONT=1时
。
此时状态:7002,未建立连接
当ActiveEstablished=1,服务端通信准备好,CONT=1时

此时状态是7004,准备就绪
如果此时COM_RST=1,会发生什么

有个连接断开又建立了~
发送作业成功模拟出来了,看一下正确的设置:

当ActiveEstablished=0,服务端通信未准备好,CONT=1时

状态7002,待连接
当ActiveEstablished=0,服务端通信准备好,CONT=1时

状态7004,准备就绪~
2,发送函数中LEN管脚与DATA区域的数据长度关系
观察一下发送作业,发送16个字符,但是管脚LEN=0,如果LEN=10呢?

那还有6个字节呢,没发完,我再发送一次,看看剩下的会不会发送过来

依然只有10个字节,如果数据长度改为LEN=20呢?

嘿嘿,它没有发送作业~
帮助文件中写明,当在数据缓冲区的数据块是优化块时,LEN管脚值必须设为0,难道非优化块有不同?

改为非优化块这个结果是一样的,所以帮助文件上写的,有点不明白为什么这么写(此处未大佬科普一下!!)
总结一下发送函数中LEN和发送数据缓冲区长度的关系
LEN=0时,发送数据的长度由发送数据缓冲区长度决定
LEN>0但不超过数据发送缓冲区长度时,发送数据的长度由LEN的值决定
LEN大于数据发送缓冲区长度时,无法执行发送作业,且未报错!!
3,接收函数中LEN管脚与数据接收区长度的关系
通过上面的例子,具象化一下在发送函数中,LEN管脚与数据长度的之间的关系。再来看看接收函数又是什么情况
建立一下连接,
(发送函数中是ActiveEstablished=1,接收函数的ActiveEstablished要是1,另外两个函数中的ID,应该要保持一致)

执行作业,查看结果

PLC成功接收我发送的完整的16个字符。此时,LEN=0。
如果我设置LEN=10时,发送16个重复字节B,结果是啥?

如果我保持LEN=10时,发送10个重复字节C,结果是啥?

如果我保持LEN=10时,发送5个重复字节D,结果是啥?

此时,我并未收到5个字符D~~
如果我保持LEN=10时,再次发送8个重复字节E,结果是啥?

嗯,收到了5个D(刚才没收到的D)和5个E(这次发送的8个E),还有3个E去哪儿了?
以示区别,再发送8个F,看看什么情况?

依然只有收10个字节,上次未接收的3个E和这次8个F中的7个。
如果我保持LEN=20时,重复一遍上面的操作。

会直接报错哦!
保持LEN=0,重复上面的操作:

发送10个C和5D后,我依然没有收到发送的数据
继续重复,发送8个E

嗯,我收到发送的10个C,5个D,还有一个E
嗯,再发送8个F和8个G

收到了,上次发送的8个E中7个,8个F和1个G~~
通过上面的例子总结一下:
当LEN=0时,接收数据的长度由数据缓冲区的长度决定;当LEN不等于0时,接收数据的长度由LEN的值决定
当发送的数据长度小于指定长度(LEN决定或数据缓冲区决定)时,函数会等待接收的数据长度满足条件时接收,而未接收的数据会放在缓冲区(硬件缓冲区)中等待下个触发周期时接收;
LEN的值不能大于数据接收缓冲区的长度,否则报错8088
4,TSED_C和TRCV_C如何实现TCP/IP和UDP通信的切换
关键参数:
ID管脚:与TCP/IP通信创建的ID要不同
ConnectionType:16#13
ADDR管脚:这个管脚是给UDP连接用的,Connect管脚是给TCP/IP用的
正常情况下,TCP/IP通信的发送和接收设置需要保持一致:

UDP通信的发送与接收设置:

总结一下:
发送与接收的通信ID,不能相同!
发送与接收本地通信端口不能相同!
发送函数的远程端口与通信伙伴的本地端口保持一致!
5,非常规的TCP/IP通信设置
当发送和接收不是同一个对象时,可以这样设置

(未修改Network Assistant的IP,理论上应该是可以改成不同的IP地址)
关键的地方在于:
通信ID不重复
远程端口不重复
本地端口不重复
以上就是一些学习过程的验证,分享一下,方便有需要的同学更直观的理解。