![]() |
Модераторы: 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. Я к тому времени уже увольнялся. Хм... пять раз прочитал эту фразу... Сначала думал - шутка юмора... Потом подумал, что издеваешься... Потом вспомнил, что в эту тему попал через другую... Посмотрел раздел, где она находится.... Блин. ![]() Все, что я здесь писал, я писал с точки зрения программиста на делфи, который пишет программу для компьютера, которая работает с контроллером. ![]() ![]() ![]() Из первого поста мне показалось, что надо именно это. Тут всегда есть куда лог писать ![]() Так что извиняюсь, если мимо тазика ![]() -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
||||
|
|||||
xvr |
|
||||||||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Да ну? И где же они выставляются? Особено интересует как сделать паузу в 3 символа при передаче.
![]() То, что у вас оно работало это еще ничего не значит, вам просто сильно повезло - фреймы шли отдельно друг от друга, поток фреймов ваша реализация не отловила бы.
![]() PS. По поводу Modbus RTU был очень длинный топик на electronix.ru (не могу дать ссылку - он сейчас лежит) |
||||||||||||||||||
|
|||||||||||||||||||
Felan |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
В MSDN написано, что эти таймауты выставить можно. Оснований недоверять MSDN у меня нет. Я ставил. Это работало.
Какой код? Функция SetCommTimeouts. Вот и весь код. Я незнаю, что она там гарантирует (кстати, Windows не является системой реального времени, так что требовать от нее гарантий соблюдения каких-либо временных интервалов вообще, мягко говоря, некорректно), но то, что ReadFile возвращала управление если они не соблюдались, это было. А по поводу мониторинга среды, что бы выделить из нее пакет, это я не знаю как сделать... возможно на событиях можно.... которые драйвер САМ возбуждает. Но я не знаю. У нас работа была только с одним устройством одновременно. Фреймы действительно шли отдельно. Но это не умаляет того, что таймауты выдерживались. Код я уже давал. Работало все с тем классом, ссылку на который я давал.
Незнаю, причем тут паяльник, ничего не понимаю в чипах и паяльниках. Но в MSDN написано, что драйвер может автоматически устанавливать(или сбрасывать я точно не понмю, помню, что проблемы были в том, что драйвер мог только одно делать, а у нас переходники были на другое настроены. Пришлось электронщикам переходник перепаять, что бы там наоборот было).
А что именно вы пытались сделать? Как я понял, хотели отлавливать кадры по таймингам? Этого сделать скорее всего не получится. Только если использовать, как я уже гвоорил, события. И то, я не знаю, будет ли это работать. А в общем случае, компорт не предназначен для того, что бы анализировать среду. Если я прав, и вы хотели сделать именно это, все понятно. Молтком сложно вскапать огород.
Сложно тут что-то ответить. Есть вообще масса разного народа. Я говорю за себя. В нашем частном случае, когда пакеты шли поочереди и на шине было только одно устройство все работало прекрасно.
Потому что давно было, потому и плохо помню. Еще раз. Было организовано взаимодействие одного устройства на базе МК и компьютера через RS485, с использованием переходника RS232<>RS485, который возвращал эхо. После этого, было обнаружено, что в делфи неправильно объявлены константы для настройки драйвера порта. Константы управлением DTR/RTS были исправлены и драйвер настроен так, что бы сигнал (DTR или RTS я сейчас не помню, который именно использовали наши электронщики) изменял свое состояние в зависимости от наличия/отсутсвия байт в буфере порта. Смотрели на осциллографе. Все работало. Ссылку не надо, т.к. давно этим не занимаюсь. Просто хотел поделиться тем, что когда-то делал. И у меня, допускаю что по странному везению ![]() -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
||||||||||
|
|||||||||||
xvr |
|
||||||||||||||||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
То, что написано в MSDN не может поменять АППАРАТУРУ в компьютере. Эта АППАРАТУРА не позволяет отлавливать timeout'ы на уровне отдельных символов в входном и выходном потоке. Любой timeout, поставленный через SetCommTimeouts будет округлен в большую сторону до величины тика системного таймера. MSDN по этому поводу молчит.
Собственно зачем я весь этот разговор завел. Это касалось вашего заявления, что Modbus ASCII нафиг не нужен, а везде вместо него имеет смысл применять Modbus RTU. Я заявляю, что ПОЛНОЦЕННЫЙ (полностью соотвествующий стандарту) Modbus RTU на ЛЮБОЙ PC без специальной дополнительной аппаратурой реализовать НЕВОЗМОЖНО. В отличии от Modbus ASCII, который реализовать МОЖНО. |
||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
Felan |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Я не говорил такого. Я сказал:
И вы меня в этом не разубедили. То, что текстовые протоколы в частных случаях бывают полезны, я не отрицаю. Здесь же все исключительно ИМХО. Требует. Но он писан для взаимодействия MK<>MK. А для PC надо использовать другие методы. Наш метод, в нашем частном случае работал и не знал проблем.
Нет, настолько досконально я не проверял. Не было нужды, т.к. все работало.
Я нигде не говорил, что реализовал полноценный MUDBU RTU, да еще и дословно по спецификации. Я сказал, что было сделано так-то и так-то и это работало.
Справедливо. Особенно для разных осей... У нас все это работало только под XP. У XP наверно везде один драйвер порта... во всяком случае я не слышал, что кому-то пришло в голову его поменять. Но может быть и разный. С чего? С того, что я не электронщик? Я нигде этого не говорил.
Полностью согласен. Еще раз. Спецификация MODBUS писана для MK<>MK. Для PC нужно использовать ДРУГИЕ МЕХАНИЗМЫ. Тем более, что в данном конкретном случае кадры как два пальца определяются по размеру. По крайней мере я лично их определял именно так. И все было хорошо. -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
||||||||||||
|
|||||||||||||
xvr |
|
||||||||||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Ок. Если под железом понимается связь 2х и более спец. устройств, то полностью согласен. Если же это железо собирается подключаться к PC, то текстовый формат обмена может быть полезен (правда при условии, что его можно использовать с обычного терминала, без ручного подсчета всяких контрольных сумм и пр). И довольно много железок используют такой формат (например вся продукция фирмы Extron). Некоторые железки используют оба формата, например видеокоммутатор от системы видеонаблюдения фирмы Philips использует текстовые команды для управления (они документированны) и отдельный бинарный протокол (недокументированный) для обмена со своим софтом на PC. С другой стороны текстовые протоколы более трудоемки для реализации в железе и обычно на это идут неохотно ![]() Текстовый протокол позволяет посылать железке ПРОИЗВОЛЬНЫЕ команды из обычного терминала не имея специального софта, тем более что обычно в таком специальном софте не предусматривается возможность отослать железке ПРОИЗВОЛЬНУЮ команду.
![]()
![]()
Кстати, по поводу текстовых и бинарных форматов и специального софта: У меня был один проект, где PC взаимодействовал с внешней железкой. Взаимодействие происходило по RS232 или по сети (TCP), использовался бинарный формат. В процессе отладки всей системы мне ПРИШЛОСЬ в софте со стороны PC реализовать отправку в железку введенных (в виде hex дампа) пользователем пакетов, иначе было очень трудно ее (железку) отлаживать. |
||||||||||||||||||||
|
|||||||||||||||||||||
Felan |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Эх ![]() ![]() ![]() ![]() Я искренне не понимаю, что такое "ПРОИЗВОЛЬНАЯ КОМАНДА". И зачем ее посылать устройству, если оно ее все равно не поймет? ![]()
Я имел ввиду, что спецификация модбаса создавалась для промышленных сетей, и для промышленной автоматики. И там ни разу не учитывалось, что надо будет обеспечить взаимодействие с компьютером да еще и именно из под Windows. Ибо Windows не есть реал-тайм система, и она не может использоваться в серьезных автоматических системах без специальных надстроек, которые обеспечивают псевдо-реал-тайм среду. Даже среда и протокол для модбаса называются RS485, а не RS232. Следовательно не подразумевалось никаких СТАНДАРТНЫХ РЕШЕНИЙ ДЛЯ ИХ СОПРЯЖЕНИЯ. А все что делает через переходники и пр. это есть шаманство. То, что текстовый имеет свои особенности, и, в данном случае, может быть действительно удобнее, я не спорю. Но, мы делали бинарный и у нас все работало. Это все что я декларирую ![]()
Могут. Но они все равно должны обеспечивать работу драйвера и его спецификацию. Наверняка, что есть случаи, когда это не так, и ты прав. Я с ними не встречался ![]() Не иначе, как сегодня небо упадет на землю! ![]() ![]() ![]() Понятное дело. Просто мне кажется что это надо понимать, и учитывать при проектировании системы изначально.
Могут. И даже скорее всего будут. Но у нас такого не было. У нас по проще условия были. Но, уверен, что это то же решаемо. Хотя я не представляю себе как символ может потерятся... Ну исказиться еще ладно, а потеряться... Кусок кабеля разве что с ним украдут ![]() ![]() ![]() Даже если пакет придет не полностью, это будет обнаружено на уровне CRC, и можно проанализировать буфер, для того, чтобы найти начало следующего. Это конечно то же шаманство, ну а как по другому? ![]()
И что это дало? Как были цифры так и остались, только в другом представлении ![]() Это сообщение отредактировал(а) Felan - 17.4.2008, 14:32 -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
||||||||||
|
|||||||||||
Cergiy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 15.4.2008 Репутация: нет Всего: нет |
Товарищи, а оно заработало!!!
![]() Точнее заработало пока только запись, а вот чтение не получается, он мне постоянно показывает что буфер пустой. Но я вообще-то не могу даже разобраться с командой чтения 03h. В файле что я присоединил написано какой она имеет вид, и что там подразумевается под "количество запрашиваемых (передаваемых) параметров", когда я просто хочу считать текущую температуру, не понятно. |
|||
|
||||
xvr |
|
||||||||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Текстовый лучше тогда, когда невозможна отладка со стороны PC. Например - твой девайс стоит на объекте, там нет ни Delphi ни вообще какого либо компилятора. Текстов твоей программы для связи с железкой тоже нет (хотя они и нафиг не нужны без компилятора). Есть только PC с последней версией управляющей программы и терминалом. Выясняется, что все вместе не работает и логов, встроенных в программу, оказалось недостаточно, что бы понять причину. Что делать? Или хотя бы для начала разобраться кто виновать - железка или программа?
![]() ![]()
![]()
|
||||||||||||||||||
|
|||||||||||||||||||
Felan |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Cergiy, Ты бы хоть код привел. Сказал, что пользуешь, мои классы или нет. А так - ошибка в 17-ой строке
![]()
Я не понял, почему невозможна отладка на PC? Отладка программы контроллера очень даже возможна. А отладкой управляющей программы надо было раньше заниматься ![]() Понятно, что ошибки могут потом всплыть, но опять же перекомпилировать ее ты же не будешь на объекте? Следовательно перекомпилят ее там где писали. Если логов встроенных в программу недостаточно то это проблема программы, надо делать достаточные логи ![]() Но если программа хороманогая по своей задумке, сути и реализации... то лучше ее вообще не использовать, лучше сразу терминалом ![]()
Я не понял, что это за управляющая программа, которая реализует не все команды? Ну допустим в этом есть высокий смысл, непонятный мне. Но тогда эта программа уж точно не предназначена для отладки. Еще раз, отладку чего ты хочешь делать т.о.? Найти ошибки в УП? Это да. Но овчинка выделки не стоит. Найти ошибки в МК? Для этого не нужен текстовый протокол. Достаточно нормального лога.
Ну в серьезных системах показометры тоже должны быть серьезными. А серьезному показометру не зазорно сделать маленький контроллер, который будет работать адаптером. Я думаю что это будет правильно во всех смыслах. Во например: Канал передачи - лес. Показометр - глаз. Днем все видно хорошо. Вечером хуже, но приемлемо. Ночью - нифига не видно. При полной луне что-то можно увидеть. Что бы видеть ночью используют спец. технику предназначенную специально для этого. Почему бы не использовать спец. заточенный конвертер на базе еще одного МК который будет переводить сплошной поток кадров, которые вообще передаются на конкурирующей основе, в четко разделенные последовательности с которыми можно без проблем работать PC? Это идеологически правильное решение. А текстовый протокол это шаманство. Просто его добавили, наверно (я незнаю историю модбаса) после того, как столкнулись проблемами о которых ты говоришь.
Да понятно, что среда любая. Но мы говорим про конкретную. Вот видишь, есть железные конверторы ![]() Начальство придумало, что мы должны разработать. Начальство поменьше подумало и решило, что надо RS485 (ну, надо сказать, что это было оправдано), електроньщики почесали рему и сказали, что надо переходники, каждый стоит... незнаю $10 например. Начальство поменьше сказало, дороговато, поищите еще что-нибудь, а то начальство завернет. Начальство посмотрело... переобуть свой новый лексус не получится, если столько денег отвалить... Давайте ищите варианты дешевле. Ну и вкрячили дешевый, с эхом, по $1 за переходник. А разработчики должны тр№;ся, но сделать что б работало, причем не через полгода, а вчера. Не знаю как там "у вас", но у нас, в частной лавочке было именно так ![]() Я к чему это все завел... К тому, что надо делать правильно. А правильно дорого. Вот и появляются всякие разные "дешевые" решения ![]() ![]()
Наверно да.... С ходу ничего в голову не приходит. А то, что попрощаться, это безусловно ![]() Но, подобную фигню, мне кажется, можно реализовать на эвентах. Можно пробовать... Если кто-нибудь нормально профинансировал бы, я бы может попробовал, в свободное от работы время поковыряться ![]()
Ну убей меня об стенку, зачем для этого ТЕКСТОВЫЙ ПРОТОКОЛ? Ну сделал в программе отправку любой последовательности, и все ![]() ЗЫЖ Вобщем, единственное, в чем я теперь стобой соглашусь полностью, это то, что текстовый протокол, который имее маркер конца кадра, позволяет избежать проблем связанных с выделение этих кадров из потока. ![]() ![]() ![]() ![]() -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
||||||||||||
|
|||||||||||||
xvr |
|
||||||||||||||||||||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Потому что ты сидишь на объекте и на PC, который там есть ничего нет ![]() ![]()
С другой стороны, даже если управляющая программа и читает все регистры, она это делает по своей собственной инициативе и скорее всего невозможно заставить ее читать их так (и в том порядке) как хочет пользователь/разработчик. (Вариант с правкой сорцов и перекомпиляцией мы не рассматриваем - на объекте нет ни сорцов ни компилятора)
![]()
![]()
![]()
Увы я видел только 2 таких программы - одну я уже упоминал, а вторая была среда програмирования контролеров фирмы AMX (контроллеры для 'Умных домов'), она позволяла отправить любую команду любому устройству, включенному в ее сеть.
![]() |
||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||
Felan |
|
||||||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Я прекрасно понимаю, что это очень реальный расклад. Но в таких случаях у нас ВСЕГДА предусматривался спец. режим для отладки.
Легко! Для этого обычно пишут заглушку, т.е. эмулятор, который реализует интерфейс системы. Мне кажется, что это настолько очевидно, что тех, кто так не делаешь, я пожалуй не назвал бы профессионалами.
Зачем каждую строчку то логировать? Достаточно писать в лог только то, что нужно. Нет в этом ничего такого страшного, а есть такой паттерн проектирования "Команда", очень он способствует всяким удобствам в разработке подобного ПО.
Блин, уел. Ладно. Просто мне, как человеку разрабатывавшему подобный софт не пришла голову простая до безобразия мысль, что у команды чтения регистра не может быть параметра, который указывает какой именно регистр надо прочитать. А так же не пришло в голову, что в целях отладки этот параметр нельзя изменить... Отсутствие отладочного режима тоже... Ты сам не находишь сдесь противоречия? Сделать что-то, чем-то, что для делания этого не предназначено?
Вариант 2. Еще раз, то, что по не позволят элементарно проверить свою работу, т.е. работу команд, которые оно должно выполнять, но не выполняет, это значит, что плохое ПО. Протокол здесь НИ ПРИЧЕМ! Причем здесь посторонние команды, я тоже не понимаю. Ну увидит он, что у него не читается еще и остальные 99, что это кардинально изменит?
Как не видишь смысла!? Ты же сам сказал, что сделать штатными средствами НЕВОЗМОЖНО! Да, тут выкрутились, оказалось, что есть текстовый протокол, а если бы его не было? Как можно сделать, когда ты сам вчера говорил, что ЧИП ПОРТА И ЕГО УПРАВЛЯЮЩЕЕ ПО НЕ ПОЗВОЛЯЕТ ДЕЛАТЬ "ЭТО" В ПРИНЦИПЕ??? ![]() ![]() ![]() Я отказываюсь понимать твою логику ![]()
Ну вот видишь, по твоим же словам, была спецификация, налетели не грабли, под шаманили ![]()
Я так и сделал, полтора года назад. ![]()
Вот и я про то, что не самоцель. И что реализовывать его обосновывая тем, что "читать удобнее", считаю глупостью. Если в этом есть РЕАЛЬНАЯ НЕОБХОДИМОСТЬ - да пожалуйста, сам первый и реализую ![]() Ладно. Я сдаюсь ![]() -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
||||||||||||||||||
|
|||||||||||||||||||
xvr |
|
||||||||||||||||||||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Значит ваше ПО уникальное - практически ни в одном ПО, распространяемым с железками, такого режима нет (по крайней мере мне не попадалось, за редким исключением)
![]()
![]()
![]() ![]()
![]() ![]() Это сообщение отредактировал(а) xvr - 18.4.2008, 13:36 |
||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||
Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Ну поскольку мы ПО для себя писали, то мы и предусматривали.
Раз про "удобство чтения" аргументов не было, значит с остальным согласен ![]() -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
Cergiy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 15.4.2008 Репутация: нет Всего: нет |
У меня там солянка, но вообще мне порекомендовали dll-ху и с ней все заработало очень быстро, пример кода что-то типа sio_write (3, @buf, 17), то есть пишем в COM-3 из массива buf типа char, 17 символов ![]() Но я не могу в логике MODBUSA разобраться, сейчас процитирую. Для команд 03h либо 04h(кстати, чем они отличаются, в мануале написано что они обе для того чтобы читать несколько параметров) существует следущая форма запроса: :1 Adr 2 Fc 2 PAdr 4 PNum 4 LRC 2 CRLF 2(цифры обозначают количество байт), где 1) Adr – сетевой адрес устройства, 2 знака 2) Fc – код функции, 2 знака 3) PAdr – адрес параметра, 4 знака 4) PNum – количество запрашиваемых (передаваемых) параметров от PAdr включительно, 4 знака итд. Так вот мне не понятно откуда я должен узнать PNum? Я раньше подцеплял мануал по своему прибору Термодат-17КЗ (можете посмотреть). Мне нужно считывать текущее значение температуры, то есть я адрес параметра там посмотрел - 0170h, ну а про количество параметров там ничего не сказано. То есть я вообще не понимаю о чем речь. Может мне кто помочь? |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Количество параметров - 1 (количество подряд идущих регистров) Команды 03 и 04 отличаются набором регистров, которые они читают. 03 - Holding Registers, 04 - Input Registers. Что понимается под Holding и Input Registers определяет устройство. В вашем случае это одно и тоже. Вообще Modbus оперирует понятиями, которые давно не имеют физического соотвествия с какой либо реальной аппаратурой ![]() |
|||
|
||||
Cergiy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 15.4.2008 Репутация: нет Всего: нет |
Ну а вы сможите написать команду? то есть: :01030170(0001) или как-то по другому, то есть я вообще не понимаю, что должно быть написано и как. Поэтому в принципе написал на официальный сайт, но это у них долго: в прошлый раз дней 5 высылали мануал. Но мне в принципе интересн и какой например может прийти ответ. ![]() |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Команда - чтение регистра 0170 (температура): :0103017000018A Ответ (20 С, содержимое регистра 200 или 00C8) :0103000200C832 |
|||
|
||||
Cergiy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 15.4.2008 Репутация: нет Всего: нет |
Всх благодарю! Почти все работает. Неудалось только одно: чтобы все было автоматически. Ну то есть я написал, что и гарфик строится и датчики опрашиваются, но при нажатии на кнопку это делается один раз. А нужно-то сделать, чтобы вот нажал на кнопки и датчики опрашиваются, пока этот процесс не остановить. Чего только не пытался делать: программа просто тупо зависает, незнаю что делать, может кто писал про непрерывный опрос прибора подскажет в чем проблема?
|
|||
|
||||
smalcom |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 494 Регистрация: 16.10.2004 Где: Dnepr Репутация: 4 Всего: 7 |
используй таймера
-------------------- What DA F...??? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Микроконтроллеры (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. |