УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

Отправка ModBusTCP с логического уровня


Автор Сообщение
Сообщение создано: 30. 04. 2017 [14:45]
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
JAVASCRIPT
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
Сори за беспокойства :). Забыл отписаться, что свою проблему решил



2838