Modbus多主机通讯网关 串口服务器

可编程串口以太网网关 全新的极简编程

物联网可编程控制器

可编程CAN-bus物联网网关

高性价比多网口串口服务器

以太网IO模块 模拟量采集、输出模块

常用代码下载

大道至简 极简物联网平台方案

联系我们

虚拟串口软件

诚邀代理

项目合作及代客研发服务

特价商品

/ 淘宝购买
产品名称: 通过以太网为控制器扩展IO数量、扩展模拟量输出、扩展模拟量输入。
规  格:
产品备注:
产品类别: 通过以太网为控制器扩展功能模块
点击量: 713


一、    概述

AiMaker、AiMaster产品可以通过自身以太网网口来连接并控制远程IO模块、远程模拟量输出模块、远程模拟量输入模块等各类兼容的模块。

模块扩展功能通过100Mpbs以太网实现,通讯速度比传统PLC扩展方式要快10至100倍。在可连接模块数量上也远超传统的PLC方案。

本方案采用标准的Modbus TCP协议作为扩展协议,完全使用以太网和TCP/IP方式进行通讯,并且可以跨网段通讯。

在使用网线连接时,主机与扩展模块之间的距离可以达到100米。在使用以太网光纤通讯时,两者稳定通讯距离可达几十公里。如果可以容忍较大的通讯延迟,也可以使用WiFi、手机网、电力猫等等各类线路进行扩展。

目前所有的扩展模块均为多网口设计,多个扩展模块可以通过以太网手拉手分支、级联,实现自组以太网,无需单独购买交换机。

每个控制器最多可驱动8个IO模块、8个模拟量输出模块、8个模拟量采集模块,对模块的通道数量没有限制。

兼容的远程IO模块:GL-IO4(4路IO),GL-IO8(8路IO),GL-IO32(32路IO)

兼容的远程模拟量输出模块:GL-DAC3,3路模拟量输出产品。此模块有4个型号,分别支持0至20mA输出,0至10v输出,0至5V输出,PWM输出。

兼容的远程模拟量采集模块:GL-EXT600,同时支持8路模拟量采集和8路IO,此模块有3个型号,分别支持0至20mA采集,0至10v采集,0至5V采集。


本文的示例代码均可在免费编程软件xframe中查看运行。单击下载xframe编程软件


二、    示例连接图

下图演示了,为一台AiMaker600扩展1个3路模拟量输出模块、1个8路开关量输入\输出模块的连接方式。
将以此图为例子,分别描述控制模拟量输出、控制IO的方法。

extplc.jpg



三、    控制器模块扩展服务描述

1、    TCP/IP连接方式
控制器与扩展模块之间采用TCP/IP协议通讯,控制器作为Client连接至Server模式的扩展模块。扩展通讯协议为Modbus TCP。使用502通讯端口。

2、    模块扩展函数库
extdac:扩展模拟量输出函数库
extdio:扩展IO函数库
extadc:扩展模拟量采集函数库

3、    启动扩展模块服务函数
启动扩展模拟量输出服务:extdac.startextdac(0,"192.168.192.252",502,20,5000,15);
启动扩展IO模块服务:extdio.startextdio(0,"192.168.192.252",502,20,5000,15);
启动扩展模拟量采集模块服务:extadc.startextadc(0,"192.168.192.252",502,20,5000,15);
启动扩展模块服务函数在整个程序中,只需调用一次即可。
4、    使用方法
使用方法非常简单,以控制远程IO模块继电器输出为例子进行简要说明

下行代码startextdio启动扩展远程IO服务启动,远程IO的IP为192.168.192.102,端口为502。
extdio.startextdio(0,"192.168.192.102",502,20,5000,15);

正确启动服务后,即可调用继电器控制函数,无需其他操作了。
seton设置远程IO模块的第1路继电器为接通
extdio.seton(0,0)
setoff设置远程IO模块的第1路继电器为断开
extdio.setoff(0,0)

更详细例子请参考下面的说明

5、    可靠性

控制器模块扩展服务可以自动连接扩展模块,并且可以自动检测与扩展模块的通讯情况,如果检测出与扩展模块通讯中断,将会自动的不断尝试重连,直到成功连接模块。整个过程是全自动的,无需用户干预。

