
S7-1200程序:硬件配置与软件功能实现
最近在车间折腾S7-1200的集成项目,两个1212CPU带着一堆扩展模块干活。这次遇到三个硬核需求
:ModbusRTU群聊、PLC之间搞对象传数据、还有两路流量PID控制,整个过程踩坑无数,记录点干货。
**Modbus轮询的骚操作**
三个CM1241模块扛起了39台设备通讯的大旗。29个压力表+5个温控器+水表电表流量计,这数量直
接让轮询指针转出火星子。上代码:
```twincat
//设备参数结构体打包
TYPE DeviceConfig :
STRUCT
SlaveID : INT; //从站地址
RegAddr : DWORD; //寄存器地址
DataPtr : POINTER; //数据存放指针
END_STRUCT
END_TYPE
VAR
devices : ARRAY[1..39] OF DeviceConfig; //设备配置表
index : INT := 1; //当前设备索引
timeout_T : TON := (PT:=T#500ms); //通讯超时计时
END_VAR
MB_MASTER(REQ:=startCycle,
MB_ADDR:=devices[index].SlaveID,
DATA_ADDR:=devices[index].RegAddr,
DATA_PTR:=devices[index].DataPtr);
```
这代码的精髓在于用数组当轮询目录,index像指针一样挨个点名。每个设备配置里藏着从站地址、
寄存器地址和数据存储位置三件套。实际操作中发现,温控器的数据格式总搞事情,得用MOVE块做字节序
转换:
```twincat
MOVE(IN:=MB_DATA_BUFFER[0], OUT=>Real_Temperature);