День добрый, пытаюсь считать значения входов МВА8 использую протокол DCON проблема с контрольной суммой, подскажите плиз по какому алгоритму она рассчитывается?
День добрый, пытаюсь считать значения входов МВА8 использую протокол DCON проблема с контрольной суммой, подскажите плиз по какому алгоритму она рассчитывается?
2 алгоритма. Либо сумма всех символов, либо 8-битная CRC по алгоритму Dallas-semiconductors (используется в 1-wire)
Большое спасибо. И еще один вопрос, символ # и завершающий (/х0D) в расчет не берутся?
Последний раз редактировалось Vitto; 23.02.2009 в 06:09.
Скажите, а результат применения обоих этих алгоритмов разве будет один и тот же?
Вот немного непонятно тут, ведь контрольная сумма проверяется при получении на устройстве slave и если она не совпадает с указанной в пакете, то пакет просто игнорируется. Значит master каким-то образом сообщает slave'ам, по какому алгоритму он рассчитывает контрольную сумму. Сообщать slave'ам об используемом алгоритме не требуется только в случае, если результат применения обоих алгоритмов будет одинаковым.
Последний раз редактировалось light_finder; 04.03.2009 в 19:03.
я пока сам не полез в мануал, ничего из ответов форумчан не понял))
по-простому: перевести все символы в код ASCII, а потом всё просуммировать (возврат каретки не суммировать)
Если получился результат в котором три цифры, взять последние две цифры.
Пример.
КОД: @10FF (это замкнуть все выхода на релле МВ110-8Р)
@ - 40
1 - 31
0 - 30
F - 46
имеем: 40+31+30+46+46 = 12D. Контрольная сумма 2D
Итого: @10FF2D
Если в сумме двухзначное число, брать двухзначное.
Это под делфи (Delphi)...
Начальный символ берётся, 0x0D нет.
На будещее. Вдруг кто искать будет
addrHex$ - адрес в HEX
в итоге в chkSumHex$ будем иметь контрольную суммуКод:For i = 1 To Len(addrHex$) chkSumInt = chkSumInt + Asc(Mid(addrHex$, i)) Next i chkSumHex$ = Hex(chkSumInt Mod 256)
Ок. Большое всем спасибо! Буду пробовать.
Всем день добрый. Все-таки решил работать с МВА8 по modbus. Все заработала с полпинка ))). Но теперь у меня другая проблема. Для начала приведу схему подключения МВА8 к SCADA системе в диспетчерской. МВА8(485)->(TCP/IP)GPRS->Internet<-диспетчер. Т.е. пишу сервер сбора данных расположенный на стороне диспетчера. Суть проблемы в том, что мне нужно идентифицировать МВА при первом его подключении. К примеру, у многих железяк есть возможность считать заводской номер и привязаться к нему. В случае с МВА придется отправлять запрос на чтение с перебором сетевого адреса. А это лишний трафик, да и время теряется… Может, у кого есть какие либо соображения по данной проблеме?
Так заводской номер все равно надо читать с какого-то адреса. Может можно отвести под МВА заранее известные адреса и пользоваться только ими.