本文章描述的是通过一个IGT-SER智能网关模块,与多台智能仪表通讯采集数据后存入数据库的案例。PLC数据上报到远程数据库
首先建立好数据库和数据表,通过navicat数据库工具连接MySQL数据库,建立数据库database和数据表datatable,具体设计视图如下:
将网关与智能仪表的串口通讯线连接好,打开参数设置软件通过网线连接网关设置参数,网关的默认IP一般是192.168.1.244,正常连接后,首先设置串口参数,功能->串口参数编辑,如下图:
主要设置串口的连接模式,以及波特率、通讯格式、超时时间等参数,本站地址为0,PLC站地址也设置为0,因为连接的是多台仪表,在后面的数据配置中指定具体的站号。
然后设置数据库相关参数,功能->数据上报与查询,到数据库页面,设置数据库服务器的地址、具体上报的数据,详细如下图:
上图中数据区域所选择的‘Script’支持脚本配置文件编辑,以下是该配置对应的LUA脚本文件:LUA脚本教程
--script:
--工程函数定义:
function luafun( )
--定义变量:
local tval1=0
local tval2=0
local tval3=0
local tsta1=0
local tsta2=0
local tsta3=0
local save1="nil"
local save2="nil"
local save3="nil"
--设置仪表1的传感器名称:
tag_writevalue(1,"sensor_name","temperature")
tag_writevalue(2,"sensor_name","pressure")
tag_writevalue(3,"sensor_name","voltage")
--循环读取当前值更新状态:
while true do
tval1=tonumber(tag_readvalue(1,"current_value"))
if (tval1~=nil) then
if tval1<40 and tval1 > 0 then
tsta1="Normal"
else
tsta1="Aralm"
end
end
tval2=tonumber(tag_readvalue(2,"current_value"))
if (tval1~=nil) then
if tval2<8 and tval2 > 4 then
tsta2="Normal"
else
tsta2="Aralm"
end
end
tval3=tonumber(tag_readvalue(3,"current_value"))
if (tval3~=nil) then
if tval3<400 and tval3 > 360 then
tsta3="Normal"
else
tsta3="Aralm"
end
end
if (tsta1~=save1) then
tag_writevalue(1,"state",tsta1)
save1=tsta1
end
if (tsta2~=save2) then
tag_writevalue(2,"state",tsta2)
save2=tsta2
end
if (tsta3~=save3) then
tag_writevalue(3,"state",tsta3)
save3=tsta3
end
--延时后进入下一循环:
fun_sleep(5000)
end
end
--错误发送定义:
function sendinfor(err)
tag_writevalue(0,"script_infor",err)
end
--调用以上两个函数
xpcall(luafun, sendinfor)
--脚本结束
设置完成后将配置和脚本文件一起下载到网关,重启后即可自动运行。网关软件和配置文件可从CSDN里面下载。