整理一下结果,如果有人想使用PLC自带的PN口采用TCP读取Modbus设备从站,可按如下方法做:
1,下载西门子这个例程:http://support.automation.siemens.com/CN/llisapi.dll/csfetch/29737950/Sample_open_TCP.zip?func=cslib.csFetch&nodeid=29738409
2,配置通信的参数DB

这里我们需要修改的地方不多,主要是IP地址和端口(rem_Port),主从模式,CPU型号(DEV_ID),其他的基本默认就可以了,实在有问题去下载中心再找关于FB65的参数DB配置。西门子有个免费的工具TCP winzard也可以帮你配置,不过我没用过那个工具。
4,检查连接是不是建立好了,正常FB65的状态字在你的TCP服务器端启动之前,状态应该是7002(busy)才对,如果是7000说明没有连接请求,可以考虑把那个req参数改成随便一个m点,这样方便手动控制。
3,如果连接建立了就可以测试发送数据,建议下载一个TCP测试工具,我用的是TCP&UDP测试工具 1.02,这个工具除了有广告外还不错,可以同时多个建立服务器或者客户端。
4,如果发送接收功能都正常了就很简单啦,把读取modbus从站的代码放到你要的DB里,然后发送接收就可以了。这里要注意的是Modbus TCP和串口的Modbus代码稍有不同,你如果不想详细研究或者使用到很复杂的功能,那就简单的这么处理就可以了:
a,发送代码在前面加5个字节的0和一个字节的数字,这个数字=后面的发送代码长度,把CRC校验码去掉。比如原来的代码是 01 03 00 00 00 0A C5 CD,现在变成00 00 00 00 00 06 01 03 00 00 00 0A
b,接收到的数据把前面的6个字节去掉就是modbus真正的数据,不带校验码。