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());