Сообщение создано: 30. 04. 2017 [14:45]
|
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
|
using Special.FLibSYS;
using Special.FLibSYS;
tSysTime = tmTime();
sSysTime = tmFStr(tSysTime,"%Y-%m-%d %H:%M:%S"); // STRING
TimeZone = (strSubstr(tmFStr(tSysTime,"%z"),1,2)).toInt();
SysTime = tSysTime + TimeZone * 3600; // UNIX
hb = (SysTime >> 16)&65535;
lb = (SysTime >> 0)&65535;
R1 = R2 = R3 = R4 = R5 = R6 = R7 = R8 = R9 = R10 = R11 = R12 = R13 = R14 = R15 = R16 = R17 = R18 = R19 = R20 = R21 = R22 = R23 = R24 = R25 = R26 = R27 = R28 = R29 = R30 = R31 = R32 = R33 = R34 = R35 = R36 = R37 = R38 = R39 = R40 = R41 = R42 = R43 = 0;
R1 = lb;
R2 = hb;
pc = SYS.strFromCharCode(0x10, 0x00, 0x01, 0x00, 0x02, 0x04, (R1>>8)&255, (R1>>0)&255, (R2>>8)&255, (R2>>0)&255);
req = SYS.XMLNode("TCP");
req.setAttr("id","dm1").setAttr("reqTm",500).setAttr("node",1).setAttr("reqTry",2).setText(pc);
SYS.Transport.Sockets.out_dm1.messIO(req,"ModBus");
Следующий кусок кода рабочий и записывает в 1 и 2 ModBus регистры текущее время (разбитый DWORD на 2 WORD-а). Если делать запись всех 43 регистров, то код существенно увеличиться и поэтому у меня возникло несколько вопросов:
1) существует ли, в OpenSCADA встроенная функция для записи нескольких ModBusTCP регистров (16 функция), в которой нужно будет только указать: ModBus адрес устройства и перечислить регистры (или указать массив регистров)? Интересует запись с DAQ.LogicLev.контроллер.параметр, с используемого им шаблона
2) можно ли в качестве перечня байтов, в функции strFromCharCode, указать массив байтов (strFromCharCode(arrBaytes))? если нет, то подскажите как преобразовать массив регистров в строку состоящую из кодов символов.
|
Сообщение создано: 01. 05. 2017 [09:19]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"monia" wrote:
1) существует ли, в OpenSCADA встроенная функция для записи нескольких ModBusTCP регистров (16 функция), в которой нужно будет только указать: ModBus адрес устройства и перечислить регистры (или указать массив регистров)? Интересует запись с DAQ.LogicLev.контроллер.параметр, с используемого им шаблона
Смотрю Вы не только документации не читаете, но и простых путей не ищите!
http://wiki.oscada.org/Doc/ModBus#h592-13
"monia" wrote:
2) можно ли в качестве перечня байтов, в функции strFromCharCode, указать массив байтов (strFromCharCode(arrBaytes))? если нет, то подскажите как преобразовать массив регистров в строку состоящую из кодов символов.
Документацию читайте!
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 01. 05. 2017 [19:55]
|
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
|
Сори за беспокойства :). Забыл отписаться, что свою проблему решил
|