我之前看到有坛友发帖提及840Dsl第三方通讯的问题,本着学习的态度在自己的机床上试验了一番,发现和一般的300系列PLC通讯方法设置有些许不同。我把本人成功后的步骤贴出来,以供大家参考。
1. 设置IP
1) 设置PLC IP
本例使用X127作为PLC的通信接口,在硬件配置界面双击CP 840D sl。
点击属性,设置IP地址:192.168.215.1,子网掩码:255.255.255.0,新建默认名称为Ethernet(1)的连接。
2) 设置PC端IP为192.168.215.2。
2. 组态网络
1) 硬件配置工具栏选择“选项”——“组态网络”。
2) 右键单击CPU 317F-3 PN/DP,插入新连接。
3) 设置连接。弹出的对话框选择未指定/TCP连接。
标识号,名称默认,因为是将PLC作为服务端,所以激活连接的建立不用勾选。
地址栏本地IP地址:192.168.215.1,端口地址:2000
远程地址不用设置,如果设置了固定的远程IP地址和端口地址会导致连接不上。
设置完成后,单击CPU 317F-3 PN/DP,下方会显示已建立的连接。
编译并下载组态。
3. 测试连接。打开TCP&UDP测试工具,客户端模式创建连接。目标IP:192.168.215.1,端口:2000,本机端口随机。
点击连接,绿色箭头标识连接已建立。
NetPro窗口,选择“PLC”——“激活连接状态”,发现下方显示连接状态已建立,表示配置正确,成功建立了连接。
4. 创建PLC程序。840Dsl有专门的功能块用于以太网通讯。
FC1005:AG_SEND - 将数据传输至以太网 CP
FC1006:AG_RECV - 从以太网 CP 接收数据
以上功能块接近 “SIMATIC_NET_CP”库中的功能块 FC5和FC6。FC5和FC6是否可用,我没有做测试。
1) 创建DB12用于发送数据。这里发送数据是通过FB2功能读取的机床MCS坐标,分别是X/Y/Z/A/B/C六轴的坐标值。
2) 创建DB13用于接收数据:
3) 从以下网址可以下载到使用FC5和FC6通讯的样例程序:
https://support.industry.siemens.com/cs/document/17853532/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E9%80%9A%E4%BF%A1%E5%8A%9F%E8%83%BD%E5%9D%97fc5%E5%92%8Cfc6%E7%BC%96%E7%A8%8B%EF%BC%9F?dti=0&lc=zh-CN
将其中的FC5和FC6替换为FC1005和FC1006
这里有两点需要特别注意:
u 参数LADDR的值为固定的W#16#8110。
u 数据发送和接收的地址范围一定要小于DB块的地址。比如DB12的地址范围为DB12.DBX0.0~DB12.DBX32.0,设置地址参数的时候指针地址设置为P#DB12.DBX0.0 BYTE 32就会导致连接不上,而设置为P#DB12.DBX0.0 BYTE 30就没有问题,这点我没有想明白。
4) 下载所有的FB/FC/DB块。
5) 建立变量表监视发送和接收数据。测试工具接收到的数据为浮点数的16进制表示。
5. 使用C++的SOCKET编程,创建一个控制台应用程序,与PLC成功连接后,就可以在电脑上实时监控机床各轴的的坐标,与机床界面显示一致:
编程的时候同样要注意不同数据类型的转换。本来想设计一个窗口应用程序,效果更直观,但我是刚接触自动化,C++编程也基本一窍不通,尝试了一番后发现有些吃力,就只能到这一步了。。。
6. 总结。
通过和代理商聊天得知,西门子有专门的OPC UA选件,可以实现对机床状态的实时监控。我觉得这种方式适用于不想花钱买授权,同时具备编写类似监控软件能力的公司去实现一些监控项目。
840Dsl与第三方设备(PC)的TCP通讯.zip