![]() |
Модераторы: PILOT, ManiaK, Mazzi |
![]() ![]() ![]() |
|
Cergiy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 15.4.2008 Репутация: нет Всего: нет |
Приветствую всех!
Из названия темы понятно что имеется: прибор, интерфейс RS-485, протокол Modbus-ASCII. Нужно например записать данные в регистр. (на самом деле много чего нужно) Но видите ли, я туповат и не догоняю. Допустим пользователь вводит число которое нужно записать (допустим это число будет 100). Я сначала должен в своей программе сформировать строчку в шестнадцатеричной системе 3A010601730064—0D0A, где 3A – начало посылки, 01 – сетевой адрес устройства, 0173 – нужный мне регистр, 0064(100d) - записываемые данные, потом должна быть контрольная сумма из 2-х символов(xxxx) о которой я спрошу отдельно, как ее рассчитать и потом два символа конца посылки 0D и 0A (если я правильно понимаю это не 3338d, а именно 13d10d, записанные вместе). И вот, эту строчку мне надо переслать через COM-порт по RS-485, если я все правильно понимаю. И я не догоняю как это сделать. То есть как мне послать эту строчку так, чтобы прибор правильно ее обработал, ну что вот сначала пришел символ(3А) начала посылки, потом пошло «тело», а потом и 2 символа означающие конец посылки. Заранее благодарю за помощь! Я весь во внимании ![]() (я правда не знал в каком разделе лучше это спросить) Это сообщение отредактировал(а) Cergiy - 15.4.2008, 11:35 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Знатная каша
![]()
|
|||
|
||||
Cergiy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 15.4.2008 Репутация: нет Всего: нет |
Ой, я так и думал, что написал как попало, но уж как-то лучше не получилось.
Вот за код благодарю, но вот как бы етот код представить на делфи? ИТ некоторые моменты не понятны - я с С никогда не работал. ну :0106 все понятно, а вот что дальше началось? К тому же, раз у меня этот 485 то нужно то включить RTS, потом время подождать и отключить RTS, да?! Кстате, может вы подскажите что непонятно, я по-понятнее объясню, ну чтобы и другие поняли. ) |
|||
|
||||
xvr |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Почти также - там тоже есть форматная печать, подробностей не знаю - с Делбфи не работал
|
||||||
|
|||||||
Cergiy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 15.4.2008 Репутация: нет Всего: нет |
Благодарю!
Хорошо, я попробую написать то что вы предложили на делфи. Там же ведь чтоб работать с ком портами пришлось искать компоненты (некогда самому писать), а там все своеобразно реализовано... Ну да ладно, если у кого есть еще какие идеи слушаю внимательно. ![]() |
|||
|
||||
Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
+1 Переходники тоже разные бывают. Бывают умные, которые сами переключают RTS, а бывают, которые возвращают эхо, а ты сам уже, после прочтения эха, должен переключить RTS. Я когда-то работал с модбасом, но мы использовали бинарный протокол. И, если честно, то я считаю текстовые протоколы для работы с жезом извращением в высшей степени. Выставлять фиксированное время для установки/сброса RTS крайне не рекомендую. Даже если это и запустится, нет никаких гарантий что это будет работать через пять минут на другой машине. Следовательно, возможно, будет очень много проблем потенциально неотлавливаемых, кроме как осциллографом. Вот класс для работы с ком-портом, котрый я когда писал, как раз для того, что бы работать модбасом. Реализация самого протокола есть, но тебе она без надобности, у тебя ASCII у нас был бинарный. По поводу контрольной суммы, не знаю, что ты имеешь ввиду под LRC, но у нас была CRC, и считалась она как CRC16. В приложении класс, которым считал я. Присоединённый файл ( Кол-во скачиваний: 129 ) ![]() -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Кстати, если у тебя переходник с Эхом, то вот класс для отправки сообщений, который использует указанный выше класс для работы с портом.
Присоединённый файл ( Кол-во скачиваний: 87 ) ![]() -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
У Modbus-RTU очень жесткие времянки, на Windows бес плясок с бубном выдержать практически невозможно, так что ASCII его разновидности тоже имеют право на жизнь ![]() ![]() Но в общем и целом бинарные протоколы для работы с железом выглядят предпочтительней. |
|||
|
||||
Cergiy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 15.4.2008 Репутация: нет Всего: нет |
Люди
![]() Вот я прикрепляю файл который мне выслал производитель. Полюбуйтесь. "Не виноватая я". Добавлено @ 08:15 Но тогда я что-то не могу понять что мне делать с РС-485?! У нас вообще виртуальный COM порт потому как подключение через USB, "переходник" АС4 фирмы "Овен". Добавлено @ 08:18 Да и еще, есть рабочая прога от производителя которая свободно распространяется. Просто она не реализует некоторые моменты которые мне и поручили сделать, это типа, мой диплом и будет ![]() Она вообще работает нормально, просто выбираешь COM порт и все, все опрашивается регулируется. Ну это я так, мало ли, может это что-то прояснит. Это сообщение отредактировал(а) Cergiy - 16.4.2008, 08:28 Присоединённый файл ( Кол-во скачиваний: 82 ) ![]() |
|||
|
||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Нормальное описание
|
||||
|
|||||
Cergiy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 15.4.2008 Репутация: нет Всего: нет |
Не спорю, это я к тому, что, вобщем-то, ASCII не моя идея. Хотя и написано, что поддерживается и RTU. АС4: Назначение Предназначен для взаимного преобразования сигналов интерфейсов USB и RS-485. Позволяет подключать к промышленной информационной сети RS-485 персональный компьютер, имеющий USB-порт. Основные функции * Взаимное преобразование сигналов интерфейсов RS-485 и USB * Автоматическое определение направления передачи данных * Гальваническая изоляция входов * Создание виртуального СОМ-порта при подключении прибора к ПК, что позволяет без дополнительной адаптации использовать информационные системы (SCADA, конфигураторы), работающие с аппаратным СОМ-портом * Питание от шины USB * Встроенные согласующие резисторы То есть я так понимаю мне о RS даже и думать не надо, а писать "как обычно"?! Это сообщение отредактировал(а) Cergiy - 16.4.2008, 12:34 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Судя по тому, что написано - да. Это сообщение отредактировал(а) xvr - 16.4.2008, 13:53 |
|||
|
||||
Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Почему нельзя? Какие именно времянки ты имеешь ввиду? Если время, когда надо дергать RTS, то это драйвер и сам может делать. А если преходник тупой, с эхом, то там вообще все четко, только надо эхо ловить. У меня все замечательно работало. По мне, так сомнительно это все ![]() Тоже сомнительно. Когда пишешь программу, все равно делаешь отладочные логи, так что смысла в том, что бы тр№;"ся с текстом не вижу... Но это дело вкуса конечно ![]() +1 -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
xvr |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Я имею в виду что в Modbus RTU используются интервалы между передачей символов в RS для разделения фреймов и прочего, причем эти интервалы относительно короткие - менее 4 символов. При приеме все еще хуже - эти интервалы придется измерять, на Windows это вообще швах ![]()
![]()
|
||||||
|
|||||||
Felan |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Не знаю, как там у вас, но вот у нас интервалы между символами выставлялись в настройках драйвера. И были они стабильные и четкие. Т.к. после того, как в буфер драйвера данные положены, драйвер сам их отправляет. И следит за этими интервалами. И все хорошо и замечательно работает. При приеме тоже самое.
Это, он, драйвер, кстати делает. Просто его надо настроить. А если это делалось на делфи, так там ошибка в константах. Их надо ручками из MSDN взять. Покрайней мере у нас сам драйвер очень даже правильно дергал сигнал. Сам, после того, как все уйдет именно из буфера... Я вот только точно не помню, какой именно мы делали, то ли RTS, толи DTR. Я к тому времени уже увольнялся. Хм... пять раз прочитал эту фразу... Сначала думал - шутка юмора... Потом подумал, что издеваешься... Потом вспомнил, что в эту тему попал через другую... Посмотрел раздел, где она находится.... Блин. ![]() Все, что я здесь писал, я писал с точки зрения программиста на делфи, который пишет программу для компьютера, которая работает с контроллером. ![]() ![]() ![]() Из первого поста мне показалось, что надо именно это. Тут всегда есть куда лог писать ![]() Так что извиняюсь, если мимо тазика ![]() -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |