### MODBUSM_DES 2 -- 控制器间网口通讯

类型 | 通讯指令
描述 | 控制器间网口通讯，也可作为 MODBUS_TCP 主端通讯。 ?*PORT 可以显示出当前可用的网络链接通道。 作为 MODBUS_TCP 主端时： 选择一个 ETH 模式的 PORT 口作为 MODBUS_TCP 链接通道(不建议用第一个和最后一个)。 当选择的通道已经作为从端被占用时, 控制器自动选择一个没有占用的 ETH 模式的 PORT 口作为 MODBUS_TCP 主端链接。 作为控制器互联使用时： 选择 CONNECT 模式的 PORT 口作为控制器互联通道。
语法 | MODBUSM_DES 2 (id,port,"desipaddress",[timer],[resendset]) id：对方控制器的 MODBUS 从端 ID，缺省 1 port：支持两种模式，?*PORT 确认通道号及模式 ETH 时，作为 MODBUS_TCP 主端通道 CONNECT 时，做为控制器互联通道 desipaddress：字符串， 对方控制器的 IP 地址 timer：消息超时时间设置，缺省 1000ms resendset：超时消息重发设置，0-不重发，1-SEND 指令超时重发，2-SEND 与 MODBUSM 指令都超时重发。 MODBUSM 指令超时重发要注意，从控制器可能收到 2 次消息，对寄存器的扫描也可能出现 2 次。 SEND 指令超时重发对从控制器没有影响，重要标志性变量可以通过 SEND 指令来修改。
适用控制器 | 4 系列产品, 20170117 及以上固件版本支持
例子 | 例一 MODBUS 主端通讯连接建立 MODBUS_TCP 主端通讯不用考虑丢包。 MODBUSM_DES2(1,4,"192.168.0.12") '按站号和 IP 与从端通讯使用控制器通道 4，?*port 确认 WHILE 1 LASTTICK=TICKS FOR i =0 TO 9999 MODBUS_REG(0) = i MODBUSM_REGSET(0,10,0) '设置对端寄存器 MODBUS_REG(0) = 99 MODBUSM_REGGET(0,10,0) '读取对端寄存器 IF MODBUS_REG(0) <> I THEN ?"REG(0)=" MODBUS_REG(0),"STATE=" MODBUSM_STATE '打印在第几次通讯时错误 ENDIF NEXT ?LASTTICK-TICKS '打印通讯时间 WEND END 例二 控制器间通讯连接建立 网络环境不好时，互连通讯有很小的丢包可能。 MODBUSM_DES2($fe,20,"192.168.0.25" ,10) '控制器从端站号为 fe，控制器主端通道号为 20，?*port 确认设置 10ms 超时时间 MODBUSM_REGSET(0,10,0) '本地寄存器复制到对端 WAIT UNTIL MODBUSM_STATE <> 1 '等待消息结束 IF MODBUSM_STATE<>0 THEN MODBUSM_REGSET(0,10,0) '出错重发一次 MODBUSM_REGGET(20,10,20) '对端寄存器复制到本地 ENDIF WAIT UNTIL MODBUSM_STATE <> 1 '等待消息结束 IF MODBUSM_STATE<>0 THEN MODBUSM_REGGET(20,10,20) '出错重发一次 ENDIF END
相关指令 | ADDRESS，PORT