From OpenSCADAWiki
Jump to: navigation, search

Функции объекта исходящего транспорта (SYS.Transport["Modul"]["out_Transp"]):

  • ElTp cfg(string nm) — получение значения конфигурационного поля nm объекта.
  • bool cfgSet(string nm, ElTp val) — установка конфигурационного поля nm объекта в значение val.
  • string status() — статус транспорта.
  • bool start( bool vl = <EVAL>, int tm = 0 ) — возвращает статус исполнения, запускает/останавливает по vl (если не <EVAL>). Для запуска можно указывать особый таймаут tm.
  • string addr( string vl = "" ) — возвращает адрес транспорта, устанавливает в непустое значение vl.
  • string timings( string vl = "" ) — возвращает тайминги транспорта, устанавливает в непустое значение vl.
  • string messIO( string mess, real timeOut = 0, int inBufLen = -1 ); — отправка сообщения mess через транспорт с таймаутом ожидания ответа timeOut (в секундах) и чтение ответа (буфера) размером inBufLen байт. В случае нулевого таймаута это время берётся из настроек исходящего транспорта. Отрицательное время timeOut (< -1e-3) отключает работу транспорта в режиме запрос/ответ и позволяет независимо читать/писать в буфер ВВ, с таймаутом чтения timeOut, в абсолютном значении. Для отрицательного inBufLen размер буфера устанавливается в STR_BUF_LEN(10000), а "0" выключает чтение вообще.
    At.png Если Ваш транспорт в ответ на запрос подразумевает получение данных частями тогда используйте эту функцию в одном потоке для нескольких устройств на одной шине-транспорте поскольку здесь не существует способа блокирования транспорта из пользовательского API. Один поток это объект контроллера подсистемы "Сбор данных", а модуль "Протокол пользователя" блокирует транспорт внутри перед выполнением своих пользовательских процедур.
    rez = SYS.Transport.Serial.out_ttyUSB0.messIO(SYS.strFromCharCode(0x4B,0x00,0x37,0x40),0.2);
    //Wait for all the message tail by timeout and empty result
    while((trez=SYS.Transport.Serial.out_ttyUSB0.messIO("")).length) rez += trez; 
  • string messIO( XMLNodeObj req, string prt ); — отправка запроса req к протоколу prt для осуществления сеанса связи через транспорт посредством протокола.
    req = SYS.XMLNode("TCP");
    req.setAttr("id","test").setAttr("reqTm",500).setAttr("node",1).setAttr("reqTry",2).setText(SYS.strFromCharCode(0x03,0x00,0x00,0x00,0x05));
    SYS.Transport.Sockets.out_testModBus.messIO(req,"ModBus");
    test = Special.FLibSYS.strDec4Bin(req.text());