PDA

Просмотр полной версии : Организация очереди



azyablin
22.02.2018, 20:41
Доброго вечера.
Есть вопрос по организации очереди FIFO на ПЛК 110. В ПЛК генерится каждые 400 ms некая структура. Её нужно отправлять на сервер, время отклика которого может достигать нескольких секунд.
Собственно вопрос:
Как организовать очередь FIFO. Я слышал, что есть modbus fifo, но примеров программ не нашёл. Если кто даст ссылку, буду признателен.

capzap
22.02.2018, 20:47
вот ведь не задача, ссылка то вот она http://www.owen.ru/forum/showthread.php?t=25216&p=221238&viewfull=1#post221238

krollcbas
22.02.2018, 20:55
Как обычно организовываю я обмен в ответственных системах:
1. Между компонентами пускаю две инкриминируемые переменные.
Одну, например прибавляет контроллер, а вторую сервер, если понял, что контроллерная переменная изменилась. И так между всеми компонентами сети, где только это возможно сделать. Назовем это "метод эха". Если переменные стоят - все плохо, к доктору.
Так на КуАЭС удалось решить множество проблем с локальной сетью.
2. Команды пишет сервер. Сбрасывает функциональный блок, если он ее принял.
3. Значения чтоб индицировались без задержек, Modbus TCP надо сильнее сегментировать и разбивать во времени. Будет работать лучше

На сервер мы ничего не отправляем, наоборот, сервер ввода вывода ведет опрос и забирает то, что просит.
Можно по разному изворачиваться, но самое простое спросить себя - а зачем?

azyablin
22.02.2018, 20:55
Вроде то, что надо. Спасибо.

melky
22.02.2018, 21:01
krollcbas не помню точного слова (есть определение), но простым языком это называется отложенная запись.
Когда в Scada данные не просто должны поступать когда она что-то опросила, а все записи с указанным периодом после восстановления связи. Ну ессно тот кусок, который вкладывается в размер буфера, 10 последних записей, 50, 100 и так далее, сколько выставлено и есть возможность.

azyablin
22.02.2018, 21:01
Как обычно организовываю я обмен в ответственных системах:
1. Между компонентами пускаю две инкриминируемые переменные.
Одну, например прибавляет контроллер, а вторую сервер, если понял, что контроллерная переменная изменилась. И так между всеми компонентами сети, где только это возможно сделать. Назовем это "метод эха". Если переменные стоят - все плохо, к доктору.
Так на КуАЭС удалось решить множество проблем с локальной сетью.
2. Команды пишет сервер. Сбрасывает функциональный блок, если он ее принял.
3. Значения чтоб индицировались без задержек, Modbus TCP надо сильнее сегментировать и разбивать во времени. Будет работать лучше

На сервер мы ничего не отправляем, наоборот, сервер ввода вывода ведет опрос и забирает то, что просит.
Можно по разному изворачиваться, но самое простое спросить себя - а зачем?

Не совсем точно я выразился. Цель - чтобы сервер получил эти данные. Очередь нужна типа точка-точка (например как в JMS ). А как это сделать- как раз в этом и есть вопрос.

krollcbas
22.02.2018, 21:25
Все перечитал. Задача офигенская. Организовать промежуточный буфер. Так делал на PFC200 WAGO, когда у меня MySQL не успевал запросы забирать и укладывать на флешку. Да, действительно, тогда укладывал события в промежуточный буфер строк на 100 и затем порциями укладывал данные в базу.
Запись в базу инициировал сам контроллер, если прошлое событие <> настоящему.

Топикстартер говорит про ПЛК100. Какие к черту ответственные применения, вы что?
Зачем тут какая-то наука всплывает?

Ну надо так надо. Трудно что ли запись в массивы организовать, затем сдвигать запись по индексу, если она забрана.
Опять таки один единственный вопрос - Зачем? Что за такая экономная сверхтехнология со скадой и ПЛК100?

azyablin
22.02.2018, 21:35
Ну надо так надо. Трудно что ли запись в массивы организовать, затем сдвигать запись по индексу, если она забрана.
Опять таки один единственный вопрос - Зачем? Что за такая экономная сверхтехнология со скадой и ПЛК100?

Негодование ваше понятно. Безусловно можно всё организовать и запрограммировать. Но человек я от природы ленивый, и если есть готовые решения, то я предпочитаю использовать их. Тем паче, что стандарт есть - 24 (18 Hex) Read FIFO Queue . Если подскажете где взять это решения, то можете меня хоть обматерить.