PDA

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



Uzzy
17.04.2009, 08:40
Купили у вас МДВВ, в брошюре есть описание протокола DCON. Внятного разъяснения что за контрольная сумма - нет. Нет примеров подсчета контрольной. Нет указания скольки разрядная контрольная 8 или 16.

Вот пример из документации


Пример
6. Дискретные входы
6.1. Опрос состояния входов и счетчиков по сети RS-485
6.1.2 Работа по протоколу DCON

Для работы с дискретными входами и счетчиками по протоколу DCON в МДВВ. реализованы три команды.
Команда: Считать значения дискретных входов.
Посылка:
@AA[CHK](cr)
где:
AA - адрес модуля, от 0x00 до 0xFF
[CHK] - контрольная сумма
(cr) - символ перевода строки (0x0D)

Ответ:
>(данные)[CHK](cr) - в случае приема допустимой команды
?AA[CHK](cr) - при нераспознаваемой команде
где:
(данные) - 16 бит значений...

При синтаксической ошибке или ошибке в контрольной сумме ответ не посылается.

Пример посылки:
@10 - запрос состояния дискретных входов модуля с шестнадцатиричным адресом 10

Пример ответа:
>0FFF - все дискретные входы в состоянии "Разомкнут"


Что за поле CHK? скольки битное? как считается? ...
Еще вопрос
Байт массив выше упомянутого запроса к устройству с адресом 16 выглядит как:
0x40 0x10 [crc] 0x0D
или
0x40 0x31 0x36 [crc] 0x0D
?

Uzzy
17.04.2009, 09:51
И еще
http://kipshop.ru/Soft/Windll/owen_io_lib.zip - файла там нет. ссылка на сайте "битая".

magirus
17.04.2009, 10:17
ссылка рабочая. только что проверил.

Uzzy
17.04.2009, 10:30
Да, у меня с проксей проблемы были. Извинияюсь. Но первый вопрос остается в силе...

Еще вопрос возможна ли работа ПК с МДВВ без дополнительных библиотек? То бишь общение с МДВВ через ком-порт исключительно собственным кодом?

magirus
17.04.2009, 11:19
по первому сказать ничего не могу... Дкон не использую.
не совсем понял вопрос ...
у меня есть простенький пример работы ПЛК100 с МДВВ, используется только standart.lib
выложить смогу правда только вечером ...
и не через ком а через RS-485. у мдвв это единственный интерфейс.

Филоненко Владислав
17.04.2009, 11:19
На ПЛК Вы можете делать всё, что пожелаете. Использовать библиотеки (кроме системных) для реализации любого протокола нет необходимости.
Более того, на низких bodrate Вы можете эмулировать 232/485 интерфёйс самостоятельно, только поставив дополнительную микросхему - драйвер - преобразователь уровня.

Uzzy
17.04.2009, 11:49
Есть связка ПК - АС3-М (RS232->RS485) - МДВВ.

Конфигуратор с МДВВ общается на ура. Однако софт не хочет. Выдает постоянно таймаут.
Открываю ком-порт с параметрами
бодрейт: 9600
парити: нет
стопбит: 1
длина байта: 8
включен режим request to send ( то бишь устройство будет отвечать после посылки).
Сетевой(базовый) адрес устройства - 1.

какой пакет байт нужно отправить корректно, чтобы получить состояние дискретных входов.

в примере указана строка "@10"
но нет указания, что как считается контрольная сумма (пробовал и суммой байт и ДОУ-таблицей)
Еще если сетевой адрес - 1 , то команда
@1<crc>\r или @01<crc>\r ?

как я уже понял crc - 1 байт вопрос - как считается?

Uzzy
17.04.2009, 11:56
Решил попробовать owen_io.dll пробую функцию OwenIO.

uint[] size = new uint[]{2};
var command = ??
char[] parameters = new char[8];
int openResult = OpenPort(0, 2, 0, 1, 0, 0);
if (openResult < 0)
{
Debug.WriteLine(openResult);
}
var result = OwenIO(1, 0, 1, command, parameters, size);
что надо задать в command и parameters?

Uzzy
17.04.2009, 13:26
Собственно день мытарств и проблема решена.

Филоненко Владислав
17.04.2009, 21:07
Есть 2 контрольные суммы - сложением всех байт и по алгоритму DOW_CRC - полином из 1-wire

magirus
18.04.2009, 02:13
простой собственно говоря счетчик.
ПЛК100-Р-Л.

light_finder
29.04.2009, 20:30
Сетевой(базовый) адрес устройства - 1.

какой пакет байт нужно отправить корректно, чтобы получить состояние дискретных входов.

в примере указана строка "@10"
но нет указания, что как считается контрольная сумма (пробовал и суммой байт и ДОУ-таблицей)
Еще если сетевой адрес - 1 , то команда
@1<crc>\r или @01<crc>\r ?

как я уже понял crc - 1 байт вопрос - как считается?

Адрес прибора и контрольная сумма по протоколу DCON ВСЕГДА имеют разрядность 2 байта (собственно, для остальных протоколов это тоже верно).

В поле адреса заносится шестнадцатиричное представление адреса, то есть диапазон возможных адресов таков: 0-255. Но это теоретически. А практически лучше давать приборам адреса, кратные восьми, так как в ином случае возможна некорректная работа некоторых устройств.

Контрольная сумма считается следующим образом - складываются ASCII коды всех символов пакета (за исключением, конечно, самой контрольной суммы и символа конца пакета). Полученная сумма берется по модулю 256. Полученное десятичное число преобразуется в шестнадцатиричный вид и пишется в поле контрольной суммы. Если полученный результат меньше 15, на первую позицию пишется символ '0'. То же самое, ксати, относится и к представлению адреса.

В примерах, приведенных в руководстве, в посылках отсутствует контрольная сумма. Если адрес Вашего прибора равен 1, то для чтения состояния его входов надо послать в сеть пакет следующего содержания:

@01A1(cr)(\0),

где cr - символ "возврат каретки" с кодом ASCII кодом 13 (0x0D),
\0 - нулл-байт, т.е. символ с ASCII кодом 0, служащий для обозначения конца строки.

ps скобки, естественно, посылать не надо