Просмотр полной версии : Контрольная сумма DCON
День добрый, пытаюсь считать значения входов МВА8 использую протокол DCON проблема с контрольной суммой, подскажите плиз по какому алгоритму она рассчитывается?
Филоненко Владислав
22.02.2009, 21:41
2 алгоритма. Либо сумма всех символов, либо 8-битная CRC по алгоритму Dallas-semiconductors (используется в 1-wire)
Большое спасибо. И еще один вопрос, символ # и завершающий (/х0D) в расчет не берутся?
Филоненко Владислав
24.02.2009, 09:40
Начальный символ берётся, 0x0D нет.
На будещее. Вдруг кто искать будет
addrHex$ - адрес в HEX
For i = 1 To Len(addrHex$)
chkSumInt = chkSumInt + Asc(Mid(addrHex$, i))
Next i
chkSumHex$ = Hex(chkSumInt Mod 256)
в итоге в chkSumHex$ будем иметь контрольную сумму
Ок. Большое всем спасибо! Буду пробовать.
Всем день добрый. Все-таки решил работать с МВА8 по modbus. Все заработала с полпинка ))). Но теперь у меня другая проблема. Для начала приведу схему подключения МВА8 к SCADA системе в диспетчерской. МВА8(485)->(TCP/IP)GPRS->Internet<-диспетчер. Т.е. пишу сервер сбора данных расположенный на стороне диспетчера. Суть проблемы в том, что мне нужно идентифицировать МВА при первом его подключении. К примеру, у многих железяк есть возможность считать заводской номер и привязаться к нему. В случае с МВА придется отправлять запрос на чтение с перебором сетевого адреса. А это лишний трафик, да и время теряется… Может, у кого есть какие либо соображения по данной проблеме?:)
Илья Глан
26.02.2009, 17:52
Так заводской номер все равно надо читать с какого-то адреса. Может можно отвести под МВА заранее известные адреса и пользоваться только ими.
С теплосчетчиками мы сделали проще, каждый тип цеплялся на свой порт. Затем, согласно внутреннего протокола, отправляли запрос или на получение серийного номера, или еще какого либо уникального параметра. С МВА планирую так, один порт, по подключению отправляю запрос на чтение какого либо параметра с перебором сетевого адреса. Только вот много их ))))) Я игрался с 0 адресом но МВА молчит, как партизан))))
Филоненко Владислав
26.02.2009, 19:33
А 1 раз забить таблицу адрес - какой МВА нельзя?
Можно конечно. Я же про это и говорю… Сервер открыл порт. МВА стали подключаться. Сервер отправляет на каждый МВА запрос с перебором существующих адресов МВА (из базы). Но среда GPRS и задержки могут доходить до пяти секунд. И вот этот первый момент подключения напрягает….
По любому решение есть =)) хоть и тупое :)
МВА может рабоать как модуль дискретного ввода. Задействова первую пару каналов можно с помощью перемычек выставить уникальное значение и, прочитав сперва его, опрашивать модуль =)
Но это я просто фантазирую :)
Спасибо SKiT. Выход нашел... Идентифицирую не МВА, а GPRS железяку :)
light_finder
04.03.2009, 18:57
2 алгоритма. Либо сумма всех символов, либо 8-битная CRC по алгоритму Dallas-semiconductors (используется в 1-wire)
Скажите, а результат применения обоих этих алгоритмов разве будет один и тот же?
Вот немного непонятно тут, ведь контрольная сумма проверяется при получении на устройстве slave и если она не совпадает с указанной в пакете, то пакет просто игнорируется. Значит master каким-то образом сообщает slave'ам, по какому алгоритму он рассчитывает контрольную сумму. Сообщать slave'ам об используемом алгоритме не требуется только в случае, если результат применения обоих алгоритмов будет одинаковым.
Филоненко Владислав
04.03.2009, 19:32
Нет, естественно. Есть 2 типа контрольных сумм.
Не мастер slavе-ам, а программист в программе/конфигурации мастера, изучив руководства приборов (slave) и соответствующим образом их настроив! :)
light_finder
04.03.2009, 19:46
То есть вначале надо настроить slave'ы, а потом уже настроить master'a, написав в программе/сконфигурировав использование соответствующего алгоритма?
Вот я читал руководство для своего МДВВ, конечно, наизусть я его не выучил, но что-то не припомню, чтобы там было что-то сказано о том, как настроить правила вычисления контрольных сумм для протокола DCON..
ps А где можно найти хотя бы наиболее распространенные посылки по протоколе DCON на чтение/запись параметров (кроме тех, которые приведены в руководстве к приборам)?
Филоненко Владислав
04.03.2009, 23:07
1. MDBB, насколько я помню, работает только с контрольной суммой сложения.
2. Рекомендую ICP-7ххх серию изучить. Но стандарта нет, все делают что в голову взбредёт.
light_finder
05.03.2009, 17:24
ссспасибо)
2 алгоритма. Либо сумма всех символов, либо 8-битная CRC по алгоритму Dallas-semiconductors (используется в 1-wire)
я пока сам не полез в мануал, ничего из ответов форумчан не понял))
по-простому: перевести все символы в код ASCII, а потом всё просуммировать (возврат каретки не суммировать)
Если получился результат в котором три цифры, взять последние две цифры.
Пример.
КОД: @10FF (это замкнуть все выхода на релле МВ110-8Р)
@ - 40
1 - 31
0 - 30
F - 46
имеем: 40+31+30+46+46 = 12D. Контрольная сумма 2D
Итого: @10FF2D
Если в сумме двухзначное число, брать двухзначное.
Это под делфи (Delphi)...
Roke_Alva
22.01.2018, 17:15
Здравствуйте. Сейчас работаю с измерительным модулем МЭ110-224.1М и ПЛК100. Использую DCON. По умолчанию МЭ110 имеет адрес 16. Таким образом исходя их того что написано в руководстве пользователя и в этой теме я пишу в поле запроса: #1690(cr). Мне не совсем понятно, что писать в поле ответа в качестве данных и контрольной суммы. Предполагаю, что данные должны быть записаны в таком виде: 13f, то есть 13 символов (в руководстве сказано, что их именной 13), а f - тип данных с плавающей точкой (правда не понятно с большой или маленькой буквы). Контрольную сумму ставлю как СА, если f маленькая. Получается >13fСА(cr). В каналах Last erorr и Status при этом отображаются ошибки о неправильном формате запроса и ответа. Подскажите пожалуйста, что не так?
Сергей Лысов
23.01.2018, 14:30
Использую DCON. По умолчанию МЭ110 имеет адрес 16...я пишу в поле запроса: #1690(cr). Мне не совсем понятно, что писать в поле ответа в качестве данных и контрольной суммы...должны быть записаны в таком виде: 13f, то есть 13 символов (в руководстве сказано, что их именной 13), а f - тип данных с плавающей точкой (правда не понятно с большой или маленькой буквы). Контрольную сумму ставлю как СА, если f маленькая. Получается >13fСА(cr). В каналах Last erorr и Status при этом отображаются ошибки о неправильном формате запроса и ответа. Подскажите пожалуйста, что не так?
В протоколе DCON адрес вводят в формате HEX. Плюс контрольную сумму можно формировать автоматически через [+]. Символ "f" с маленькой буквы. Если интересно почему так, вот коротки разбор протокола: ссылка (http://www.bookasutp.ru/Chapter2_10.aspx)
Если нужно прочитать значение параметра в формате float, то:
Request Format: #10[+]
Good Response Format: >[13f]
На вашем месте я бы пользовался протоколом Modbus, он проще и поддерживается большинством производителей оборудования. Пример работы по Modbus прикрепил к письму.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot