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

Добавление шапки к протоколу ModBus


Автор Сообщение
Сообщение создано: 25. 08. 2015 [09:11]
uvv0
Усов Владимир
Создатель темы
Зарегистрирован(а) с: 12.08.2015
Сообщения: 5
У нас в конторе используется Modbus через радиоканал и UDP шлюзы При этом программы добавляют шапку к ModBus в которой записан маршрут.адрес подобно TCP Modbus. Дорогие форумчане может кто нибудь добавлял при передаче шапку ,а при приеме убирал ее.Хочется все таки воспользоваться встроенным ModBus ,а не городить на каждую команду пользовательский протокол .
Сообщение создано: 25. 08. 2015 [10:03]
fido_max
Maxim Kochetkov
Contributor
Зарегистрирован(а) с: 28.10.2010
Сообщения: 129
"uvv0" wrote:

У нас в конторе используется Modbus через радиоканал и UDP шлюзы При этом программы добавляют шапку к ModBus в которой записан маршрут.адрес подобно TCP Modbus. Дорогие форумчане может кто нибудь добавлял при передаче шапку ,а при приеме убирал ее.Хочется все таки воспользоваться встроенным ModBus ,а не городить на каждую команду пользовательский протокол .


Собрать такую схему:
ModBus->Исходящий транспорт в сокет на 127.0.0.1:1000
Входящий транспорт сокет 127.0.0.1:1000->Пользовательский протокол->Исходящий транспорт в ваш модем

Пользовательский протокол будет принимать модбас запрос, добавлять к нему заголовки и отправлять дальше, ждать ответ, отрезать заголовки и возвращать в модбас.
Сообщение создано: 25. 08. 2015 [10:36]
uvv0
Усов Владимир
Создатель темы
Зарегистрирован(а) с: 12.08.2015
Сообщения: 5
Спасибо
Сообщение создано: 03. 09. 2015 [15:06]
uvv0
Усов Владимир
Создатель темы
Зарегистрирован(а) с: 12.08.2015
Сообщения: 5
Сделал предложенную схему
sh = new Array();
sh = SYS.DAQ.JavaLikeCalc.lib_sh.sh1("f1");//получение шапки
test5="";
for(i=0;i<22;i++){
test5 += SYS.strFromCharCode(sh[i]);//добавление шапки
}
test5+=request;
test2=SYS.Transport.Sockets.out_u2.messIO(test5);
while(true)
{
test3 = SYS.Transport.Sockets.out_u2.messIO("");
if( !test3.length ) break;
test2+=test3;
}
test5="";
for(i=0;i<test2.length-10;i++) //отрезание шапки
test5+=test2[10+i];
answer = test5;
return 0;

Теперь при увеличении количества контроллеров ModBus надо узнать какой контроллер делает запрос и как надо настроить шапку.
В свойствах контроллеров ModBus не нашел признака активности (делающего запрос в текущий момент).
Может есть какой то способ узнать какой контроллер опрашивает?
Сообщение создано: 03. 09. 2015 [16:27]
fido_max
Maxim Kochetkov
Contributor
Зарегистрирован(а) с: 28.10.2010
Сообщения: 129
"uvv0" wrote:

Теперь при увеличении количества контроллеров ModBus надо узнать какой контроллер делает запрос и как надо настроить шапку.
В свойствах контроллеров ModBus не нашел признака активности (делающего запрос в текущий момент).
Может есть какой то способ узнать какой контроллер опрашивает?

В request же лежит адрес контроллера, которому предназначается запрос.
MODBUS TCP - 6 байт (с нуля)
MODBUS RTU - 0 байт
MODBUS ASCII - 0 байт
Сообщение создано: 04. 09. 2015 [09:06]
uvv0
Усов Владимир
Создатель темы
Зарегистрирован(а) с: 12.08.2015
Сообщения: 5
На модемах адреса MODBUS одинаковы если к модему подключено 1 устройство (меняется только шапка )
или к модему подключено несколько устройств тогда еще меняется и адрес (0 байт)
Сообщение создано: 04. 09. 2015 [09:16]
uvv0
Усов Владимир
Создатель темы
Зарегистрирован(а) с: 12.08.2015
Сообщения: 5
Другой вариант можно ли перед подачей запроса выполнить подпрограмму (где поменять 1 значение )
Сообщение создано: 04. 09. 2015 [09:53]
fido_max
Maxim Kochetkov
Contributor
Зарегистрирован(а) с: 28.10.2010
Сообщения: 129
"uvv0" wrote:

На модемах адреса MODBUS одинаковы если к модему подключено 1 устройство (меняется только шапка )
или к модему подключено несколько устройств тогда еще меняется и адрес (0 байт)

А в чем проблема сделать их разными?



6512