智能网关--同时采集多台西门子PLC设备的数据到SQL数据库,存入同一个数据表

        项目中有两台S7-1500的PLC,需要将其数据通过一个IGT-DSER智能网关采集到MySQL数据库 ;多台智能仪表与SQL数据库双向通讯   UPDATE更新方式案例   罗克韦尔PLC标签方式数据采集到数据库

        首先用数据库工具navicat连接数据库建立database数据库和devdata数据表,数据表的结构如下图:

        然后打开智能网关的参数软件,设置网关的网络参数,具体如下图:

        参数设置完成后下载,重启网关后新的参数生效启用;可以通过工具->查找搜索设备,用网关PING一下PLC和服务器的IP;

        最后配置数据库参数和PLC数据寄存器地址,通过参数软件的功能视图->数据上报与查询,切换到如下画面:

        网关支持LUA文本语言,上图数据区域选择为‘Script’是网关的存储区域,支持脚本语言开发;该项目中通过脚本语言将md1和md2两个整数除以100,转换成浮点数再上报到数据库;通过初始值功能为每台PLC设备的'devicename'字段赋值,分别是‘Stacking1’、‘Stacking2’;

        本项目完整的脚本程序文件(script.lua)如下:

--script:
--工程主函数:
function luafun( ) 
	--局部变量定义:
	local tv1=0
	local tv2=0
	local var1=0
	local var2=0
	local sv1=0
	local sv2=0

	fun_ackcycle(1)
	--循环:
	while true do
	    --PLC是以整数表示的小数,处理后上报
		tv1=tonumber(tag_readvalue(111,"md1"))
		if (tv1~=nil) then
			var1=tv1/100
		end
		if (var1~=sv1) then
			tag_writevalue(111,"data2",tostring(var1))
			sv1=var1
		end
		
		tv2=tonumber(tag_readvalue(222,"md2"))
		if (tv2~=nil) then
			var2=tv2/100
		end
		if (var2~=sv2) then
			tag_writevalue(222,"data2",tostring(var2))
			sv2=var2
		end
		
		fun_sleep(2000)  --延时2000毫秒
	end
end

--错误信息发送定义:
function sendinfor(err)
   tag_writevalue(0,"script_infor",err)
end

--调用以上两个函数
xpcall(luafun, sendinfor)
--脚本结束

        将以上配置参数和script.lua脚本文件下载到网关(帮助->网关文件更新)后重启网关,即可从数据库查看到数据;网关内封装有脚本使用的功能函数,常用的几个功能如下:

        1. 读取配置表中的变量值:tag_readvalue(int: 设备号,string: 变量名);
        2. 写数据到配置表中的变量:tag_writevalue(int: 设备号,string: 变量名,string: 写入的数据);
        3. 延时功能函数:fun_sleep(int: 时间 *1ms);
        4. 通过串口读写数据:com_sendrecv(int: 串口号(1或2), int:字节总数, byte-1, byte-2, byte-n ...)
        5. 是否允许网关循环调用:fun_ackcycle(int: 0=不允许,1=允许);
        6. 读取其它网关的变量数据:igt_tagread(string: IP地址,int:变量序号);

        通过navicat 连接数据库,查看存入到数据库的数据,如下图:

        除了上述西门子PLC外,网关也支持罗克韦尔(AB)、欧姆龙、三菱等几乎所有PLC品牌,可以选择MySQL或者SQLServer数据库。更详细的资料可以从这里下载

猜你喜欢

转载自blog.csdn.net/AutoCtrl666/article/details/105919162