Протокол обмена Adam-4019
Материал из WebHMI Wiki
Старые модели модулей ввода-вывода Adam компании Advantech (а также отдельные существующие модели) имеют только один вариант протокола - на основе команд ASCII. Ниже приведен пример протокола для чтения аналоговых сигналов модуля Adam-4019:
function createDevices ()
addDevice({name = "AI", shift = 0, base = 10, xtraFields = {1, 5}});
end
function readRegister (reg, device, unitId)
local CR = string.char(13) -- carriage return
local getAI_template = "#AAN"..CR -- forming template
-- replace address and channel from reg data
local getAIstring = string.gsub(getAI_template, "AA", string.format("%X",unitId))
DEBUG("now getAIstring = "..getAIstring)
getAIstring = string.gsub(getAIstring, "N", tostring(reg.internalAddr))
DEBUG("now getAIstring = "..getAIstring)
local sendFlag = sendString(getAIstring)
if not sendFlag then
DEBUG("Can't send string!")
return false
end
-- reading reply
local replyString = ""
local singleChar = ""
repeat
singleChar = readString(1)
if not singleChar then
DEBUG("Can't read char!")
return false
end
replyString = replyString..singleChar
until (singleChar == CR)
DEBUG("whole string = "..replyString)
return GetRealNumber(replyString)
end -- readRegister
function GetRealNumber(str)
DEBUG("Entered GetRealNumber")
local sign = 1
local sign_capture = ""
local value_capture = ""
_,_, sign_capture = string.find(str,"([+-])")
DEBUG("sign_capture = "..sign_capture)
if sign_capture == "-" then
sign = -1
end
_,_, value_capture = string.find(str,"^>[+-](%d+.%d+)")
DEBUG("value captured = "..value_capture)
return tonumber(value_capture)*sign
end
function writeRegister (reg, device, unitId, newValue)
-- Add your code here
end
function onScanStart ()
-- Add your code here
end