290 lines
9.2 KiB
Lua
290 lines
9.2 KiB
Lua
-- LUA default run file
|
|
|
|
-- LUA default run file
|
|
|
|
require "env"
|
|
panel = {}
|
|
require "panel"
|
|
|
|
socket = require('socket')
|
|
PLC = require('vwago')
|
|
Scheduler = require('scheduler')
|
|
--I2CClass = require('periphery').I2C
|
|
I2CDevice = nil;
|
|
MQTT = require("mqtt")
|
|
|
|
daq = {};
|
|
|
|
local function errLog(msg)
|
|
io.stderr:write(msg)
|
|
end
|
|
|
|
function logPrint(msg)
|
|
print(msg);
|
|
end
|
|
|
|
local function pubPanelConfig()
|
|
MQTT.publish(mqttRoot.."/panel/label/button/send",panel.LabelButtonSend[1])
|
|
MQTT.publish(mqttRoot.."/panel/label/button/0",panel.LabelButton_1[1])
|
|
MQTT.publish(mqttRoot.."/panel/label/button/1",panel.LabelButton_2[1])
|
|
MQTT.publish(mqttRoot.."/panel/label/button/2",panel.LabelButton_3[1])
|
|
MQTT.publish(mqttRoot.."/panel/label/button/3",panel.LabelButton_4[1])
|
|
MQTT.publish(mqttRoot.."/panel/label/header",panel.LabelHeader[1])
|
|
MQTT.publish(mqttRoot.."/panel/options/samples",panel.OptionsSamples[1])
|
|
MQTT.publish(mqttRoot.."/panel/options/xaxis/max",panel.OptionsXaxisMax[1])
|
|
MQTT.publish(mqttRoot.."/panel/options/xaxis/min",panel.OptionsXaxisMin[1])
|
|
MQTT.publish(mqttRoot.."/panel/options/yaxis/0/max",panel.OptionsXaxis_1_Max[1])
|
|
MQTT.publish(mqttRoot.."/panel/options/yaxis/1/max",panel.OptionsXaxis_2_Max[1])
|
|
MQTT.publish(mqttRoot.."/panel/options/yaxis/1/min",panel.OptionsXaxis_2_Min[1])
|
|
MQTT.publish(mqttRoot.."/panel/options/yaxis/0/min",panel.OptionsYaxis_1_Min[1])
|
|
MQTT.publish(mqttRoot.."/panel/text/send/message", panel.TextSendMessage[1])
|
|
MQTT.publish(mqttRoot.."/panel/text/send/topic",panel.TextSendTopic[1])
|
|
MQTT.publish(mqttRoot.."/panel/debug",panel.Debug["alt"][panel.Debug["idx"]])
|
|
end
|
|
|
|
MQTT.onConnect (
|
|
function()
|
|
errLog("MQTT:\t Connect\n");
|
|
MQTT.publish(mqttRoot.."/info", "PIALU")
|
|
MQTT.subscribe(mqttRoot.."/ctrl/#")
|
|
end
|
|
)
|
|
|
|
MQTT.onMessage (
|
|
function(mid, topic, payload)
|
|
logPrint("MQTT:\t Message "..topic, payload)
|
|
|
|
subTopic = string.match(topic,mqttRoot.."/ctrl/(%w+)")
|
|
if subTopic then
|
|
if subTopic == "cmd" then
|
|
logPrint("MQTT:\t Command");
|
|
analogChannel = string.match(topic,mqttRoot.."/ctrl/cmd/analog/(%w)")
|
|
if analogChannel then
|
|
|
|
if analogChannel == "0" then
|
|
logPrint("MQTT:\t Command Analog Channel "..analogChannel.." "..payload);
|
|
if payload == "on" then
|
|
channel_0 = true
|
|
MQTT.publish(mqttRoot.."/status/analog/0", "on",true)
|
|
else
|
|
channel_0 = false
|
|
MQTT.publish(mqttRoot.."/status/analog/0", "off",true)
|
|
end
|
|
elseif analogChannel == "1" then
|
|
if payload == "on" then
|
|
channel_1 = true
|
|
MQTT.publish(mqttRoot.."/status/analog/1", "on",true)
|
|
else
|
|
channel_1 = false
|
|
MQTT.publish(mqttRoot.."/status/analog/1", "off",true)
|
|
end
|
|
elseif analogChannel == "2" then
|
|
if payload == "on" then
|
|
channel_2 = true
|
|
MQTT.publish(mqttRoot.."/status/analog/2", "on",true)
|
|
else
|
|
channel_2 = false
|
|
MQTT.publish(mqttRoot.."/status/analog/2", "off",true)
|
|
end
|
|
elseif analogChannel == "3" then
|
|
if payload == "on" then
|
|
channel_3 = true
|
|
MQTT.publish(mqttRoot.."/status/analog/3", "on",true)
|
|
else
|
|
channel_3 = false
|
|
MQTT.publish(mqttRoot.."/status/analog/3", "off",true)
|
|
end
|
|
end
|
|
elseif string.match(topic,mqttRoot.."/ctrl/cmd/panel/config") then
|
|
if string.match(payload,"publish") then
|
|
pubPanelConfig()
|
|
elseif string.match(payload,"apply") then
|
|
panel = {}
|
|
dofile("panel.lua")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
)
|
|
|
|
|
|
local function getInt32(bytes,offset)
|
|
if (offset >= 0) and ((#bytes-offset) >= 4) then
|
|
num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8) + bit32.lshift(bytes[offset+3],16) + bit32.lshift(bytes[offset+4],24);
|
|
if ( num > 0x80000000 ) then
|
|
return num - 0x100000000;
|
|
else
|
|
return num;
|
|
end
|
|
end
|
|
|
|
return 9999999999;
|
|
end
|
|
|
|
local function getInt16(bytes,offset)
|
|
if (offset >= 0) and ((#bytes-offset) >= 2) then
|
|
num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8);
|
|
end
|
|
|
|
if ( num > 0x8000 ) then
|
|
return num - 0x10000;
|
|
else
|
|
return num;
|
|
end
|
|
|
|
return 9999999999;
|
|
end
|
|
|
|
local function getUint8(bytes,offset)
|
|
if (offset >= 0) and ((#bytes-offset) >= 1) then
|
|
return bytes[offset+1];
|
|
end
|
|
|
|
return 999999999;
|
|
end
|
|
--[[
|
|
local function i2cBegin()
|
|
I2CDevice = I2CClass("/dev/i2c-1")
|
|
end
|
|
|
|
local function i2cRecvMsg()
|
|
local msg = {{
|
|
0x00, -- uint8_t hartbeat;
|
|
0x00, 0x00, 0x00, 0x00, -- int32_t data_32;
|
|
0x00, 0x00, 0x00, 0x00, -- int32_t data_32;
|
|
0x00, 0x00, 0x00, 0x00, -- int32_t data_32;
|
|
0x00, 0x00, 0x00, 0x00, -- int32_t data_32;
|
|
flags = I2CClass.I2C_M_RD
|
|
}}
|
|
I2CDevice:transfer(6, msg)
|
|
-- print(table.unpack(msg[1]));
|
|
return msg[1]
|
|
end
|
|
|
|
local function i2cSendMsg(cmd)
|
|
local msg = {{cmd, 0x00, 0x00, 0x00, 0x00, flags = 0}}
|
|
I2CDevice:transfer(4, msg)
|
|
end
|
|
--]]
|
|
local function recv()
|
|
--[[
|
|
daqData = i2cRecvMsg();
|
|
-- print(table.unpack(daqData));
|
|
daq.hartbeat = getUint8(daqData,0);
|
|
daq.sum0 = getInt32(daqData,1);
|
|
daq.sum1 = getInt32(daqData,5);
|
|
daq.sum2 = getInt32(daqData,9);
|
|
daq.sum3 = getInt32(daqData,13);
|
|
--]]
|
|
daq.hartbeat = 123;
|
|
daq.sum0 = 3;
|
|
daq.sum1 = 1.7;
|
|
daq.sum2 = 9;
|
|
daq.sum3 = 5.5;
|
|
end
|
|
|
|
function setup()
|
|
mqttBroker = app.mqttBroker[1]
|
|
mqttRoot = app.mqttRoot[1]
|
|
|
|
instance = HMI.App.instance;
|
|
layout = HMI.Layout(instance,32,24);
|
|
|
|
label = HMI.Label(layout,0,0,32,3,"Plot");
|
|
label:setTextColor(HMI.Color.white);
|
|
label:setBackground(HMI.Color.blue);
|
|
|
|
chart = HMI.Timechart(layout,0,4,32,16)
|
|
chart:setBaseline(0)
|
|
chart:setValuePerDivison(2)
|
|
chart:setSamplesPerDivison(20)
|
|
chart:setSamplesFormat("%d Samples/Div, Samplerate 0.5s <=> 10 Sekunden/Div")
|
|
|
|
txt0 = HMI.Label(layout, 1,20,6,2,"Ch 0");
|
|
txt0:getTextObject():setAlign(HMI.ALIGN_LEFT);
|
|
txt1 = HMI.Label(layout,17,20,6,2,"Ch 1");
|
|
txt1:getTextObject():setAlign(HMI.ALIGN_LEFT);
|
|
txt2 = HMI.Label(layout, 1,22,6,2,"Ch 2");
|
|
txt2:getTextObject():setAlign(HMI.ALIGN_LEFT);
|
|
txt3 = HMI.Label(layout,17,22,6,2,"Ch 3");
|
|
txt3:getTextObject():setAlign(HMI.ALIGN_LEFT);
|
|
|
|
out0 = HMI.Output(layout, 7,20,6,2,"0000");
|
|
out1 = HMI.Output(layout,23,20,6,2,"0000");
|
|
out2 = HMI.Output(layout, 7,22,6,2,"0000");
|
|
out3 = HMI.Output(layout,23,22,6,2,"0000");
|
|
|
|
updateTimer = Scheduler.Timer(500)
|
|
|
|
-- i2cBegin()
|
|
|
|
if mqttBroker then
|
|
errLog("MQTT:\t Begin\n");
|
|
MQTT.begin(mqttBroker)
|
|
end
|
|
|
|
MQTT.loop()
|
|
|
|
channel_0 = true;
|
|
channel_1 = true;
|
|
channel_2 = true;
|
|
channel_3 = true;
|
|
|
|
MQTT.publish(mqttRoot.."/status/analog/0", "on",true)
|
|
MQTT.publish(mqttRoot.."/status/analog/1", "on",true)
|
|
MQTT.publish(mqttRoot.."/status/analog/2", "on",true)
|
|
MQTT.publish(mqttRoot.."/status/analog/3", "on",true)
|
|
end
|
|
|
|
function loop()
|
|
MQTT.loop()
|
|
|
|
if updateTimer.elapsed() then
|
|
updateTimer.restart()
|
|
recv()
|
|
|
|
val0 = daq.sum0*0.0000707750682632
|
|
val1 = daq.sum1*0.0000707750682632
|
|
val2 = daq.sum2*0.0000208350713273
|
|
val3 = daq.sum3*0.0000208350713273
|
|
|
|
out0:setText(string.format("%5.2f",val0))
|
|
out1:setText(string.format("%5.2f",val1))
|
|
out2:setText(string.format("%5.2f",val2))
|
|
out3:setText(string.format("%5.2f",val3))
|
|
chart:plot(daq.sum0*0.0000707750682632)
|
|
--chart:plot(daq.sum1*0.0000707750682632)
|
|
--chart:plot(daq.sum2*0.0000208350713273)
|
|
--chart:plot(daq.sum3*0.0000208350713273)
|
|
|
|
compound = ""
|
|
|
|
if channel_0 then
|
|
MQTT.publish(mqttRoot.."/analog/0",val0)
|
|
compound = compound..",0:"..val0
|
|
end
|
|
if channel_1 then
|
|
MQTT.publish(mqttRoot.."/analog/1",val1)
|
|
compound = compound..",1:"..val1
|
|
end
|
|
if channel_2 then
|
|
MQTT.publish(mqttRoot.."/analog/2",val2)
|
|
compound = compound..",2:"..val2
|
|
end
|
|
if channel_3 then
|
|
MQTT.publish(mqttRoot.."/analog/3",val3)
|
|
compound = compound..",3:"..val3
|
|
end
|
|
all = string.sub(compound,2)
|
|
if string.len(all) > 0 then
|
|
MQTT.publish(mqttRoot.."/analog/all",all)
|
|
end
|
|
end
|
|
end
|
|
|
|
io.stderr:write("Run LUA\n");
|
|
|
|
--------------------------------------------------
|
|
|