【TRIO-Basic从入门到精通教程十二】Trio实现modbusTCP通讯
作者:Gmotion
发布时间:2018-01-09
更新时间:2023-12-31
点击数:
大家好,今天的测试内容是两个TRIO之间实现modbusTCP通讯。
trio basic编程,实现两个控制器trio,modbustcp快速读写数据通讯。
modbus tcp通讯标准通讯格式,采用标准库modbus指令实现,编程简单和方便。
modbusTCP通讯协议这块就不在这里详细介绍。我们之间看我们配置:
主站:
IP地址:192.168.0.251
从站:
IP地址:192.168.0.250
作为从站,TRIO这边默认开启modbusTCP协议,通讯端口:502
从站可以是任何一方支持modbusTCP协议的控制器或者是传感器。
我们重点讲解主站通讯:
DIM com_index AS INTEGER com_index=4000 modbus_handle=VR(com_index) DIM ex_modbus_func AS INTEGER ex_modbus_func = $03 DIM print_port AS INTEGER print_port=5 DIM read_timeout,loop_time,save_looptick,read_tmptick AS INTEGER TICKS=0 read_timeout=250 loop_time=100 save_looptick=TICKS DIM tx_connectok AS BOOLEAN tx_connectok=FALSE 'IP_TCP_TX_TIMEOUT = 1000 IP_TCP_TX_TIMEOUT=50 '============================================================== WHILE TRUE IF tx_connectok=FALSE THEN GOSUB open_mod ELSE read_tmptick=TICKS ' get 10 values from holding registers IF tx_connectok THEN tx_connectok=MODBUS (ex_modbus_func, -1, VR(20), 3 , 1000 , 10 ) ' send 10 values to holding registers IF tx_connectok THEN tx_connectok=MODBUS (ex_modbus_func, -1, VR(20), 16 , 1010 , 10 ) IF tx_connectok THEN PRINT#print_port,TIME$,"ReadUseTime=",ABS(read_tmptick-TICKS) ENDIF REPEAT WA(5) UNTIL ABS(save_looptick-TICKS)>=loop_time save_looptick=TICKS WEND '============================================================== WA(50) STOP open_mod: 'Close Modbus connection MODBUS(1,-1,modbus_handle) WA(20) 'IP Address 192.168.0.250, Port Number 502 IF MODBUS(0,-1,192,168,0,250,502,com_index)=TRUE THEN modbus_handle = VR(com_index) PRINT #print_port,TIME$,"connect TCP PORT ok:",modbus_handle tx_connectok=TRUE ELSE PRINT #0,TIME$,"connect TCP PORT ng:",modbus_handle tx_connectok=FALSE ENDIF WA(20) RETURN
上述程序支持如下功能:
1、通讯快速超时功能
2、断线重连功能
3、超时无响应重连功能
我们看看最终执行效果:
谢谢大家支持