RTU 半双工通讯方式
本次使用的是 CPU:1215C DC/DC /RLY
通信模块:CM1241(RS232/RS485)硬件标识符:269(如图 1)
图 1
通信对象是ZNZS2 转速表。首先我们要收集到该转速表的波特率(9600)、功能码(03:保持型寄存器 40001)、地址(3)等信息。
RTU通讯有两种通信指令:Modbus(RTU)是新版本,里面的内容更多。Modbus是老版本,本次我们就是用的该版本。(如图 2)
图 2
组态端口我们就不再OB100中创建了,统一创建在OB1中,给FirstScan让他使能。拖入组态端口(MB_COMM_LOAD)和主站通信(MB_MASTER) (如图 3)
图 3
MB_COMM_LOAD:(如图 4)
REQ: 使能 (FirstScan)
PORT: 通信端口ID (硬件标识符位269的通信模块)
BAUD: 波特率 (9600)
PARITY:有无奇偶校验 (无奇偶校验)
MB_DB:“MB_MASTER”或“MB_SLAVE”指令的背景数据块的引用 ("MB_MASTER_DB")
图 4
后面的DONE、ERROR这些东西可以先不写,等我们有多块表需要轮询时在添加。
MB_MASTER:(如图 7)
REQ: 使能 (选择0.5HZ的时钟)
MB_ADDR: 从站的地址 (也就是我们表的地址:3)
MODE: 0:读 1:写 (读取:0)
DATA_ADDR: 寄存器起始地址 (40001)
DATA_LEN: 数据长度,我们需要读多长 (根据参数,我们只有1个数据:1)
DATA_PTP: CPU存储地址 (取到数据后放到我们PLC的什么地方:DB2 int数组中) 注:数据块需要取消优化访问。 (如图 5图 6)
图 5
图 6
图 7
图 8
注意:如果报错请查看报错信息,检查波特率、地址、寄存初始地址、读取长度(不能多读,从站中只有一位,如果去读两位肯定报错)
主从一致