Українська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 байт)

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



20201