|
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
|
|
Работа с Modbus RTU09.04.2015, 11:18. Показов 35113. Ответов 169
Метки нет (Все метки)
Есть некий модуль ввода/вывода, со своим адресом, дискретный и аналоговый сигнал поддерживает. RS-485 интерфейс, протокол MODBUS.
По СОМ порту передает данные на ПК. Нужно написать приложеньеце, которое будет подключать с СОМ порту определенному, находить по адресу модуль, соединяться с ним и считывать с него и посылать на него данные. Хочу понять с чего мне начать. Немного владею Delphi и хочу в ней написать простую программку. Подключение к модулю, считывать и посылать на него сигнал. Горит. Добавлено через 3 часа 2 минуты Кто нибудь, подскажите алгоритм хотя бы, пожалуйста?!
0
|
|
| 09.04.2015, 11:18 | |
|
Ответы с готовыми решениями:
169
Работа с контроллером производительности нории КПН-4М по Modbus RTU over RS-485 Получить измеренное значение датчика давления (АИР-20/М2-МВ) по Modbus RTU
|
|
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
|
||
| 22.05.2015, 14:11 [ТС] | ||
|
0
|
||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||||||
| 22.05.2015, 14:51 | ||||||
|
raxp, не горячитесь. Все не так уж "запущенно"
. Конкретно проблема "подвисания" порта (у меня, да и не только) состояла в том, что поток, разбирающий сообщения от com-порта (одного или нескольких - не важно) - работал по принципу "спросить данные у порта, если нету - подождать NN мс", в бесконечном цикле, без каких-либо сообщений. Да, он обращался к внешним данным путем изменения свойство объектов и т.д. Проблема же и состояла в том, что если использовать прямые обращения к объекту порта из этого потока (то есть вычитка RX-буфера и запрос его размера), то уарт работает в течение от часа до восьми, при интенсивном опросе. А затем просто виснет - все события по отправке данных происходят без ошибок, а вот приема нет. Совсем. И переинит порта из приложения хоть и помогает, но сами понимаете, не является адекватным решением проблемы, особенно если речь идет о системах управления при интенсивном обмене.Поэтому, как только я перешел к варианту, который вскользь описал Витальич, все стало на свои места - порты перестали вешаться. Добавлено через 38 минут ...попробую примером, чтоле: parser - будет у нас классом от Tthread, со своим Execute. так вот: com - будет у нас классом порта, скажем, имеющего RxCount, как количество данных в RX-буфере. Имеет также процедуры отправки и приема буферов.
0
|
||||||
|
|
||
| 22.05.2015, 17:53 | ||
|
...повторю еще раз: нет никакого опроса в отдельном потоке и не надо, нет никакого смысла топик-стартеру его создавать, особенно с корявой реализацией слипами, оно уже есть в обертке готовое и реализовано как положено.
0
|
||
|
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
|
||
| 27.05.2015, 08:43 [ТС] | ||
|
2. А буфер лучше простой - массив или через класс и новый тип? Кликните здесь для просмотра всего текста
raxp, Как к тебе в личку сообщение отправить, надо?
0
|
||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 27.05.2015, 10:40 | ||
|
Таким образом, опрос 10 удаленных модулей с периодом 500мс должен выглядеть как: а) Загрузка/добавление 10 сообщений в список. б) постоянная обработка списка, при его размере >0. То есть всех сообщений. Необходимо также следить за тем, чтобы список не переполнялся, путем, скажем, отключения неотвечающих устройств из обмена (самое распространенное). Таким образом, ваша задача с включением "срочной" команды сводится к ее вставке в список под нумером 1. "1", потому что сообщение "0" находится уже в обработчике и вот-вот удалится по завершению.Список прекрасно себя чувствует в классе TStrings, или на базе его старших предков TCollection/TCollectionItem, если хотите сделать красиво.
2
|
||
|
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
|
||
| 27.05.2015, 15:39 [ТС] | ||
|
(командаСрочная, команда1, команда2, команда3, команда4) командаСрочная отправилась (соответственно ответ получил) и удалилась из списка и снова список стал (команда1, команда2, команда3, команда4). А таймер же нужен, чтобы избавиться от Sleep()? Что-то я вообще запутался! Извините, что такой баобаб.
0
|
||
|
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
|
|||||||
| 29.05.2015, 10:17 [ТС] | |||||||
|
{Программа "Пример буфера команд и опроса устройства". В Edit1 по очереди из списка TSringList передаются команды по порядку. При нажатии кнопки1, в утройство посылается команда, которая должа по приоритету выполнятся сразу.}
0
|
|||||||
|
|
||||||
| 29.05.2015, 12:07 | ||||||
|
...ловите:
1
|
||||||
|
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
|
|
| 29.05.2015, 13:46 [ТС] | |
|
0
|
|
|
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
|
||||||
| 22.06.2015, 12:12 [ТС] | ||||||
|
raxp, Здравствуй!
Подскажи пожалуйста. У меня идет опрос через таймер (Прибор1, Прибор2). Если в событие нет ответа от прибора, то снова посылается запрос, так до 3х раз. В таймере отсылаю команду set_smh(p1,p2,p3,p4); При опросе, если прибор1 и 2 отключены, в мемо выдает "нет ответа 1" , "нет ответа 2" При опросе прибор 1 подключен, прибор 2 нет. при этой комбинации не получается правильно принимать данные. Принимает только от прибора 1, а "нет ответа 2" не пишет.
0
|
||||||
|
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
|
|
| 03.09.2015, 11:03 [ТС] | |
|
Voland_, raxp, такой вопрос к вам!
Модуль дискретный В/В (Modbus RTU) подключен к ПК. Если у меня возник обрыв линии, я как нибудь могу сгенирировать сигнал, чтобы у меня некоторые биты допустим сбросились при обрыве (или установились)? Что можно придумать? Пример: работающий двигатель, при обрыве линии связи с ПК сгенерировать СТОП, двигатель остановлен. Спасибо!
0
|
|
|
|
|
| 03.09.2015, 11:22 | |
|
...если двигатель контролируется по той же линии связи, то останов его при обрыве линии связи может осуществить только контроллер, управляющий им. ПК в этом никак не поможет.
Контролировать линию связи можно постоянными циклическими посылками или опросом. Если в течении определенного времени никаких пакетов в линии нет - признак обрыва линии связи. Пакеты/опрос может осуществлять сам ПК, как мастер-устройство.
1
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 03.09.2015, 15:53 | ||
|
Если бы стояла такая задача, и другого ничего нельзя было бы сделать (аппаратно, например, или электрически), я бы городил второе устройство- "мастер", висящий на другом конце ветки и контролирующий запросы первого мастера. То есть если запросы есть - все ок, мы висим и ничего не делаем. Как только пропадает связь, по таймауту запросов ждущий мастер отправит команды "СТОП" всем слейвам в оторванной ветке. Да, это извращенно, да, кастомно выглядит. Но вполне может сойти как за решение. Добавлено через 1 минуту ...и да, в этом случае мастер должен постоянно поллить ветку, чтобы таймаут второго мастера не происходил.
0
|
||
|
|
|||
| 03.09.2015, 16:20 | |||
Либо мы в уме представили разные структуры связи. У меня контроллер движка рядом с ним, линия связи между этим контроллером и мастером (ПК).
0
|
|||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|||
| 03.09.2015, 17:01 | |||
|
raxp,
0
|
|||
|
|
|||
| 03.09.2015, 17:17 | |||
|
ПЛК при том, что двигатель со своим контроллером. Полагаю линия связи одна (допустим RS-485) для ПК, модуля I/O и контроллера двигателя. Иначе я не вижу смысла во фразе:
0
|
|||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
| 03.09.2015, 17:59 | |
|
ну я так понял, что структура такая: ПК ---> rs485 ---> IO --[DO]-> MotorControl.
То есть выходами I/O модуля мы "нажимаем" на кнопки СТАРТ/СТОП/ПЕРЕМОТАТЬ контроллера двигателя. ЗЫ: PierL, вы не могли бы яснее расписать задачку вашу? а то мы сча тут напридумаем...
0
|
|
|
|
|
| 03.09.2015, 18:28 | |
|
Если модуль ввода-вывода отвалился от общей сети, ничего извне ему не поможет остановить движок, кроме как контроллер движка сам будет контролировать постоянный приход пакетов. Об этом я написал в первом абзаце поста #114.
0
|
|
| 03.09.2015, 18:28 | |
|
Modbus TCP. Работа с регистратором РМТ-59
ADAM-4017+. 8-канальный модуль аналогового ввода с поддержкой протокола Modbus (подключение и работа) Работа по Modbus RTU с ПЛК Intellisys из своих приложений Работа с модулем ICP DAS I-8831 по Modbus RTU Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|