四、    控制远程模拟量输出例子

1、    控制4至20mA模拟量输出

print("演示连接远程DAC模块,并进行控制,本例子测试的是0~20mA输出。")

--startextdac启动扩展远程模拟量输出服务
--参数1:服务索引,有效值为0~7,可同时支持控制8个远程DAC输出模块。
--参数2:远程ip,为远程IO模块的IP地址
--参数3:远程端口,为远程IO模块的Modbus TCP协议端口。
--参数4:接收超时,为秒值,达到此超时未能收到远程模块返回数据,将判定此连接故障
--后台服务将断开此连接,并在等待“重试连接间隔”后,重新尝试连接远程IO模块。
--参数5:重试连接间隔,为毫秒值。
--参数6:保持连接的周期,为秒值,后台服务将以此间隔不断的向远程DAC模块发送报文,以测试通讯线路是否正常。
--此参数为秒,应小于远程DAC模块的TCP/IP接收超时参数。
extdac.startextdac(0,"192.168.192.101",502,20,5000,15);
local setvalue=0.0
while(true) do
--setdac420ma设置扩展模拟量输出0至20mA值
--参数1:扩展远程模拟量输出服务索引,此索引应由startextdac函数启动后方可使用。
--参数2:设置的模拟量输出值,有效值为0至20。
--参数3:指定的模拟量输出通道,为0起,0为第一个模拟量输出通道。
--返回:成功返回大于0的值,否则为失败

--循环设置远程DAC模块的通道1输出0~20mA电流,每次增加1mA。

res=extdac.setdac420ma(0,setvalue,0)
print(string.format("\r\nsetdac420ma 执行结果%d", res));

setvalue=setvalue+1
if setvalue>20.0 then
setvalue=0
end

syslib.ossleep(2000);

end  
end 


2、    控制0至10V模拟量输出

print("演示连接远程DAC模块,并进行控制,本例子测试的是0~10V输出。")

--startextdac启动扩展远程模拟量输出服务
--参数1:服务索引,有效值为0~7,可同时支持控制8个远程DAC输出模块。
--参数2:远程ip,为远程IO模块的IP地址
--参数3:远程端口,为远程IO模块的Modbus TCP协议端口。
--参数4:接收超时,为秒值,达到此超时未能收到远程模块返回数据,将判定此连接故障
--后台服务将断开此连接,并在等待“重试连接间隔”后,重新尝试连接远程IO模块。
--参数5:重试连接间隔,为毫秒值。
--参数6:保持连接的周期,为秒值,后台服务将以此间隔不断的向远程DAC模块发送报文,以测试通讯线路是否正常。
--此参数为秒,应小于远程DAC模块的TCP/IP接收超时参数。
extdac.startextdac(0,"192.168.192.101",502,20,5000,15);
local setvalue=0.0
while(true) do
--setdac010v设置扩展模拟量输出0至10V值
--参数1:扩展远程模拟量输出服务索引,此索引应由startextdac函数启动后方可使用。
--参数2:设置的模拟量输出值,有效值为0至10。
--参数3:指定的模拟量输出通道,为0起,0为第一个模拟量输出通道。
--返回:成功返回大于0的值,否则为失败

--循环设置远程DAC模块的通道1输出0~10v电压,每次增加1v。

res=extdac.setdac010v(0,setvalue,0)
print(string.format("\r\nsetdac010v 执行结果%d", res));
setvalue=setvalue+1
if setvalue>10.0 then
setvalue=0
end

syslib.ossleep(2000);

end 


3、  读取模拟量输出值


print("演示连接远程DAC模块,设置0~20mA输出值,并回读输出值。")

