【工业测控】雷达物位计485采集

myConfig.lua

myConfig={
	App={
		Version="v1.0.0_2021_05_15",
		Name="雷达物位计采集",
		Description="雷达物位计采集,http上报"
	},
	server={--服务器参数设置
		channel="mqtt",
		mqtt={
			Subscribe_Topic="cfiot/LevelMeter/cmd_channel",--订阅主题名,接收后台下发命令
			Publish_Topic="cfiot/LevelMeter/data_channel"--发布主题名,上报数据
		},
		http={
			url=""
		}
	},
	Serial={--串口参数
		portName="Serial1",
		Baud=9600,
		DataBits=8,
		Parity="None",
		StopBits=1,
		SendDelay=100
	},
	Collection={
		interval=20000,--采集间隔
		cmdArray={--采集数据列表
			{0x01,0x03,0x00,0x00,0x00,0x02,0xc4,0x0b},
			{0x01,0x03,0x00,0x01,0x00,0x02,0x95,0xcb},
			{0x01,0x03,0x00,0x02,0x00,0x02,0x65,0xcb},
			{0x01,0x03,0x00,0x03,0x00,0x02,0x34,0x0b}
		}
	}
}
return myConfig

main.lua

cf_iot=require("cf_iot")
common=require("common")
json=require("json")
mqtt=require("mqtt")
http=require("http")
hardware=require("hardware")

PackagePath=this().PackagePath--当前虚拟机加载用户自定义模块的根目录
LuaLibPath=this().LuaLibPath--当前虚拟机加载用户自定义模块的根目录
package.path = PackagePath .. [[/?/init.lua;]] .. PackagePath .. [[/?.lua;]] .. package.path
package.path = LuaLibPath .. [[/?/init.lua;]] .. LuaLibPath .. [[/?.lua;]] .. package.path

require "General_Function"
require "myConfig"
local FirmwareInfo=json.decode(cf_iot.GetFirmwareInfo())
local hexArray={}--数据返回列表
local hexArray_index=0
function main()

	Debug=true
	LuaVMName=this().LuaVMName--当前虚拟机的名称

	cf_iot.SetDebug(LuaVMName,Debug)
	cf_iot.SetWatchdogTimeout(LuaVMName,300)

	if myConfig.server.channel=="mqtt" then
		mqtt_init()
	end

	hardware_init()

	--看门狗定时器
	cf_iot.AddTimer(LuaVMName,"MainTimer",5000,function()

		cf_iot.Watchdog(LuaVMName,1)--发送看门狗信号

	end)

	--信号采集定时器
	cf_iot.AddTimer(LuaVMName,"SignalAcquisitionTimer",myConfig.Collection.interval,function()

		clearHexArray()

		for i,cmd in pairs(myConfig.Collection.cmdArray) do
			hardware.SerialWriteDataByte(myConfig.Serial.portName,cmd)
		end


		--等待数据
		local waitTime=myConfig.Serial.SendDelay * (table.getn(myConfig.Collection.cmdArray)+2)
		cf_iot.AddTimer(LuaVMName,"WaitingDataTimer",2000,function()

			cf_iot.DeleteTimer(LuaVMName,"WaitingDataTimer")

			if hexArray_index ~= 0 then
				local data={
						MsgType="data",
						IMEI=FirmwareInfo.ModuleState.IMEI,
						CCID=FirmwareInfo.ModuleState.CCID,
						Msg=hexArray
				}
				UploadData(json.encode(data))
				clearHexArray()
			end

		end)

	end)

end

function UploadData(jsonstr)
	--数据上传
	if jsonstr~=nil then
		if myConfig.server.channel=="mqtt" then
			mqtt.Publish(myConfig.server.mqtt.Publish_Topic,0,false,jsonstr)
		end

		if myConfig.server.channel=="http" then
			http.Post(myConfig.server.http.url,"data=" .. jsonstr)
		end
	end
end

function clearHexArray()
	--清空缓存数据
	hexArray_index=0

	for i,v in pairs(hexArray) do
		hexArray[i]=""
	end

end
function hardware_init()
	--串口初始化
	hardware.SetSerialDataRoute(1)--设置串口数据路由,0:服务器,1:lua虚拟机

	local Hardware_OnEvent= function(data)--硬件事件回调函数

			local portName=data.portName
			local EventName=data.EventName
			local Message=portName ..":".. EventName .. ":" .. data.Message
			local data={
					MsgType="Hardware_OnEvent",
					IMEI=FirmwareInfo.ModuleState.IMEI,
					CCID=FirmwareInfo.ModuleState.CCID,
					Msg=Message
			}
			UploadData(json.encode(data))

	end
	hardware.SetHardwareOnEvent(LuaVMName,Hardware_OnEvent)

	local Serial1_OnData= function(data)--串口1数据处理函数
		--16进程字符数组 data.hexArray
		--byte数组data.byteArray
		--print(data.hexArray,data.byteArray)
		local cmdID=data.hexArray[2]--功能码
		local Node_Address=data.byteArray[1]--获取该数据的节点地址

		if Node_Address==1 and cmdID=="03" then
			hexArray_index=hexArray_index+1
			if hexArray_index>=1 and hexArray_index<=table.getn(myConfig.Collection.cmdArray) then
				hexArray[hexArray_index]=table.concat(data.hexArray)
			end
		end
	end
	hardware.SetSerialWriteDataSleep(myConfig.Serial.portName,myConfig.Serial.SendDelay)--设置串口发送数据包后延迟时间,单位毫秒,延时是在CFIOT固件中执行,防止粘包
	hardware.SetSerialOnDataHandler(LuaVMName,myConfig.Serial.portName,Serial1_OnData)
	hardware.SerialOpen(myConfig.Serial.portName,myConfig.Serial.Baud,myConfig.Serial.DataBits,myConfig.Serial.Parity,myConfig.Serial.StopBits)--打开串口1

end

function mqtt_init()
	mqtt.WaitMQTTClientReady()--等待mqtt主通道准备好
end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值