西门子1200PLC模板通讯程序模板案例可以直接调用 包含多种通讯比如Modbus-RTU485S7通讯Modbus-TCPTCP/IP等学会这个基本上西门子通讯方面的问题能独当一面了博途V16及较新板本可打开简单明了一学就懂方便工程人员学习快速开发应用避免自学碰到的很多坑给工程佬们掏个压箱底的宝贝——西门子1200PLC通讯程序模板Modbus-RTU、S7、Modbus-TCP、TCP/IP全覆盖博途V16及以上直接打开调用学会这些通讯问题直接拿捏再也不用熬夜查手册踩坑一、Modbus-RTU485工业现场最能打的老将485通讯是现场传感器、仪表的标配直接用博途自带的MB_CLIENT块就能搞定模板里已经把参数配置好了直接改几个核心值就行// 调用Modbus-RTU客户端FB块CM1241 RS485模块 CALL MB_CLIENT, ModbusRTU_Client REQ : M0.0 // 上升沿触发读请求用M0.0脉冲触发别一直置1 DIS : FALSE // 不禁用块 R : FALSE // 不复位 MB_MODE : 0 // 0读保持寄存器1写保持寄存器 MB_ADDR : 1 // 从站设备地址比如传感器站号设的1 MB_DATA_ADDR : 40001 // 要读的寄存器起始地址4xxxx是保持寄存器区 MB_LEN : 2 // 读取2个寄存器对应4字节数据比如一个float值 PORT : 2 // 485模块对应的PORTCM1241插插槽2就是PORT2本体串口是PORT1 BAUD : 9600 // 波特率和从站保持一致别乱改传感器默认9600多 PARITY : 0 // 无校验和从站匹配常见N,8,1 STOP_BITS : 1 // 1位停止位 MB_DATA_PTR : P#DB1.DBX0.0 BYTE 4 // 读到的数据存本地DB1.DBX0.0开始的4字节 DONE M0.1 // 读完成标志 ERROR M0.2 // 错误标志 STATUS W10.0 // 错误代码查手册对应问题比如8082是从站无响应踩坑分析终端电阻终端电阻终端电阻重要的事说三遍485总线首尾必须开终端电阻不然通讯时断时续我刚入行时查了三天才发现是这个问题。MBDATAADDR别减1很多新手学Modbus资料说寄存器要减1但博途的MB_CLIENT已经帮你做了转换直接填设备手册上的40001就行减1就会读到下一个寄存器。波特率、校验位必须和从站完全一致哪怕一个错了直接通讯失败。二、S7通讯西门子自家“无缝连接”和其他西门子PLC比如1500、300通讯用PUT/GET块最快不用额外配置自家协议就是稳// 调用PUT块给远程1200写数据 CALL PUT, S7_PUT REQ : M1.0 // 触发写请求 ID : 1 // 连接ID和TCONN_IP块的ID对应 DONE M1.1 // 写完成 ERROR M1.2 // 错误 STATUS W11.0 // 错误码 REM_IP : 192.168.0.100 // 远程PLC的IP地址 REM_RACK : 0 // 远程PLC机架号1200默认01500看实际机架 REM_SLOT : 1 // 远程PLC槽号1200固定11500一般是2 SD_1 : P#DB1.DBX0.0 WORD 2 // 本地要写的数据DB1.DBW0-DBW22个WORD RD_1 : P#DB2.DBX0.0 WORD 2 // 远程接收数据区远程DB2.DBW0-DBW2踩坑分析远程PLC必须开允许PUT/GET在博途里远程PLC的“设备组态”→“保护与安全”→“连接机制”把“允许来自远程对象的PUT/GET通讯访问”勾上不然直接拒绝连接。REMRACK和REMSLOT别乱填1200的机架号是0槽号是11500如果是CPU1511-1PN机架号0槽号2填错了直接连不上。连接ID要和TCONN_IP块的ID对应一个ID对应一个连接别重复用。三、Modbus-TCP以太网版Modbus和支持Modbus-TCP的设备比如智能仪表、上位机通讯不用485模块直接以太网连还是用MB_CLIENT只是改TCP参数// 调用Modbus-TCP客户端块 CALL MB_CLIENT, ModbusTCP_Client REQ : M2.0 // 触发读请求 DIS : FALSE R : FALSE MB_MODE : 0 MB_ADDR : 1 // 从站地址Modbus-TCP的从站地址一般填1部分设备用IP区分 MB_DATA_ADDR : 40001 MB_LEN : 2 MB_TCP_CONNECT : // TCP连接参数 IP : 192.168.0.200 // 设备IP PORT : 502 // Modbus-TCP默认端口502别改除非设备手册说要改 MB_DATA_PTR : P#DB1.DBX4.0 BYTE 4 DONE M2.1 ERROR M2.2 STATUS W12.0踩坑分析端口502别乱改除非设备明确要求用其他端口比如有些设备为了安全改了端口必须和设备一致。防火墙如果是和电脑上位机通讯电脑防火墙可能会拦截502端口必须添加例外。从站地址有些设备不看直接填1就行别纠结主要靠IP区分。四、TCP/IP原始通讯自定义协议自由发挥遇到不支持标准协议的设备就用TCP原始通讯自己定义数据格式比如和自定义上位机、第三方非标设备通讯// 1. 建立TCP连接 CALL TCON, TCP_Connect REQ : M3.0 // 触发连接 ID : 2 // 连接ID CONNECT : // 连接参数 REM_IP : 192.168.0.300 // 远程IP REM_PORT : 10000 // 自定义端口 LOCAL_PORT : 0 // 本地端口自动分配 DONE M3.1 // 连接成功 ERROR M3.2 // 连接失败 STATUS W13.0 // 2. 发送数据 CALL TSEND, TCP_Send REQ : M4.0 // 触发发送 ID : 2 // 和TCON的ID一致 DATA : P#DB3.DBX0.0 BYTE 8 // 要发送的8字节数据自定义格式 LEN : 8 // 数据长度 DONE M4.1 ERROR M4.2 STATUS W14.0 // 3. 接收数据 CALL TRCV, TCP_Recv EN_R : TRUE // 一直允许接收 ID : 2 DATA : P#DB3.DBX8.0 BYTE 8 // 接收数据存这里 NDR M5.0 // 新数据到达 ERROR M5.1 STATUS W15.0 LEN MW20 // 实际接收长度踩坑分析超时时间在TCON的参数里可以设超时太短会频繁断开太长会导致通讯卡顿一般设5000ms就行。数据格式和对方设备必须协商好是ASCII还是二进制比如发送“01 03 00 01 00 02”的二进制还是“010300010002”的ASCII格式错了对方根本看不懂。缓冲区大小DATA的长度要大于等于实际接收的数据长度不然会截断数据比如对方发10字节你设8字节就会丢2字节。最后说句实在的这个模板直接在博途里打开就能用每个通讯方式都配了注释和示例调用把参数改成你项目里的就行不用自己从头写块、调参数。我做工程5年这些通讯方式的坑基本都踩过模板里已经把常见坑的避坑处理加进去了比如REQ用脉冲触发、终端电阻提醒、参数默认值设成常用值。学会这四种通讯西门子PLC的通讯问题基本能独当一面以后不管是做设备改造、新项目开发直接套模板改参数效率至少翻3倍西门子1200PLC模板通讯程序模板案例可以直接调用 包含多种通讯比如Modbus-RTU485S7通讯Modbus-TCPTCP/IP等学会这个基本上西门子通讯方面的问题能独当一面了博途V16及较新板本可打开简单明了一学就懂方便工程人员学习快速开发应用避免自学碰到的很多坑