PDA

Просмотр полной версии : МСД-200 обмен данных в среде Delphi 7 по Modbus.



Friencis
12.08.2013, 07:14
Здравствуйте.

Я пытаюсь реализовать обмен данными между ПК и прибором МСД-200 в среде Delphi 7 по Modbus. Анализируя посылки запрос-ответ с конфигуратором, определил способы посылок и ожидаемых ответов. Далее, при анализе ответов заметил комбинацию байтов "0h, 40h", предшествующие четырём байтам полезных данных.
Вопрос: является ли данная комбинация сепаратором для нахождения искомых данных и корректно ли будет их использовать? И вообще, где найти информацию по данной теме?

Спасибо.

capzap
12.08.2013, 07:17
модбас открытый протокол, по чему идете какими то окольными путями, начните хотя бы с этого сайта http://ru.wikipedia.org/wiki/Modbus и далее по ссылкам найдете исходники или готовые библиотеки

Friencis
12.08.2013, 13:27
С протоколом Modbus проблем нет. Вопрос конкретно по прибору МСД-200. Анализируя обмен запрос-ответ между прибором МСД-200 и конфигуратором выявил такую последовательность. Первый запрос: C903200000785E60, где C9h- адрес МСД, 03h- команда, 2000h- начальный регистр, 0078h- кол-во считываемых слов, 5E60h- контрольная сумма. Ответ такой: C9, 03, F0, 00, 40, 41, CF, E4... 55, 80. Последовательность 00, 40 предшествует полю данных. Так вот вопрос в том, является ли это абсолютной закономерностью и следует ли использовать данную комбинацию в качестве признака начала поля данных?

Следующие посылки, посылаемые конфигуратором: 2) C90320780048DE6D; 3) C90320C000131FB3. Таким образом за три запроса опрашивается всё адресное пространство, чтобы не обращаться к каждому прибору (ТРМ201) по-отдельности.

capzap
12.08.2013, 15:26
мне всё равно не понятно в чем у Вас трудности, вы после байт C9, 03, F0 получаете 242 байта или нет? если все согласно протоколу, то первое слово данных у Вас содержит число 64

Friencis
13.08.2013, 06:59
На что ориентироваться, выделяя последующие блоки данных в ответной посылке? Как будет «правильней», корректнее?

capzap
13.08.2013, 07:33
не понятно, на пальцах объясните (в картинках или еще как), мне вот кажется у Вас первое снимаемое значение равно 25,8751220703125 градусов

Friencis
13.08.2013, 10:13
Да, так и есть, 25,9°.
Допустим, стоит подряд три прибора ТРМ201. Строка ответа будет выглядеть так: C9, 03, F0, 00, 40, 41, D0, 1A, 27, 00, 40, 41, D0, 1A, 27, 00, 40, 41, D0, 1A, 27 ... CRC. Несмотря на то, что номера приборов идут подряд один за другим, между блоками данных присутствуют последовательности 00h, 40h. Вопрос в том, несут ли они однозначную смысловую нагрузку и следует ли рассматривать эту пару байтов как сепаратор между показаниями соседних приборов?

capzap
13.08.2013, 12:04
нет, комбинация 00, 40, 41, D0 дает значение 26,0°, потому что тип REAL это четырехбайтовая переменная, почему постоянно в каждом канале 0040, так потому что такие особенности формирования флоат

Friencis
13.08.2013, 12:35
Байты данных — это 41, D0, 1A, 27, что даёт 26,01°. А перед этими четырьмя байтами пара 0040.

capzap
13.08.2013, 13:55
ну значит смотреть надо как Вы сконфигурировали сам мсд, может у Вас сперва идет ворд потом реал. Главное, раз Вы запрашиваете 120 слов, то это количество и получаете или нет? Если все соответствует, смотрите конфиги архиватора