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

Программа на С++

SCADA, серверы, АРМ верхнего уровня, диспетчерские

Автор темы
Rock87
здесь недавно
здесь недавно
Сообщения: 72
Зарегистрирован: 05 сен 2013, 11:29
Ф.И.О.: Александр Дмитриевич
Благодарил (а): 6 раз

Программа на С++

Сообщение Rock87 » 29 сен 2015, 12:56

Пишу программу на С++Builder для взаимодействия с оборудованием (ПЛК Delta) по протоколу Modbus. Возник вопрос как организовать этот процесс. Допустим запрос на запись данных можно отправлять по соответствующему событию (например нажатие кнопки в программе), а вот запрос на считывание данных, для мониторинга состояния оборудованию, не понятно. Эти запросы должны отправляться периодически. Но по событию таймера, по-моему, не очень подходит, потому что я заранее не знаю кол-во запросов и соответственно время, необходимое для организации этих запросов. Соответственно, если я установлю время между тиками таймера слишком маленьким, то новый тик может начаться раньше, чем успеет обработаться очередь запросов предъидушего.
Что делать, люди добрые?

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

dtv
освоился
освоился
Сообщения: 255
Зарегистрирован: 04 фев 2014, 07:41
Ф.И.О.: Дмитриев Тарас Валерьевич
Откуда: г. Екатеринбург
Благодарил (а): 18 раз
Поблагодарили: 6 раз
Контактная информация:

Re: Программа на С++

Сообщение dtv » 29 сен 2015, 13:01

Почитайте про механизм организации ОРС-серверов. Может найдёте ответы на часть вопросов.
Взгляд знатока намного уже кругозора неуча. Ю.Базылев


Alexander
БАН
БАН
Сообщения: 642
Зарегистрирован: 03 июн 2010, 11:26
Ф.И.О.: Козин Александр Елисеевич
Благодарил (а): 2 раза
Поблагодарили: 5 раз
Забанен: Бессрочно

Re: Программа на С++

Сообщение Alexander » 29 сен 2015, 13:33

Как-же вы не знаете количество запросов-то? Судя по тому, что именно вы нажимаете кнопку на экране - с вашей стороны мастер, который и формирует эти запросы. Или ваши слейвы лезут с ответами, когда их не спрашивают? :)


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 2561
Зарегистрирован: 07 окт 2011, 08:12
Ф.И.О.: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 43 раза
Поблагодарили: 71 раз

Re: Программа на С++

Сообщение Ryzhij » 29 сен 2015, 13:41

Если у Вас мониторинг, а не управление, то зачем Вам заморачиваться с жёсткой привязкой по времени?
Закончился предыдущий запрос и есть условия на инициацию следующего - вперёд к новым знаниям и запросам!
Закончился предыдущий, но время ещё не подошло - курим бамбук, ждём-с.
Пора бы запросить, но не ответили на предыдущий - ждём-с, ничего страшного, мы же не управляем процессом, а мониторим его.
Ах, надо быстрее? Изменяем настройки связи или переходим на связь по другому каналу, по двум сразу и/или т.п.
Как-то так...
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


Автор темы
Rock87
здесь недавно
здесь недавно
Сообщения: 72
Зарегистрирован: 05 сен 2013, 11:29
Ф.И.О.: Александр Дмитриевич
Благодарил (а): 6 раз

Re: Программа на С++

Сообщение Rock87 » 29 сен 2015, 16:03

dtv писал(а):Почитайте про механизм организации ОРС-серверов. Может найдёте ответы на часть вопросов.


Спасибо, будем поглядеть.

Alexander писал(а):Как-же вы не знаете количество запросов-то? Судя по тому, что именно вы нажимаете кнопку на экране - с вашей стороны мастер, который и формирует эти запросы. Или ваши слейвы лезут с ответами, когда их не спрашивают? :)


Да, Вы правы, с моей стороны мастер и, конечно, слейвы не лезут с ответами, пока их не спрашивают. Дело в том, что в каждом частном случае можно прикинуть кол-во запросов, определиться со скоростью передачи данных и установить необходимый период тиков таймера. Мне же хотелось бы сейчас сделать что-то типа шаблона, что бы потом можно было применить в другом проекте, если конечно понадобиться. Ну и интересно, конечно, ка-то это реализовано в той же СКАДе. Вот интересно как? Там же разработчик СКАДы заранее не знает сколько каналов организует САКДа-программист.

Ryzhij писал(а):Если у Вас мониторинг, а не управление, то зачем Вам заморачиваться с жёсткой привязкой по времени?
Закончился предыдущий запрос и есть условия на инициацию следующего - вперёд к новым знаниям и запросам!
Закончился предыдущий, но время ещё не подошло - курим бамбук, ждём-с.
Пора бы запросить, но не ответили на предыдущий - ждём-с, ничего страшного, мы же не управляем процессом, а мониторим его.
Ах, надо быстрее? Изменяем настройки связи или переходим на связь по другому каналу, по двум сразу и/или т.п.
Как-то так...