--startextdac启动扩展远程模拟量输出服务
--参数1:服务索引,有效值为0~7,可同时支持控制8个远程DAC输出模块。
--参数2:远程ip,为远程IO模块的IP地址
--参数3:远程端口,为远程IO模块的Modbus TCP协议端口。
--参数4:接收超时,为秒值,达到此超时未能收到远程模块返回数据,将判定此连接故障
--后台服务将断开此连接,并在等待“重试连接间隔”后,重新尝试连接远程IO模块。
--参数5:重试连接间隔,为毫秒值。
--参数6:保持连接的周期,为秒值,后台服务将以此间隔不断的向远程DAC模块发送报文,以测试通讯线路是否正常。
--此参数为秒,应小于远程DAC模块的TCP/IP接收超时参数。
extdac.startextdac(0,"192.168.192.101",502,20,5000,15);
local setvalue=0.0
while(true) do
--setdac420ma设置扩展模拟量输出0至20mA值
res=extdac.setdac420ma(0,setvalue,0)
print(string.format("\r\nsetdac420ma 执行结果%d", res));
setvalue=setvalue+1
if setvalue>20.0 then
setvalue=0
end
--readdac420ma读取远程DAC模块0~20mA输出通道的当前值
--参数1:扩展远程模拟量输出服务索引,此索引应由startextdac函数启动后方可使用。
--参数2:读取的0~20mA模拟量输出的通道号,为0起,0读取第一路模拟量输出通道。
--返回:返回1:成功返回大于0,否则失败,返回2:当前模拟量输出的值,为浮点数。
res,dacoutvalue=extdac.readdac420ma(0,0)

if res>0 then
   print(string.format("\r\nreaddac420ma 执行结果:%d,通道值:%2.2f",res,dacoutvalue));  
end
syslib.ossleep(2000);

end 



四、    控制远程IO的例子。


1、控制远程IO的继电器输出


print("演示通过以太网控制远程IO模块的1路开关量输出")

--startextdio启动扩展远程IO服务
--参数1:服务索引,有效值为0~7,可同时支持控制8个远程IO模块。
--参数2:远程ip,为远程IO模块的IP地址
--参数3:远程端口,为远程IO模块的Modbus TCP协议端口。
--参数4:接收超时,为秒值,达到此超时未能收到远程模块返回数据,将判定此连接故障
--后台服务将断开此连接,并在等待“重试连接间隔”后,重新尝试连接远程IO模块。
--参数5:重试连接间隔,为毫秒值。
--参数6:保持连接的周期,为秒值,后台服务将以此间隔不断的向远程IO模块发送报文,以测试通讯线路是否正常。
--此参数为秒,应小于远程IO模块的TCP/IP接收超时参数。
extdio.startextdio(0,"192.168.192.102",502,20,5000,15);

while(true) do
--seton设置远程IO指定通道为接通
--参数1:扩展远程IO服务索引
--参数2:设置的通道,为0起,0为第1路输出通道。
--返回:成功返回大于0的值,否则为失败
res=extdio.seton(0,0)
print(string.format("\r\n设置扩展IO通道1为接通的执行结果%d", res));
syslib.ossleep(1000);

--setoff设置远程IO指定通道为断开
--参数1:扩展远程IO服务索引
--参数2:设置的通道,为0起,0为第1路输出通道。
--返回:成功返回大于0的值,否则为失败
res=extdio.setoff(0,0)
print(string.format("\r\n 设置远程IO通道1为断开的执行结果 %d", res));
syslib.ossleep(1000);
end 


2、读取远程IO开关量输入状态

print("演示通过以太网读取远程IO模块的1路开关量输入状态")

--startextdio启动扩展远程IO服务
--参数1:服务索引,有效值为0~7,可同时支持控制8个远程IO模块。
--参数2:远程ip,为远程IO模块的IP地址
--参数3:远程端口,为远程IO模块的Modbus TCP协议端口。
--参数4:接收超时,为秒值,达到此超时未能收到远程模块返回数据,将判定此连接故障
--后台服务将断开此连接,并在等待“重试连接间隔”后,重新尝试连接远程IO模块。
--参数5:重试连接间隔,为毫秒值。
--参数6:保持连接的周期,为秒值,后台服务将以此间隔不断的向远程IO模块发送报文,以测试通讯线路是否正常。
--此参数为秒,应小于远程IO模块的TCP/IP接收超时参数。
extdio.startextdio(0,"192.168.192.102",502,20,5000,15);

