EnglishУкраїнськаРocсийский
Login/New
Topic with no new replies

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


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

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


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

Пользовательский протокол будет принимать модбас запрос, добавлять к нему заголовки и отправлять дальше, ждать ответ, отрезать заголовки и возвращать в модбас.
Written on: 25. 08. 2015 [10:36]
uvv0
Усов Владимир
Topic creator
registered since: 12.08.2015
Posts: 5
Спасибо
Written on: 03. 09. 2015 [15:06]
uvv0
Усов Владимир
Topic creator
registered since: 12.08.2015
Posts: 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 не нашел признака активности (делающего запрос в текущий момент).
Может есть какой то способ узнать какой контроллер опрашивает?
Written on: 03. 09. 2015 [16:27]
fido_max
Maxim Kochetkov
Contributor
registered since: 28.10.2010
Posts: 129
"uvv0" wrote:

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

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

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

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



12158