Я бы хотел сделать и управление и мониторинг.


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 2561
Зарегистрирован: 07 окт 2011, 08:12
Ф.И.О.: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 43 раза
Поблагодарили: 71 раз

Re: Программа на С++

Сообщение Ryzhij » 29 сен 2015, 16:15

Rock87 писал(а):Я бы хотел сделать и управление и мониторинг.
В этом случае для каждого тега назначают требуемый период и политики обновления. На основании этого уже и формируются пакеты запросов. Иногда это помогает обновлять не всю, а наиболее важную в данный момент информацию по-быстрее.
Скажем, информация по значениям тегов, не участвующим в формировании активного окна, или не запрашивается вовсе, или запрашивается гораздо реже, чем для тегов активного окна.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


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

Re: Программа на С++

Сообщение Romcheg » 29 сен 2015, 16:23

Судя вопросу - Вы не программист, совсем. Зачем Вам это, а тем более знать как оно устроено в серьезных системах? Под каждою задачу - своя архитектура для ее решения, если вкратце, то в скадах и ОРС-серверах обычно это многопоточная (или асинхронная) модель обработки транзакций, но зачастую и однопоточная. Но - для чего Вам это нужно? Мне кажется, что любой профф. софт типа Скада-системы, или специализированного ОРС справится с Вашей задачей лучше и с меньшими затратами. Или Вам хочется непременно свой велосипед и руки очень чешутся? :)
SCADA+


Автор темы
Rock87
здесь недавно
здесь недавно
Сообщения: 72
Зарегистрирован: 05 сен 2013, 11:29
Ф.И.О.: Александр Дмитриевич
Благодарил (а): 6 раз

Re: Программа на С++

Сообщение Rock87 » 30 сен 2015, 09:00

Ryzhij писал(а):
Rock87 писал(а):Я бы хотел сделать и управление и мониторинг.
В этом случае для каждого тега назначают требуемый период и политики обновления. На основании этого уже и формируются пакеты запросов. Иногда это помогает обновлять не всю, а наиболее важную в данный момент информацию по-быстрее.
Скажем, информация по значениям тегов, не участвующим в формировании активного окна, или не запрашивается вовсе, или запрашивается гораздо реже, чем для тегов активного окна.


Очень интересная мысль. Спасибо.

Romcheg писал(а):Судя вопросу - Вы не программист, совсем. Зачем Вам это, а тем более знать как оно устроено в серьезных системах? Под каждою задачу - своя архитектура для ее решения, если вкратце, то в скадах и ОРС-серверах обычно это многопоточная (или асинхронная) модель обработки транзакций, но зачастую и однопоточная. Но - для чего Вам это нужно? Мне кажется, что любой профф. софт типа Скада-системы, или специализированного ОРС справится с Вашей задачей лучше и с меньшими затратами. Или Вам хочется непременно свой велосипед и руки очень чешутся? :)


Чем вызвана такая реакция? Почему я совсем не программист? :oops:
Мотивация - интерес.
Как это может быть реализовано в однопоточной структуре программы?

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

TEB
специалист по DEIF
специалист по DEIF
Сообщения: 7900
Зарегистрирован: 17 июн 2008, 15:01
Ф.И.О.: Евгений свет Брониславович
Благодарил (а): 38 раз
Поблагодарили: 65 раз
Контактная информация:

Re: Программа на С++

Сообщение TEB » 30 сен 2015, 09:50

Rock87 писал(а):Ну и интересно, конечно, ка-то это реализовано в той же СКАДе. Вот интересно как? Там же разработчик СКАДы заранее не знает сколько каналов организует САКДа-программист.

Этим занимается OPC-сервер, в СКАДА он не входит обычно. Поэтому Вас совершенно правильно направили на путь изучения OPC. Там - все ответы на Ваши вопросы.

И кстати, зачем Вы с нуля пишете OPC когда можно взять готовый?
По вопросам работы Форума можно обратиться ко мне, или по этим контактам.


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 2561
Зарегистрирован: 07 окт 2011, 08:12
Ф.И.О.: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 43 раза
Поблагодарили: 71 раз

Re: Программа на С++

Сообщение Ryzhij » 30 сен 2015, 09:55

TEB писал(а):Этим занимается OPC-сервер, в СКАДА он не входит обычно.
Да, но многие SCADA для MODBUS имеют свои встроенные драйвера.
Медлительность этого протокола, особенно при применении его на линиях последовательной связи, побуждает разработчиков к этому.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр

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

