PDA

Просмотр полной версии : Контрольная сумма DCON



Vitto
22.02.2009, 19:53
День добрый, пытаюсь считать значения входов МВА8 использую протокол DCON проблема с контрольной суммой, подскажите плиз по какому алгоритму она рассчитывается?

Филоненко Владислав
22.02.2009, 21:41
2 алгоритма. Либо сумма всех символов, либо 8-битная CRC по алгоритму Dallas-semiconductors (используется в 1-wire)

Vitto
23.02.2009, 06:01
Большое спасибо. И еще один вопрос, символ # и завершающий (/х0D) в расчет не берутся?

Филоненко Владислав
24.02.2009, 09:40
Начальный символ берётся, 0x0D нет.

SKiT
24.02.2009, 12:14
На будещее. Вдруг кто искать будет

addrHex$ - адрес в HEX


For i = 1 To Len(addrHex$)

chkSumInt = chkSumInt + Asc(Mid(addrHex$, i))

Next i

chkSumHex$ = Hex(chkSumInt Mod 256)

в итоге в chkSumHex$ будем иметь контрольную сумму

Vitto
24.02.2009, 14:55
Ок. Большое всем спасибо! Буду пробовать.

Vitto
26.02.2009, 13:48
Всем день добрый. Все-таки решил работать с МВА8 по modbus. Все заработала с полпинка ))). Но теперь у меня другая проблема. Для начала приведу схему подключения МВА8 к SCADA системе в диспетчерской. МВА8(485)->(TCP/IP)GPRS->Internet<-диспетчер. Т.е. пишу сервер сбора данных расположенный на стороне диспетчера. Суть проблемы в том, что мне нужно идентифицировать МВА при первом его подключении. К примеру, у многих железяк есть возможность считать заводской номер и привязаться к нему. В случае с МВА придется отправлять запрос на чтение с перебором сетевого адреса. А это лишний трафик, да и время теряется… Может, у кого есть какие либо соображения по данной проблеме?:)

Илья Глан
26.02.2009, 17:52
Так заводской номер все равно надо читать с какого-то адреса. Может можно отвести под МВА заранее известные адреса и пользоваться только ими.

Vitto
26.02.2009, 18:41
С теплосчетчиками мы сделали проще, каждый тип цеплялся на свой порт. Затем, согласно внутреннего протокола, отправляли запрос или на получение серийного номера, или еще какого либо уникального параметра. С МВА планирую так, один порт, по подключению отправляю запрос на чтение какого либо параметра с перебором сетевого адреса. Только вот много их ))))) Я игрался с 0 адресом но МВА молчит, как партизан))))

Филоненко Владислав
26.02.2009, 19:33
А 1 раз забить таблицу адрес - какой МВА нельзя?

Vitto
26.02.2009, 19:55
Можно конечно. Я же про это и говорю… Сервер открыл порт. МВА стали подключаться. Сервер отправляет на каждый МВА запрос с перебором существующих адресов МВА (из базы). Но среда GPRS и задержки могут доходить до пяти секунд. И вот этот первый момент подключения напрягает….

SKiT
03.03.2009, 12:51
По любому решение есть =)) хоть и тупое :)

МВА может рабоать как модуль дискретного ввода. Задействова первую пару каналов можно с помощью перемычек выставить уникальное значение и, прочитав сперва его, опрашивать модуль =)

Но это я просто фантазирую :)

Vitto
03.03.2009, 20:17
Спасибо 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
ссспасибо)

Doomnik
13.06.2012, 22:59
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 прикрепил к письму.