Сообщение создано: 08. 12. 2014 [14:22]
|
igkondrat
Игорь Кондрат
Создатель темы
Зарегистрирован(а) с: 04.12.2014
Сообщения: 4
|
Добрый день,
Столкнулся с одной проблемой, которая проявила себя в версии 0.8.0.10, в 0.8.0.4 проблем нет.
Суть проблемы -
Создал пользовательский протокол для счетчиков Меркурий 230. Сам протокол 'modbus-подобный'.
Для снятия показаний для начала необходимо авторизоваться (в моем случае код 111111)
Так выглядит запрос -
using Special.FLibSYS;
req = SYS.XMLNode("RTU");
req.setAttr("reqTm",1000).setAttr("node",190).setAttr("reqTry",2);
req.setText(Special.FLibSYS.strEnc2Bin("01 01 01 01 01 01 01 01"));
SYS.Transport.Serial.out_moxa_2_213.messIO(req,"ModBus");
Запрос -> be 01 01 01 01 01 01 01 01 0e 26
Ошибка -> 13:Ошибка ответа -> be 00 70 10
Т.е. ответ приходит (значение — 00 ), что означает - доступ разрешен.
Далее хочу получить энергию -
//Энергия по сумме фаз
req.setText(Special.FLibSYS.strEnc2Bin("05 00 00"));
SYS.Transport.Serial.out_moxa_2_213.messIO(req,"ModBus");
answer=Special.FLibSYS.strDec4Bin(req.text()).match("[0-9a-fA-F][0-9a-fA-F]","g");
Apos=(((answer[1].insert("2",answer[0])).insert("4",answer[3])).insert("6",answer[2])).toInt(16)/1000;
Rpos=(((answer[9].insert("2",answer[8])).insert("4",answer[11])).insert("6",answer[10])).toInt(16)/1000;
Запрос -> be 05 00 00 34 0d
Ошибка -> 1:2A:Функция не поддерживается. -> be aa 01 6c 47 ff ff ff ff 53 00 85 af ff ff ff
ff 5c f5
Как видно ответ все же приходит, но с ошибкой и соответственно я не могу разобрать ответ - «aa 01 6c 47» (Из них читается так 2-1-4-3 байты)
При запросе частоты, ответ без ошибки -
req.setText(Special.FLibSYS.strEnc2Bin("08 11 40"));
SYS.Transport.Serial.out_moxa_2_213.messIO(req,"ModBus");
answer=Special.FLibSYS.strDec4Bin(req.text()).match("[0-9a-fA-F][0-9a-fA-F]","g");
Frq=((answer[0].insert("2",answer[2])).insert("4",answer[1])).toInt(16);
Запрос -> be 08 11 40 a8 6e
Ответ -> be 00 87 13 06 31
Можно ли как нибудь игнорировать ошибку в ответе?
P.S.
При отправке запроса через Транспорты → Последовательный интерфейс → Выходной транспорт ошибок нет...
|
Сообщение создано: 08. 12. 2014 [17:46]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"igkondrat" wrote:
Столкнулся с одной проблемой, которая проявила себя в версии 0.8.0.10, в 0.8.0.4 проблем нет.
На дворе давно 0.8.11!
"igkondrat" wrote:
Запрос -> be 01 01 01 01 01 01 01 01 0e 26
Ошибка -> 13:Ошибка ответа -> be 00 70 10
Слишком короткий PDU.
"igkondrat" wrote:
Запрос -> be 05 00 00 34 0d
Ошибка -> 1:2A:Функция не поддерживается. -> be aa 01 6c 47 ff ff ff ff 53 00 85 af ff ff ff
ff 5c f5
Реально ошибка, согласно спецификации ModBus.
"igkondrat" wrote:
Можно ли как нибудь игнорировать ошибку в ответе?
Нельзя и не нужно натягивать на ModBus/RTU то, что таким по определению не является!
Пишите отдельную реализацию запросов.
Learn, learn and learn better than work, work and work.
|