TEB
специалист по DEIF
специалист по DEIF
Сообщения: 7900
Зарегистрирован: 17 июн 2008, 15:01
Ф.И.О.: Евгений свет Брониславович
Благодарил (а): 38 раз
Поблагодарили: 65 раз
Контактная информация:

Re: Программа на С++

Сообщение TEB » 30 сен 2015, 10:34

Ryzhij писал(а):
TEB писал(а):Этим занимается OPC-сервер, в СКАДА он не входит обычно.
Да, но многие SCADA для MODBUS имеют свои встроенные драйвера.
Есть такое, у нас так и есть.
Ryzhij писал(а):Медлительность этого протокола, особенно при применении его на линиях последовательной связи, побуждает разработчиков к этому.

А как можно ускорить опрос по изначально медленной линии?
Мы например решаем проблему скорости на стороне слейвов: в слейвах компонуем адресное пространство так чтобы за две посылки можно было всё что надо прочитать и записать. Но мастер с его OPC тут ни при чём.
По вопросам работы Форума можно обратиться ко мне, или по этим контактам.


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 2561
Зарегистрирован: 07 окт 2011, 08:12
Ф.И.О.: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 43 раза
Поблагодарили: 71 раз

Re: Программа на С++

Сообщение Ryzhij » 30 сен 2015, 10:57

TEB писал(а):А как можно ускорить опрос по изначально медленной линии?
Оптимизировать адресное пространство в слейвах - очень хорошая идея и многие производители приборов сейчас позволяют это делать, собирая интересующие параметры в пакет при настройке прибора.
А SCADA, имея свой встроенный драйвер, просто не требует лишнего из медленного канала.

PS Более того, отправляя номер индицируемого экрана в слейв, SCADA-система может побудить слейв сформировать в буфере обмена пакет необходимых данных для быстрого чтения мастером, а также соответствующим образом интерпретировать (парсить) данные в буфере для передаваемой мастером информации.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


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

Re: Программа на С++

Сообщение Romcheg » 30 сен 2015, 12:13

Rock87 писал(а):Чем вызвана такая реакция? Почему я совсем не программист? :oops:
Мотивация - интерес.
Как это может быть реализовано в однопоточной структуре программы?


Потому что у программиста такой вопрос бы не возник, это достаточно очевидные вещи. Даже разработчик средней квалификации может на вскидку сказать несколько методик организации такого, но среди них НИКОГДА не будет таймера. :)
SCADA+

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

Siluet
здесь недавно
здесь недавно
Сообщения: 68
Зарегистрирован: 05 сен 2014, 12:17
Ф.И.О.: Виталий Анатольевич Куроткин
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 3 раза

Re: Программа на С++

Сообщение Siluet » 02 окт 2015, 18:11

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

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

uni
здесь недавно
здесь недавно
Сообщения: 44
Зарегистрирован: 28 май 2015, 14:11
Ф.И.О.: Мезенцев Вячеслав Николаевич
Откуда: Екатеринбург
Контактная информация:

Re: Программа на С++

Сообщение uni » 02 окт 2015, 19:16

Таймер конечно будет ;)

Если вы делаете что-то уровня конфигуратора, то вам будут заранее известны параметры, значения которых нужно считывать. Обычно конфигураторы состоят из набора страниц-форм, при переключении на страницу делается актуальным некий список параметров, который нужно считывать. Каждому параметру сопоставлена callback-функция для его интерпретации и визуализации. Чтение данных по протоколу и визуализация должны быть в разных потоках. Поскольку общую память эти потоки будут использовать, то нужен механизм блокировки. Это уже отдельная тема, в билдере есть методы Lock() и Unlock(), упрощающие жизнь при межпоточном взаимодействии.

Что касается модбаса и работы с ним. Можете посмотреть как это сделано у других. Существует ActiveX компонент (mbaxp.ocx - это какая-то старая, но работающая версия), который я слегка подлечил, которым можно пользоваться на первых порах, чтобы продумать идеологию пакетной обработки. Компонент имеет неплохую документацию. Ещё есть исходники на JavaScript, которые показывают как этот компонент может быть устроен изнутри. Я реализовал работу по протоколу modbus из однопоточного JavaScript.

Если обобщить, то вы должны использовать потоки и очередь запросов. Очередь формируется по таймерам и высвобождается в темпе работы по модбасу. Элементы этой очереди должны иметь полную информацию о том что читать, откуда и куда потом вернуть, не забывая и об обработке ошибок.

Ссылки:

0. MBAXP Modbus ActiveX Control.
1. Modbus на Pinboard II. Тестовое приложение.
2. HomeControl (svn, vb6, mbaxp.ocx).
3. Реализация Modbus-RTU на JavaScript.


Вернуться в «Верхний уровень автоматизации»



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

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