Author |
Message |
Written on: 16. 03. 2011 [09:58]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"almaz" wrote:
Думаете есть смысл проверять контрольную сумму при неверной длине пакета? Ошибка длины пакета приоритетнее ошибки CRC.
Уверен. Критерием завершённости пакета является '\r' и он проверяется в первую очередь. Критерием целостности является CRC, и он следующий. А размер это ожидаемая длина пакета при корректном результате. При результате с признаком ошибки этот размер иной, но это ни разу не ошибка доставки пакета! А значит CRC должен быть перед ним.
Learn, learn and learn better than work, work and work.
|
Written on: 16. 03. 2011 [10:07]
|
almaz
Almaz Karimov
Contributor
Topic creator
registered since: 25.09.2008
Posts: 516
|
Длина пакета более приоритетный критерий целостности этого пакета.
При неверной длине ответа проверка CRC заведомо даст ошибку, поэтому проверка CRC до проверки длины не имеет смысла.
[This article was edited 2 times, at last 16.03.2011 at 10:10.]
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Written on: 16. 03. 2011 [10:20]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"almaz" wrote:
При неверной длине ответа проверка CRC заведомо даст ошибку, поэтому проверка CRC до проверки длины не имеет смысла.
С чего вдруг? Если это ответ '!' у него нет CRC?
Learn, learn and learn better than work, work and work.
|
Written on: 16. 03. 2011 [10:28]
|
almaz
Almaz Karimov
Contributor
Topic creator
registered since: 25.09.2008
Posts: 516
|
CRC есть (случай без CRC не рассматриваем). И длина ответа должна составлять 3 байта. При верной длине имеет смысл последующая проверка CRC, при неверной - нет (ни до, ни после).
[This article was edited 1 times, at last 16.03.2011 at 10:31.]
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Written on: 16. 03. 2011 [10:53]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"almaz" wrote:
И длина ответа должна составлять 3 байта.
Какого ответа? Корректного ответа с данными будет 10, а с признаком ошибки 3. Что Вы в таком случае сравните? И получите ошибку размера, хотя для признака ошибки это иное.
Кроме того, проблем с проверкой CRC для двух последних символов ни в одном из случаев не будет.
Learn, learn and learn better than work, work and work.
|
Written on: 16. 03. 2011 [12:25]
|
almaz
Almaz Karimov
Contributor
Topic creator
registered since: 25.09.2008
Posts: 516
|
Для некоторых ответов (c 2 возможными длинами) выполнял проверку на две верные длины. Передача acq_len в DCONReq получается была не нужна. В DCONReq достаточно проверить чтобы длина была не менее 2 и последний символ \r.
В текущем коде маловероятно появление ошибки длины пакета, так как вместо этой ошибки всегда будет выходить ошибка CRC. Раз настаиваете - менять не буду. Просто надо будет знать, что при помехах в сети выдаваемая ошибка CRC может означать и ошибку длины.
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Written on: 16. 03. 2011 [12:29]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"almaz" wrote:
В текущем коде маловероятно появление ошибки длины пакета, так как вместо этой ошибки всегда будет выходить ошибка CRC. Раз настаиваете - менять не буду. Просто надо будет знать, что при помехах в сети выдаваемая ошибка CRC может означать и ошибку длины.
Не будет. Предлагаю оставить решение этого спора временем. :)
Learn, learn and learn better than work, work and work.
|
Written on: 16. 03. 2011 [12:53]
|
almaz
Almaz Karimov
Contributor
Topic creator
registered since: 25.09.2008
Posts: 516
|
Ну да. Важно же, чтобы данные шли в дальнейшую обработку и важен сам факт наличия ошибки. Лишь бы птинцы средьмаша не просекли. :D
[This article was edited 1 times, at last 16.03.2011 at 12:59.]
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Written on: 16. 03. 2011 [17:01]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"almaz" wrote:
Ну да. Важно же, чтобы данные шли в дальнейшую обработку и важен сам факт наличия ошибки. Лишь бы птинцы средьмаша не просекли. :D
Собственно написал в Protocol.SelfUser код эмуляции модуля 8AI и проверил работоспособность основных алгоритмов. Некоторые вещи поправил. Все ошибки корректно обрабатываются и это уже проверено. Позже, по мере нахождения информации по запросам различных модулей проверю остальное.
Код 8AI в Protocol.SelfUser такой:
SYS.messDebug("TEST REQ: ",request);
answer = ">+05.123+04.153+07.234-02.356+10.000-05.133+02.345+08.234";
//answer = ">+04.153+07.234-02.356+10.000-05.133+02.345+08.234";
//answer = "?";
CRC = 0;
for(i=0;i<answer.length;i++) CRC += answer.charCodeAt(i);
answer += (CRC&0xFF).toString(16)+"\r";
SYS.messDebug("TEST ANSV: "+answer.charCodeAt(0),answer);
return 0;
Learn, learn and learn better than work, work and work.
|
Written on: 16. 03. 2011 [17:15]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
Кстати, я тут подумал, что имело-бы смысл для модулей на DCON, которые есть в наличии, писать шаблоны с реализацией расширенной поддержки, включая всякие калибровки, установки сторожевых таймеров, установки безопасных значений, установки регламентных границ и т.д. А затем помещать их в библиотеку шаблонов, тем самым формируя её.
Чем удобно, что элементы можно в любой момент дополнить и на основе их создавать новые прямо в JavaLikeCalc.
Learn, learn and learn better than work, work and work.
|