Протокол обмена 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