前段时间有个做产线改造的兄弟问我,说车间有两台S7-200 SMART,一台做主控一台做从站,想把数据通过以太网传过去。他以前只做过200 SMART和1200的通讯,两台200 SMART之间怎么搞他没试过。今天就详细写一下S7-200 SMART之间通过以太网用PUT/GET指令通讯的完整步骤。
一、硬件连接和IP设置
S7-200 SMART本体自带一个以太网口,用一根普通网线把两台PLC连到同一个交换机上就行。不需要交叉线,现在的交换机都支持自动翻转。然后给每台PLC设置IP地址:
- 主站PLC(主动发送数据的那台):IP设为192.168.0.1,子网掩码255.255.255.0
- 从站PLC(被动接收数据的那台):IP设为192.168.0.2,子网掩码255.255.255.0
IP设置方法:在STEP 7 Micro/WIN SMART软件里,点击”系统块”→”以太网端口”,填入IP地址和子网掩码,然后把系统块下载到PLC里。注意下载完PLC会重启一次。
二、勾选”允许远程PUT/GET访问”
这一步是很多人卡住的地方。在系统块的以太网端口设置页面,下面有一个“允许远程PUT/GET访问”的复选框,必须勾上。不勾的话,别的PLC通过以太网读写不了这台PLC的数据。
两台PLC都需要勾选这个选项,然后把系统块下载到各自的PLC里。
三、PUT/GET指令详解
PUT指令用于写入数据到远程PLC,GET指令用于读取远程PLC的数据。这两个指令在Micro/WIN SMART的”指令”树→”通讯”下面可以找到。
PUT指令参数说明
PUT指令有6个参数(以S7-200 SMART V2.8为例):
- EN:使能端,用SM0.0或者一个时钟脉冲触发
- REQ:上升沿触发一次通讯请求
- ID:通讯连接ID,填0(默认连接)
- DONE:完成位,通讯完成后置1
- ADDR_1:远程PLC的数据地址,如&VB100(从站PLC的V区100开始)
- SD_1:本地数据区地址,如P#DB1.DBX0.0 BYTE 20(把本地20个字节发过去)
GET指令参数说明
GET指令参数和PUT类似:
- ADDR_1:远程PLC的数据地址,如&VB200(从站PLC的V区200开始)
- RD_1:本地接收区地址,如P#DB1.DBX100 BYTE 20(把读到的数据存到本地V区100开始的位置)
四、一个完整例子
假设主站(192.168.0.1)要把VW0-VW18这10个字发送给从站(192.168.0.2)的VW100-VW118,同时从从站VW200-VW218读取10个字到本地的VW50-VW68。
主站PLC程序:
// 每200ms触发一次通讯
SM0.5(1Hz) ---|P|--- PUT_REQ
// PUT指令配置
EN: SM0.0
REQ: M0.0(200ms脉冲)
ID: 0
DONE: M0.1
ADDR_1: &VB100(从站的VB100)
SD_1: P#VB0 BYTE 20(主站的VB0-VB19共20个字节)
// GET指令配置
EN: SM0.0
REQ: M0.0
ID: 0
DONE: M0.2
ADDR_1: &VB200(从站的VB200)
RD_1: P#VB50 BYTE 20(主站的VB50-VB69)
TSAP参数注意事项:S7-200 SMART的TSAP地址是固定的,本地TSAP为16#10.02(用于PUT/GET连接),远程TSAP为16#10.02。一般不需要手动设置,系统会自动协商。
五、常见问题和排查方法
- 通讯一直不成功(DON位一直为0):检查网线是否插好、IP是否在同一个网段、两台PLC是否都勾选了”允许远程PUT/GET访问”
- 数据读出来全是0:地址写错了,检查ADDR_1的地址是否指向了正确的数据区
- 通讯时断时续:REQ触发频率太高了,建议用T37定时器每500ms触发一次,不要每个扫描周期都触发
- 超过PUT/GET数据量限制:S7-200 SMART单次PUT/GET最多传212个字节。超过的话要分多次传输
按照以上步骤操作,两台S7-200 SMART之间的以太网通讯基本一次成功。你们在实际项目中有没有遇到过PUT/GET通讯的坑?欢迎留言交流。