菜鸟:
我在用C#开发一个程序,作一TCP client , 每隔10秒分别读取一次PLC的下面几个地址的值:
DB6.DBD36
DB6.DBD48
我使用网络调试助手已经可以连通PLC了,现在我想知道该发送什么字符串给plc, 才能传回我需要的值。
有谁知道 可以给我一段可以获取到值的 16进制数据。
谢谢
斑竹:
楼主这是要做S7通讯吗?
还是老老实实做TCP通讯吧,PLC打包发送数据即可。
菜鸟:
是的就是在作TCP通讯, 因为我只需要取出PLC上面两个地址的值即可, 因不知道该发送什么包到PLC才能回发我需要的值,特在此请教 。
附上我要取的数据
斑竹:
标准TCP通讯是与地址无关的,需要解包解码,如果从地址单元读取数据就是S7通讯了
菜鸟:
非常感谢版主*近热心的回答。
现在知道了PLC的IP地址 10.252.7.9 端口号是102 是TCP server
之前作过其它的 tcp client 与tcp server 通读的例子, 知道 如:在网络调试助手(客户端)中发送
FF 01 00 10 13 server 端就会自动回发一段我需要的值 FF 00 01 10 13 我只要解析回发过来的值就可以了。
但是西门子 s7-1200 如果我想获取 DB6.DBD36 的值,我该向PLC发送一串什么包 它会自动为我返回值呢。
请版主给些提示。没有作过PLC的开发
游侠:
**:如果做TCP,端口不能用102,因为102是S7通信用的;
**:PLC做服务器,需要在PLC侧建立一个TCP的通信,并调用程序,TSEND_C和TRCV_C用于收发数据。并周期的将你想获得的数据发送到PC机。
我只能给你点提示;
1、你这里是作为HMI和S7 -1200通讯的。你仅能使用 Ethernet ISO TCP 模式;要打开1200的102端口。你的端口可以为 10001。你的CPU Slot No 范围 .=0-18; IP地址和PLC在同一LAN中。
2、你要读取的DB 不能是仅符号访问的(要300/400兼容的);因为往往交换数据类型是一致的,可以使用数组。并且勾选(允许HMI访问)。传送打包都是按字;浮点数自己组织。
3、直接访问DB的格式:
n+0: 9x00;(x=1-8)00是DB变量类型。I: 01H;Q: 02H;M: 03H
n+1: 块号低4位+地址号12位。地址号*大8190
n+2::00+块号高8位; 块号*大 4095
n+3:高字节扩展代码+低字节 指定位
n+4:00+站号字节