while(true) do
--get1ich读取远程IO模块指定开关量输入通道的状态
--参数1:扩展远程IO服务索引,此索引应由startextdio函数启动后方可使用。
--参数2:读取的开关量输入通道,为0起,0为读取第1路开关量输入通道
--返回:参数1,成功返回大于0的值,否则为失败,参数2为开关量输入状态值,0为断开,1为接通
res,distate=extdio.get1in(0,0)
if (res>0) then
    print(string.format("\r\n开关量输入1状态:%d", distate));
   end
   
syslib.ossleep(1000);
end  


2、一次读取全部远程IO开关量输入状态

print("演示通过以太网读取远程IO模块全部开关量输入通道状态")
local alldi={}
--startextdio启动扩展远程IO服务
--参数1:服务索引,有效值为0~7,可同时支持控制8个远程IO模块。
--参数2:远程ip,为远程IO模块的IP地址
--参数3:远程端口,为远程IO模块的Modbus TCP协议端口。
--参数4:接收超时,为秒值,达到此超时未能收到远程模块返回数据,将判定此连接故障
--后台服务将断开此连接,并在等待“重试连接间隔”后,重新尝试连接远程IO模块。
--参数5:重试连接间隔,为毫秒值。
--参数6:保持连接的周期,为秒值,后台服务将以此间隔不断的向远程IO模块发送报文,以测试通讯线路是否正常。
--此参数为秒,应小于远程IO模块的TCP/IP接收超时参数。
extdio.startextdio(0,"192.168.192.102",502,20,5000,15);

while(true) do
alldi={}
--getallin读取远程IO模块全部输入通道状态
--参数1:扩展远程IO服务索引,此索引应由startextdio函数启动后方可使用。
--参数2:读取的开关量输入通道数量。例如设置为4,读取全部4路输入通道的状态。
--参数3:开关量输入状态数据输出数组,每个数组元素的8个bit表示8路开关量输入状态。
--bit状态为0说明开关量输入断开,1为接通。
--例如,数组[1]的值表示第开关量输入1~8输入状态,数组[2]表示9~16开关量输入状态。
--返回:成功返回大于0的值,否则为失败
res=extdio.getallin(0,4,alldi)

if (res>0) then
     debug.printarray(alldi);
   end
   
syslib.ossleep(1000);
end 


五、    读取远程模拟量采集模块通道值

print("演示连接远程模拟量采集模块,读取0~20mA模拟量输入值。")

--startextadc启动扩展远程模拟量采集服务
--参数1:服务索引,有效值为0~7,可同时支持读取8个远程模拟量采集模块数据。
--参数2:远程ip,为远程IO模块的IP地址
--参数3:远程端口,为远程IO模块的Modbus TCP协议端口。
--参数4:接收超时,为秒值,达到此超时未能收到远程模块返回数据,将判定此连接故障
--后台服务将断开此连接,并在等待“重试连接间隔”后,重新尝试连接远程IO模块。
--参数5:重试连接间隔,为毫秒值。
--参数6:保持连接的周期,为秒值,后台服务将以此间隔不断的向远程模拟量采集模块发送报文,以测试通讯线路是否正常。
--此参数为秒,应小于远程模拟采集模块的TCP/IP接收超时参数。
extadc.startextadc(0,"192.168.192.101",502,20,5000,15);
local extadcval=0.0
while(true) do
--readadc420ma读取远程模块0~20mA输入通道值
--参数1:扩展远程模拟量输入服务索引,此索引应由startextadc函数启动后方可使用。
--参数2:读取的0~20mA模拟量输入的通道号,为0起,0读取第一路模拟量输入通道。
--返回:返回1:成功返回大于0,否则失败,返回2:当前模拟量输入的值,为浮点数,单位为mA。
res,extadcval=extadc.readadc420ma(0,0)
if res>0 then
   print(string.format("\r\nreadadc420ma 执行结果:%d,通道值:%2.2f",res,extadcval));  
 else
   print(string.format("\r\nreadadc420ma 执行失败:%d",res));
end
syslib.ossleep(2000);

end 


版权所有:深圳市一天广联科技有限公司 邮箱:getit95@163.com 粤ICP备18087671号