Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

Обмен по протоколу DCON

RS-485, ProfiBUS, 4-20 mA, Wi-Fi, GSM и так далее

Автор темы
Алексей_П
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 07 июн 2013, 13:56
Ф.И.О.: Прокофьев Алексей Анатольевич

Обмен по протоколу DCON

Сообщение Алексей_П » 07 июн 2013, 14:07

Здравствуйте, нужна помощь по реализации протокола DCON.
Пишу программу на C#. Обмен с модулем I-7017RC используя DCON. Читаю входные значения. Формат команды #AA,
на C# это выглядит так: var wBuffer = new byte[] {0x23, 0x30, 0x31, 0xD};
в ответ приходит такой буфер:
byte[0] = 62;
byte[1] = 50;
byte[2] = 50;
byte[3] = 0;
При конвертировании в строку получаем: 3F-32-32-00
Вопрос: как эти данные преобразовать в мА?

Аватара пользователя

Никита
почётный участник форума
почётный участник форума
Сообщения: 2496
Зарегистрирован: 20 янв 2010, 22:23
Ф.И.О.: Никита
Откуда: Мурманск
Благодарил (а): 2 раза
Поблагодарили: 13 раз
Контактная информация:

Re: Обмен по протоколу DCON

Сообщение Никита » 07 июн 2013, 15:53

Коротковат у Вас ответ получается. 8-канальные модули на команду #01<CR>, без указания канала, насколько помню, выплевывают в ответ значения всех каналов в строку подряд, с завершением строки тем же символом <CR>. И это явно длиннее четырех байт.
Во-первых, без всяких C отправьте в модуль Ваш запрос хотя бы гипертерминалом или чем Вам удобнее и посмотрите, что будет. Во-вторых, ответный буфер при работе на С надо обработать и символ возврата каретки заменить принятым в С терминирующим нулем, чтобы получить нормальную для С строку.
В третьих - огласите весь список, пожалуйста. Т.е. и отклик модуля в терминале и весь полученный от него буфер до символа 0x0D
Непонятен ноль в последнем байте, его там по идее, быть не может. Но С воспринимает его как конец строки. Кстати, буфер-то у Вас если используется тот же самый, то он конечной длины. Объявите отдельную длинную строку для ответа, будет проще.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "


Автор темы
Алексей_П
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 07 июн 2013, 13:56
Ф.И.О.: Прокофьев Алексей Анатольевич

Re: Обмен по протоколу DCON

Сообщение Алексей_П » 10 июн 2013, 09:42

Спасибо за ответ, разобрался! На диске icpdas есть программка Send232 V.2.0.1 называется. Попробовал ей послать #01<CR> Модуль ответил:
>222CFFFFFFFFFFFFFFFFFFFFFFFFFFFF Утилита DCON_Utility возвращает тоже самое. Т.е. модуль исправный.
Далее пробую так:
считываю 34 байта, и конвертирую в строку через BitConverter.ToString() получаем:
3E-
32-32-32-41-
46-46-46-45-
46-46-46-45-
46-46-46-46-
46-46-46-45-
46-46-46-45-
46-46-46-45-
46-46-46-45-
0D
это ASCII символы. 3E это '>', 0D это '♪' (возврат каретки). 32-32-32-41 в шестнадцатеричной 222А или в десятичной 8746.
Далее всё просто. Если датчик 4-20, то ((8746-6553)/(32767-6553))*16+4 = 5.34 мА.


Romcheg
SCADA+
SCADA+
Сообщения: 520
Зарегистрирован: 05 ноя 2009, 11:18
Ф.И.О.: Бузинов Роман Анатольевич
Благодарил (а): 5 раз
Поблагодарили: 14 раз

Re: Обмен по протоколу DCON

Сообщение Romcheg » 10 июн 2013, 10:19

Вы в софте режим порта задайте (его кодировку, а то он по-умолчанию в 7-битной работает), поэтому и 3F идут по всем большим значениям. А вообще - мой совет: если работаете с портом в C#, то отправляйте и получайте байты, а не строку символов, так более адекватнее получается. Уже сам не раз на этом попадался. :)
SCADA+


Автор темы
Алексей_П
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 07 июн 2013, 13:56
Ф.И.О.: Прокофьев Алексей Анатольевич

Re: Обмен по протоколу DCON

Сообщение Алексей_П » 10 июн 2013, 10:54

Ага, спасибо.


Вернуться в «Интерфейсы, протоколы, связь»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей