SCADA под Linux (Есть ли законченный продукт? Желательно OpenSource...)

Софт под Linux, разные программы, но только связанные с Linux

Модератор: /dev/random

Volckoff
Сообщения: 13
ОС: Windows XP Prof

Re: SCADA под Linux

Сообщение Volckoff »

«…Проблема может быть … из-за разного понимания …»

Практика разработки нескольких проектов однозначно остановила меня на выводе, что «целевое» понимание формируется вне индивидуальности и может быть сформировано в коллективе на основе осознании цели и способов её достижения и, соответственно, на основе декларации определений. Т.е. сначала надо определиться и ответить на вопросы:
1. Для чего мы это делаем
2. Как мы это пытаемся сделать
3. Что входит в словарь проекта

Для примера приведу термин «AppLib». Кому и что он говорит? Никому и ничего. Т.к. это внутренний термин проекта, для моих разработчиков определяющий ядро исполнительной системы, имеющий универсальный шлюз на прикладной уровень разработки. Понятно, что если один человек говорит на таком птичьем языке, а второй – пытается понять, то без «перевода» диалог будет просто бессмысленным…

«… Законы надо не пробовать, а изучать….»

Изучать можно до бесконечности… Не знаю – почему я привязался к авиации, но её история – сплошная цепь проб, удачных и неудачных, иногда трагических. Думается, что, если бы только изучали законы, то мы не имели в этой области такого уровня развития…

«…Какая должна быть цель?...»
Цель – очень амбициозная… Создать стандарт(!) на построение таких систем, не зависящий от корпоративных решений типа ОРС, Siemens, Microsoft etc. Их можно и нужно, на настоящий момент, использовать, но «смотреть в рот» и слепо идти за, зачастую, очень непродуманными решениями – дорога в никуда. Имхо. Сейчас очень хороший период, кода недорогие, надёжные решения могут отодвинуть построенную на откатах систему, взамен дав прозрачность и открытость решений. Идеализм? – Да! Но без подобного идеализма мы все погрязнем в болоте. Опять-таки ИМХО.

«…Я когда-то пытался разбираться с OPC-сервером и ничего такого, что могло бы облегчить решение задач, которые требовались заказчику, я не обнаружил…»

Как только произносится слово «ОРС», то сразу же вылезает DCOM, и сразу же подразумевается Windows. При этом, ОРС сам ничего не делает, это интерфейс передачи данных. Не более. Для обеспечения сопряжения разнородных (от разных изготовителей) систем. Дойная корова. И найти что-то в нём сверх этого – трудно.

«Также диспетчер имеет возможность посмотреть на мнемосхеме состояние любого объекта и значения аналоговых и дискретных параметров…»

Требования, в том числе стандартные, типа указанных, должны быть реализованы в любой систем. У нас основной вопрос не «Что?», а «Как?»

«…А куда его можно "вставить", и, главное, кто его будет настраивать..»

Тракт локального управления должен использоваться там, где он необходим. Это просто подсистема. Нет управления – «притягивать» его «за уши» в проект смыла нет. А настраивать… Настраивает тот, кто создаёт прикладную систему. Это очевидно.

«…почему мне понравился линукс … Мне в нём понравились очереди сообщений…»
Хороший инструмент, есть правда одно НО, в стандартном ядре (текущего положения дел, увы – не знаю) время нахождения события в очереди не регламентировано… Т.е. оно может находиться там и мСек, а может и Сек., что непозволительно для большинства систем сбора и обработки. В RT-примочках для линукса этот эффект как-то обходят.
Для альтернативы рассмотрим… UDP. Привязав порт к приемнику(источнику), можно данные кидать на любой узел (программу) сети. Правда UDP не в чистом виде, а чуть-чуть дополненный, но совсем чуть-чуть. А если взять SCTP – то вообще сказка получается. Рекомендую ознакомиться с этим новым сетевым протоколом (Stream Control Transport Protocol).

Новая часть.

Рассматривая вопрос о создании ядра, я как раз и исходил из того, что большинство решений обсуждаются не со стороны «как это работает», а со стороны «что это делает». Архивация, визуализация и т.п. рассматривается как цель. У меня нет такой цели. Архивы есть, а цели – нет. Так как цель – сформировать (и реализовать по возможности) набор принципов, реализующих СИСТЕМУ отношений. Сколько копий поломано на выборе ОС для системы? Сколько самопальных программ написано для реализации одних и тех же функций. Тут как раз рождается страшное следствие – из-за разнородности подходов, даже с применением средств разработки от ведущих производителей, разработки живут (во всяком случае на постсоветском пространстве) до тех пор, пока разработчик (почти всегда конкретная персоналия) уделяет ей время. Может, конечно, я ошибаюсь, но моя практика…

Альтернатива. Например. В силу унификации языка сообщений формат архива таков, что он просто протоколирует события (id системы, id параметра, время и т.п.) в БД. В простейшем случае их можно упаковать в обычный текстовый файл БЕЗ ПОТЕРИ ИНФОРМАТИВНОСТИ, а при желании – в любую, наперед заданную, БД. (Зависит от уровня сложности системы). При этом от системы к системе двоичный код архиватора и пр. не изменяется! Т.е. пишется всего одна программа!

Для реализации подобного подхода необходимо на уровне промежуточного контроллера провести первичную обработку сигнала, привести его значение к значению параметра (для составных параметров) и выдать информацию в сеть, где её и заархивируют и визуализируют и ОРСиют :tongue:.


Вопрос. На моей практике не встречались системы, которые не разбивались бы на подсистемы, с меньшим количеством параметров (собственно туда и просится контроллер первичной системы). Приведённые количественные характеристики – все эти сотни дискретов и тысячи аналоговых параметров – неужели не делятся на привычные для того же оператора объекты?
Типа Цех - компрессорная, агрегат, система охлаждения и т.п.?
Спасибо сказали:
MiK13
Сообщения: 1178
ОС: Linux Debian

Re: SCADA под Linux

Сообщение MiK13 »

Volckoff писал(а):
25.05.2009 11:29
Практика разработки нескольких проектов однозначно остановила меня на выводе, что «целевое» понимание формируется вне индивидуальности и может быть сформировано в коллективе на основе осознании цели и способов её достижения и, соответственно, на основе декларации определений. Т.е. сначала надо определиться и ответить на вопросы:
1. Для чего мы это делаем
2. Как мы это пытаемся сделать
3. Что входит в словарь проекта

Для примера приведу термин «AppLib». Кому и что он говорит? Никому и ничего. Т.к. это внутренний термин проекта, для моих разработчиков определяющий ядро исполнительной системы, имеющий универсальный шлюз на прикладной уровень разработки. Понятно, что если один человек говорит на таком птичьем языке, а второй – пытается понять, то без «перевода» диалог будет просто бессмысленным…
Совершенно верно. Именно в коллективе и когда есть цель, может быть и не очень но всёже конкретная.

«… Законы надо не пробовать, а изучать….»

Изучать можно до бесконечности…

А другого пути нет в принципе.

Не знаю – почему я привязался к авиации, но её история – сплошная цепь проб, удачных и неудачных, иногда трагических.
В этом и заключается изучение законов -- создание гипотезы, построение теории, проверка её практикой, анализ результатов опыта, корректировка теории и т.д.
Volckoff писал(а):
25.05.2009 11:29
«…Какая должна быть цель?...»
Цель – очень амбициозная… Создать стандарт(!) на построение таких систем, не зависящий от корпоративных решений типа ОРС, Siemens, Microsoft etc. Их можно и нужно, на настоящий момент, использовать, но «смотреть в рот» и слепо идти за, зачастую, очень непродуманными решениями – дорога в никуда. Имхо. Сейчас очень хороший период, кода недорогие, надёжные решения могут отодвинуть построенную на откатах систему, взамен дав прозрачность и открытость решений. Идеализм? – Да! Но без подобного идеализма мы все погрязнем в болоте. Опять-таки ИМХО
По моему тоже :)

> Как только произносится слово «ОРС», то сразу же вылезает DCOM, и сразу же подразумевается Windows. При этом, ОРС сам ничего не делает, это интерфейс передачи данных. Не более. Для обеспечения сопряжения разнородных (от разных изготовителей) систем. Дойная корова. И найти что-то в нём сверх этого – трудно.
По этой причине мне и не нравился OPC, т.к. я привык работать с данными на низком уровне, а всякие сложные системы мне не нравятся тем, что они накладывают ограничения, да к тому же требуют их установки. Да и закрытость вызывает подозрение.
Ещё 14 лет назад мы решили, что описание всех сигналов будет в таблице формата Paradoх -- есть удобные средства редактирования таких таблиц. Но возникла проблема чтения их из своей программы (на DOSе). Нашёл Paradox Engine, но с ним были проблемы, да и программа сильно в объеме возрастала. В итоге нашёл описание этого формата и реализовал чтение баз данных на паскале. Получилось совсем немного

> Требования, в том числе стандартные, типа указанных, должны быть реализованы в любой систем. У нас основной вопрос не «Что?», а «Как?»
но первоначальный вопрос всё-таки «Что?», и только после ответа на него можно отвечать на вопрос «Как?».

> «…почему мне понравился линукс … Мне в нём понравились очереди сообщений…»
Хороший инструмент, есть правда одно НО, в стандартном ядре (текущего положения дел, увы – не знаю) время нахождения события в очереди не регламентировано… Т.е. оно может находиться там и мСек, а может и Сек., что непозволительно для большинства систем сбора и обработки.

А где написано про нерегламентированность и, главное, что сообщение может застрять в очереди на секунды? Да и по какой причине?

Volckoff писал(а):
25.05.2009 11:29
Для альтернативы рассмотрим… UDP. Привязав порт к приемнику(источнику), можно данные кидать на любой узел (программу) сети. Правда UDP не в чистом виде, а чуть-чуть дополненный, но совсем чуть-чуть. А если взять SCTP – то вообще сказка получается. Рекомендую ознакомиться с этим новым сетевым протоколом (Stream Control Transport Protocol).
Почитал немного про SCTP -- возникла аналогия:
"TCP -> SCTP" и "Программные каналы -> Очереди сообщений"

Volckoff писал(а):
25.05.2009 11:29
Новая часть.

Рассматривая вопрос о создании ядра, я как раз и исходил из того, что большинство решений обсуждаются не со стороны «как это работает», а со стороны «что это делает». Архивация, визуализация и т.п. рассматривается как цель. У меня нет такой цели. Архивы есть, а цели – нет. Так как цель – сформировать (и реализовать по возможности) набор принципов, реализующих СИСТЕМУ отношений.
Идея хорошая, но очень много неясного.

Volckoff писал(а):
25.05.2009 11:29
Сколько копий поломано на выборе ОС для системы?
Часто это определяется головной организацией; мы купили Windows, мы за него заплатили, это "самая передовая система" и делать надо на ней. А базы данных -- только Oracle, мы тоже его купили, это самая мощная СУБД и всё надо делать на ней!

Volckoff писал(а):
25.05.2009 11:29
Сколько самопальных программ написано для реализации одних и тех же функций. Тут как раз рождается страшное следствие – из-за разнородности подходов, даже с применением средств разработки от ведущих производителей, разработки живут (во всяком случае на постсоветском пространстве) до тех пор, пока разработчик (почти всегда конкретная персоналия) уделяет ей время. Может, конечно, я ошибаюсь, но моя практика…
Наверняка очень много. Но что касается системы диспетчерского контроля, которую делали мы... я периодически общаюсь с программистами из одной организации... система работает больше 10 лет. Несколько лет назад я кое что в ней доделывал для их головной организации. Но саму систему не трогал.
Volckoff писал(а):
25.05.2009 11:29
Альтернатива. Например. В силу унификации языка сообщений формат архива таков, что он просто протоколирует события (id системы, id параметра, время и т.п.) в БД. В простейшем случае их можно упаковать в обычный текстовый файл БЕЗ ПОТЕРИ ИНФОРМАТИВНОСТИ, а при желании – в любую, наперед заданную, БД. (Зависит от уровня сложности системы). При этом от системы к системе двоичный код архиватора и пр. не изменяется! Т.е. пишется всего одна программа!
В нашем варианте данные писались в двоичный файл записями по 32 байта. Мне это число понравилось из-за отладки -- в хексовом вьювере очень удобно просматривать и анализировать такие записи.
Про текстовый файл я думал, и сейчас это может оказаться очень удобным при современных мощностях компьютеров нужные данные очень удобно фильтровать grep'ом.

Volckoff писал(а):
25.05.2009 11:29
Вопрос. На моей практике не встречались системы, которые не разбивались бы на подсистемы, с меньшим количеством параметров (собственно туда и просится контроллер первичной системы). Приведённые количественные характеристики – все эти сотни дискретов и тысячи аналоговых параметров – неужели не делятся на привычные для того же оператора объекты?
Типа Цех - компрессорная, агрегат, система охлаждения и т.п.?

А я другого варианта и не вижу, как делить и строить иерархию.
В нашем варианте все сигналы делились по объектам. Каждый объект -- это десятки, сотни (в принципе и тысячи) аналоговых и дискретных сигналов. Но для обработки и архивирования это особого значения не имеет.
А вот для отображения -- да.
Первоначально все сигналы идентифицировались номерами, причём их привязывали к аппаратным адресам. Из-за этого возникали сложности, когда надо было изменить адрес, с которого принимается сигнал.
В нашем варианте номера заменены на "названия" ("шифры") сигналов. И каждый сигнал соответствует конкретному параметру объекта, независимо от того, как он получается. А уже при отображении можно выбирать любый группы сигналов.
Спасибо сказали:
Volckoff
Сообщения: 13
ОС: Windows XP Prof

Re: SCADA под Linux

Сообщение Volckoff »

MiK13 писал(а):
25.05.2009 22:27
...
По этой причине мне и не нравился OPC, т.к. я привык работать с данными на низком уровне, а всякие сложные системы мне не нравятся тем, что они накладывают ограничения, да к тому же требуют их установки. Да и закрытость вызывает подозрение....
...Нашёл Paradox Engine...


Я бы ввел термин "целесообразность применения". Но в рамках моей задачи ОРС - не более чем шлюз для совместимости с возможно установленной у заказчика скадой. А paradox... частный случай представления. Необходимо формулировать критерии "целесообразности применения". Никаких плюсов пока не вижу.

MiK13 писал(а):
25.05.2009 22:27
но первоначальный вопрос всё-таки «Что?», и только после ответа на него можно отвечать на вопрос «Как?».


Тут уже было про оптимистов и пессимистов. Не хочется впадать в полемику...

MiK13 писал(а):
25.05.2009 22:27
А где написано про нерегламентированность и, главное, что сообщение может застрять в очереди на секунды? Да и по какой причине?


Лет пять назад был предупреждён спецом об этом эффекте. Сильно не разбирался... На практике сталкивался, но проблемы были порождены не самой очередью, а ошибками в логике, приводившими к значительному увеличению размера очереди...

MiK13 писал(а):
25.05.2009 22:27
Почитал немного про SCTP -- возникла аналогия:
"TCP -> SCTP" и "Программные каналы -> Очереди сообщений"


Все очереди - очереди сообщений, как бы они не реализовывались программно... По большому счету, среда передачи сообщений не играет значительной роли, за исключением вопроса накладных расходов кода для реализации гарантированной доставки сообщения. Чем больше в интерфейсе сервиса, тем лучше. А SCTP = TCP + UDP. И это ценно! Во многих отношениях и для обсуждаемой задачи в частности...

MiK13 писал(а):
25.05.2009 22:27
Идея хорошая, но очень много неясного.


Так в том и цель - задавать вопросы и выяснять - тогда я смогу проверить целостность моих предложений, а Вы - если интересно - получить дополнительную информацию.

MiK13 писал(а):
25.05.2009 22:27
...мы купили Windows, мы за него заплатили, это "самая передовая система" и делать надо на ней. А базы данных -- только Oracle, мы тоже его купили, это самая мощная СУБД ...


Кризис, батенька, кризис. И если покупать СУБД не для того, что бы решить конкретную задачу, в рамках которой эта СУБД оптимальна, а бегать со словами - "да мы тут с Oracle балуемся"... Штанишки так и потеряем. Смысла нет экскаватор на огороде вместо лопаты применять...
Тем паче в базовой реализации хочется уйти от лицензий. В прикладной - да ради Бога. Хотите - платите и получайте!

MiK13 писал(а):
25.05.2009 22:27
Наверняка очень много. Но что касается системы диспетчерского контроля, которую делали мы... я периодически общаюсь с программистами из одной организации... система работает больше 10 лет. Несколько лет назад я кое что в ней доделывал для их головной организации. Но саму систему не трогал.


В том, что светлые головы порождают устойчиво работающие системы я нисколько не сомневаюсь. Ещё раз - прикладную систему возможно реализовать несколькими (десятками, сотнями?...) способами. Не в этом дело. Здесь речь идёт о другом - а что, собственно, объединяет эти решения, т.с. на концептуальном уровне.
Одна файловая система, другая, третья, и т.д. - все они хранят информацию на носителе, которая в первую очередь и интересна юзеру. Файлу всё равно где храниться... Но возникают вопросы отказоустойчивости, надёжности... И они инвариантны к конкретной информации пользователя. Они из другой области.

MiK13 писал(а):
25.05.2009 22:27
В нашем варианте данные писались в двоичный файл записями по 32 байта. Мне это число понравилось из-за отладки -- в хексовом вьювере очень удобно просматривать и анализировать такие записи...


А привести эти байты к человеческому восприятию - трудно было?
Ведь каждый байт - это информация о чём-то, а не просто абстрактная единица информации. Мы имеем вполне детерминированную задачу. Какой смысл оперировать подобными категориями??? Что бы враги ничего не поняли? Шутка.


MiK13 писал(а):
25.05.2009 22:27
...В нашем варианте все сигналы делились по объектам. Каждый объект -- это десятки, сотни (в принципе и тысячи) аналоговых и дискретных сигналов. Но для обработки и архивирования это особого значения не имеет.
А вот для отображения -- да.
Первоначально все сигналы идентифицировались номерами, причём их привязывали к аппаратным адресам. Из-за этого возникали сложности, когда надо было изменить адрес, с которого принимается сигнал.
В нашем варианте номера заменены на "названия" ("шифры") сигналов. И каждый сигнал соответствует конкретному параметру объекта, независимо от того, как он получается. А уже при отображении можно выбирать любый группы сигналов.


Вот-вот. И так привяжем и сяк, здесь декодируем из двух двубайтных слов одно вещественное, а здесь - восемь дискретных и т.п. и т.д. И ...
Нет слов. Есть категории. Тип, канал подключения, группировка, устройство и т.п. Вот этими категориями мы будем пользоваться..

Новое:

Подразумевается, что на каждый канал связи отводится свой процесс, который опрашивает или считывает значения с устройства связи и формирует событие об изменении первичного сигнала. Подразумевается двунаправленный конвейер с внутренней буферизацией - один поток выводит, второй - разбирает. Пакет данных поступает на обработку объекту класса параметр и проверяется на корректность, нарушения и аварии. В случае наличия - выполняется вызов ядра системы - обработай исключение типа... Это может быть сигналом к чему угодно - запуску логики обработки, выдаче сигналов на сигнализацию и т.п. ФПроцессор в отдельном потоке обрабатывает приведённые в нужные единицы значения параметров и основная логика работает независимо, с точностью до определения точек алгоритма для обработки аварии и (или) перевода в ручной режим (При необходимости)
Значения параметров, определенных разработчиком как Тэги (системные параметры) при изменении передаются на верхний уровень (Host).
По тем же принципам пишутся локальные протоколы в файл и в память. Т.е. на уровне потока. Причём стандартное состояние всех потоков - ожидание или сон, что очень важно для работы системы по известным причинам...

На сегодня - всё...
Спасибо сказали:
MiK13
Сообщения: 1178
ОС: Linux Debian

Re: SCADA под Linux

Сообщение MiK13 »

Volckoff писал(а):
26.05.2009 14:41
Я бы ввел термин "целесообразность применения". Но в рамках моей задачи ОРС - не более чем шлюз для совместимости с возможно установленной у заказчика скадой. А paradox... частный случай представления. Необходимо формулировать критерии "целесообразности применения". Никаких плюсов пока не вижу.
Подностью согласен. А плюс системы Paradox -- можно было редактировать стандартными средствами с GUIшным интерфейсом в программе, написаной на Delphi.
В остальном действительно никаких преимуществ Paradox не имел.
Volckoff писал(а):
26.05.2009 14:41
MiK13 писал(а):
25.05.2009 22:27
А где написано про нерегламентированность и, главное, что сообщение может застрять в очереди на секунды? Да и по какой причине?
Лет пять назад был предупреждён спецом об этом эффекте. Сильно не разбирался... На практике сталкивался, но проблемы были порождены не самой очередью, а ошибками в логике, приводившими к значительному увеличению размера очереди...
Я использовал передачу данных через очередь сообщений. Пока единственные проблемы были -- когда забывал запускать программу, принимающую сообщения. В результате очередь быстро заполнялась и программы "зависали". Но никаких задержек пока не замечал. Да и не пойму, откуда они могут возникнуть, если фактически это просто передача данных через общую область памяти. Т.е. накладные расходу тут должны быть меньше, чем в случае передачи по UDP и TCP.
Почитав статью про SCTP, я узнал, что, оказывается, TCP, в отличие от UDP не гарантирует приём пакетов (а UDP, в отличие от TCP не гарантирует доставку). То, что SCTP гарантирует и доставку и приём пакетов, очень хорошо. Надо будет разобраться с этим протоколом. А то приходилось при приёме пакетов специально искать начало, т.к. оно могло сместиться. В SCTP, как я понял, такого быть не должно.

Volckoff писал(а):
26.05.2009 14:41
Чем больше в интерфейсе сервиса, тем лучше.
Вопрос спорный. В Delphi есть компоненты для работы с TCP и UDP. Вроде очень удобно. Но после попыток их испльзования я остановился на классическом обмене через send и recv.

Volckoff писал(а):
26.05.2009 14:41
Ещё раз - прикладную систему возможно реализовать несколькими (десятками, сотнями?...) способами. Не в этом дело. Здесь речь идёт о другом - а что, собственно, объединяет эти решения, т.с. на концептуальном уровне.
Вот тут, пожалуй, у меня самый большой пробел:( В институте я ничего подобного не изучал. Изучать самому принципы создания, когда не понятно, к чему (и когда) это можно будет применить -- задача, в общем, бессмысленная. А когда мы начали создавать диспетчерскую систему, я понял, что основное, что нужно диспетчерам -- это иметь возможность в любой момент узнать текущее значение любого сигнала, посмотреть, как менялись значения сигналов, какие были переключения и иметь возможность управлять сигналами. Ещё должна быть возможность ручного ввода значений сигналов на случай, если их значения передаются, например, по телефону голосом (если нет аппаратуры измерения этих значений).
И вот исходя из этих требований я решил тогда, что должен быть один постоянный массив, в котором храняться текущие значения всех сигналов вместе с их свойствами, а также протокол всех событий, которые происходат в системе.
Всё это я решил разместить в двоичных файлах, структура которых жёстко определил. При этом, зная эту структуру, можно было легко написать любую программу, которая бы смогла получить любые требуемые данные. Как на том компьютере который собирает эти данные, так и на любом другом, имеющим доступ (по сети) к файлам этого компьютера. И при этом использовались только базовые операции работы с файлами -- lseek и read. Иногда (кое где) write (точнее, функции были другими, т.к. язык был Pascal, но суть эта).

Volckoff писал(а):
26.05.2009 14:41
MiK13 писал(а):
25.05.2009 22:27
В нашем варианте данные писались в двоичный файл записями по 32 байта. Мне это число понравилось из-за отладки -- в хексовом вьювере очень удобно просматривать и анализировать такие записи...

А привести эти байты к человеческому восприятию - трудно было?
Ведь каждый байт - это информация о чём-то, а не просто абстрактная единица информации. Мы имеем вполне детерминированную задачу. Какой смысл оперировать подобными категориями??? Что бы враги ничего не поняли? Шутка.
А зачем приводить байты к "человеческому восприятию", что это даёт и что это вообще такое? И в чём премущество, например, группы байтов со значениями 194, 234, 235, 46, перед байтом со значением 1? В любом случае нужна программа, которая бы отобразила их в том виде, который был бы понятен человеку. А для неё это значенния не имеет. Я тогда написал простую DOSовскую программу и в FARе связал её с расширением файла такого протокла. В результате можно было нажатием клавиши F3 просмотреть протокол событий за любое число. Правда, это использовалось только для отладки.
А "двоичный" формат перед "текстовым" имеет ещё преимущество в прямом доступе. Среди функций "сервера" была функция "квитирования" события. События определённого типа требовали реакции оператора. Наример, выход значения параметра за аварийную границу, или открытие двери в какое-то помещение. Для этого в в поле номера отводился один бит. При формировании события он был установлен и оператор имел возможность дать команду сбросить этот бит. А для этого нужно было иметь возможность изменить этот бит в файле, к которому добавляются новые записи. Как это сделать в случае текстового файла, я не представляю.

Volckoff писал(а):
26.05.2009 14:41
Вот-вот. И так привяжем и сяк, здесь декодируем из двух двубайтных слов одно вещественное, а здесь - восемь дискретных и т.п. и т.д. И ...
Нет слов. Есть категории. Тип, канал подключения, группировка, устройство и т.п. Вот этими категориями мы будем пользоваться..
Это просто разные уровни одной системы. На более высоком идёт оперирование каналами, группами и т.д. А на более низком -- уже конкретное представление.
Volckoff писал(а):
26.05.2009 14:41
Новое:

Подразумевается, что на каждый канал связи отводится свой процесс, который опрашивает или считывает значения с устройства связи и формирует событие об изменении первичного сигнала...
В системе, которую мы делали, информация поступала из самых разных мест по каналам связи (по-моему, 300 бод) в аппаратуру, разработанную вряди меньше, чем 30 лет назад (а может быть и гораздо больше). В ней эти потоки объединялись в один поток и через нами разработанный контроллер поступали по RS-232 в персоналку. Фактически там был уже один поток, который и принимала одна DOSовская программа. Потом понадобился приём данных от телемеханики другого типа. Это было реализовано дополнительной программой приёма этих данных и записи их в файл обмена. А в основную программу был добавлен кусок, который читал данные из этого файла. И через него мог выдавать команды на управление. Затем аналогичным образом была доработана программа для приёма информации от телемеханики ещё двух типов. Результаты записывались в файл с текущими данными (на самом деле их тогда было два) и файлы протоколов (их три типа), а также в виде дейтаграмм выдавались в сеть, где их могли принимать компьютеры диспетчеров. Также эти компьютеры (до 5 штук) могли подключаться к серверу сбора данных для выдачи различных команд (управления, ручной ввод значений, квитирование)
Volckoff писал(а):
26.05.2009 14:41
Пакет данных поступает на обработку объекту класса параметр и проверяется на корректность, нарушения и аварии. В случае наличия - выполняется вызов ядра системы - обработай исключение типа... Это может быть сигналом к чему угодно - запуску логики обработки, выдаче сигналов на сигнализацию и т.п.
У нас примерно так и было. Но я не понял что подразумевается по вызовом ядра системы и зачем это надо. И какая логика обработки в этом случае может быть запущена?
Я бы её сюда не вставлял -- делал бы это либо на более высоком уровне в отдельной программе, либо (если требуется быстрая реакция) на более низком.

>
Процессор в отдельном потоке обрабатывает приведённые в нужные единицы значения параметров и основная логика работает независимо, с точностью до определения точек алгоритма для обработки аварии и (или) перевода в ручной режим (При необходимости)

Я бы примерно так это и делал. Только не в отдельном потоке, а в отдельной программе. Возможно и на другом компьютере.
По поводу передачи данных по сети. В той систему мы использовали IPX, точнее NetBIOS, который шёл через него. Он позволял передавать как дейтаграммы группе (аналог частично широковещательного UDP), так и данные по каналу (аналог TCP). Также компьютеры диспетчером имели возможность напрямую (сеть MS Windows) читать протоколы и текущие значения.
Сейчас я бы всё это делал на основе IP (UDP и TCP, а когда разберусь, то и SCTP), а также протоколов прикладного уровня -- Telnet (SSH), HTTP и других.
Спасибо сказали:
Volckoff
Сообщения: 13
ОС: Windows XP Prof

Re: SCADA под Linux

Сообщение Volckoff »

"А "двоичный" формат перед "текстовым" имеет ещё преимущество в прямом доступе. Среди функций "сервера" была функция "квитирования" ..."

Зачем использовать файл в качестве оперативного массива, я по правде говоря, не понял. Та же схема квитирования выглядит примерно так. При возникновении "аномалии" - параметр регистрируется в динамическом списке текущих, неквитированных, "аномалий" (нарушений и пр.), и при сигнале оператора, откуда бы он не исходил - это уровень операторского интерфейса - система выставляет им признак - квитировано, с выдачей сопутствующих сообщений. При чем здесь файл? Это сугубо структурные отношения. А самое главное - контроллер, вообще говоря, может не иметь файлового носителя. И, в дополнение, система "затачивается" не под конкретную ОС, а ОС выбирается по требованиям узла системы. Тем линукс и хорош, что он портирован на многие типы контроллеров. А вообще различных ОС достаточно много. DOS и его клоны я вобще практически не рассматриваю, хотя на icpdas-контроллерах (www.icpdas.com) кое-что из конечных узлов мы и делаем. Так, например, ихняя FR-NET сеть для дискретных подсистем ну очень замечательно смотрится...


"...я понял, что основное, что нужно диспетчерам -- это иметь возможность в любой момент узнать текущее значение любого сигнала, посмотреть, как менялись значения сигналов, какие были переключения и иметь возможность управлять сигналами..."

Да не сигналы их интересуют, а Поведение ОБЪЕКТА в ЦЕЛОМ. А вот уж Объект состоит из сигналов (параметров), суперпозиция которых и определяет СОСТОЯНИЕ объекта. У объекта должны быть свои команды, доступные оператору. Включить, там, вывести в режим и т.п.. А уж как эти команды (понятные по технологии) странслируются на реальные управляющие сигналы - этого он может и не знать. Имея опыт АСУчивания агрегатов почти 50-ти летней выдержки, могу сказать - как раз и уходили от того, что бы операторы бегали по сигналам и устанавливали им значения. Замучаются они так. А возможность "... в любой момент узнать текущее значение..." нужна или технологам или киповцам для анализа неформализованных зависимостей типа ... если вот эта температура выше такого-то значения, то надо бы бежать туда-то и подкрутить такую-то "гайку". Диспетчер следит не за сигналами, а за интегральным поведением объекта, но должен иметь полную картину происходящего.


"...В системе, которую мы делали, информация поступала из самых разных мест по каналам связи ..."

Вот-вот. Формализацией (диспозицией) отношений канал связи, устройство, параметр и надо заниматься. Что бы иметь библиотеку интерфейсов, библиотеку протоколов, библиотеку устройств и т.п., что бы потом конструировать прикладную систему не на уровне кодов, а на уровне конфигурации (внешней или "прошитой"). Структура класса параметр (а параметр - это не только физ величины, снимаемые с датчиков, а и подсистема, система, расчетные параметры), должна обладать возможностью унифицированного обращения к нему (объекту класса) на уровне директив установки значения, выполнения команды, изменения свойства. И все это долно быть унифицировано. Что бы не разбираться предметно с каждым отдельно сигналом на этапе создания системы. Индексный адрес параметра, идентификатор, список свойств, список команд, список уставок и пр и др., всё должно быть формализовано в этой структуре.

"...Но я не понял что подразумевается по вызовом ядра системы и зачем это надо. И какая логика обработки в этом случае может быть запущена?..."

В составе ядра системы находится модуль обработки технологических исключений. В случае наличия исключения - авария и т.п. он производит соответствующие действия. Пример. Работает агрегат по закачке газа. Пашет. Режимы отслеживаются, и вдруг - бабах - подшипник перегрелся. Его надо останавливать. А управляющая программа гоняет цикл соответствующего режима работы. В этом случае выполнение основной программы прерывается и алгоритм должен отработать достаточно сложную систему последовательных команд для остановки этого агрегата.

"...Только не в отдельном потоке, а в отдельной программе. Возможно и на другом компьютере..."

Очень и очень спорно... (см. "целесообразность применения") Имхо - резко усложняется (и затягивается) взаимодействие подсистем и надёжность падает на порядки. Дублирование, резервирование каналов, синхронизация и пр. Оно нам надо? Для чего? Для крутизны? Как раз "Узел" и определяет целостность логики и данных для конкретной подсистемы. И усложнять здесь вопрос нет необходимости.

"Сейчас я бы всё это делал на основе IP (UDP и TCP, а когда разберусь, то и SCTP), а также протоколов прикладного уровня -- Telnet (SSH), HTTP и других."

Я ухожу от оборотов "я бы всё это делал на основе ..." И вот почему. Не надо путать цели и средства. Если вспомнить про "семиуровневую модель", то Вы мне говорите про транспортный уровень, а я талдычу про прикладной. Мне глубоко ..., по какому каналу идут данные, если этот канал удовлетворяет требованиям системы. А уж с HTTP мы вообще вылетели на уровень сервисных информационных систем. Ну не могут эти доводы служить платформой для серьёзной разработки. ИМХО.

Вам нужен web-сервер системы? Создаёте узел, работающий на стандартном ядре, позволяющий Вам получать нужные данные из нужных первичных узлов системы и на уровне прикладной логики подключаете модуль взаимодействия с web-движком. Точно так же и графика и архивы и ОРС и пр..

Проверено. Работает.
Спасибо сказали:
MiK13
Сообщения: 1178
ОС: Linux Debian

Re: SCADA под Linux

Сообщение MiK13 »

> Зачем использовать файл в качестве оперативного массива, я по правде говоря, не понял.

А просто другого варианта нет. Точнее, не было. Данные можно хранить либо в памяти, либо в файле на диске. В первом случае доступ к нему имеет только программа, которая их записывает. Во втором случае -- любая программа, имеющая возможность читать этот файл (в том числе и по сети). В линуксе, правда, есть разделяемая память. Но достоинство файла -- данные в нём сохраняются при перезапуске системы.
Правда, можно использовать всякие СУБД. Их достоинство -- стандартный интерфейс. А недостаток -- большие накладные расходы, необходимость изучения этого "стандартного" интерфейса, необходимость установки этой СУБД и, возможно, затрат на покупку. Но в итоге он всё равно заканчивается хранением данных на диске.

> Та же схема квитирования выглядит примерно так. При возникновении "аномалии" - параметр регистрируется в динамическом списке текущих, неквитированных, "аномалий" (нарушений и пр.),

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

> А самое главное - контроллер, вообще говоря, может не иметь файлового носителя.

А в контроллере и не должно ничего квитироваться. Он вообще не должен хранить данные. Его задача -- собирать данные и передавать их на верхний уровень.

> Да не сигналы их интересуют, а Поведение ОБЪЕКТА в ЦЕЛОМ.

Но поведение объекта(ов) определяется значениями сигналов. И не только теми, что выдаются с объектов, но и теми, что получаются после выполнения над ними определённых мат. операций. Но это определяется уже на "верхнем уровне".
У нас была такая проблема, говорили о том, что нужны "вычисляемые параметры". Но я занимался, в основном, программой сбора и архивирования данных телемеханики, и не представлял, как туда можно "всунуть" ещё и вычисляемые параметры. Которые, IMHO, должны быть только на том уровне, где идёт работа с оператором. А также там, где нужно автоматическое управление (регулирование).

> А уж как эти команды (понятные по технологии) странслируются на реальные управляющие сигналы - этого он может и не знать.

Я бы сказал, что ему не нужно это знать.

> Имея опыт АСУчивания агрегатов почти 50-ти летней выдержки, могу сказать - как раз и уходили от того, что бы операторы бегали по сигналам и устанавливали им значения.

А что значит "бегали по сигналам и устанавливали им значения"? Если какой-то элемент объекта не имеет аппаратуры автоматического измерения, но его значение должны знать разные службы, то значение этого параметра передаётся голосом по телефону одному из диспетчеров, а он через контекстное меню изображения данного элемента устанавливает его значение. Которое передаётся на сервер сбора информации и оттуда уже рапространяется всем службам.

> А возможность "... в любой момент узнать текущее значение..." нужна или технологам или киповцам для анализа...

В системе должна быть "возможность в любой момент узнать текущее значение любого параметра". А о том какие именно значения и в каком виде они будут представлены опредаляется задачей, для кого эта информация будет поставляться.

> параметр - это не только физ величины, снимаемые с датчиков, а и подсистема, система, расчетные параметры
Что касается физ величин, а также расчётных параметров, то тут всё ясно.
А вот что такое подсистема и система? И как их формализовать?

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

А почему бы не реализовать это в виде отдельной программы, которая будет получать данные от системы сбора данных точно также, как и все другие программы?
А если нужна особая реакция такой программы, то можно её поставить ДО системы сбора, т.е. она будет сама принимать данные телемеханики и передавать их в центр. А заодно контролировать значения этих параметров и обрабатывать исключительные состояния.

> Пример. Работает агрегат по закачке газа. Пашет. Режимы отслеживаются, и вдруг - бабах - подшипник перегрелся. Его надо останавливать. А управляющая программа гоняет цикл соответствующего режима работы. В этом случае выполнение основной программы прерывается и алгоритм должен отработать достаточно сложную систему последовательных команд для остановки этого агрегата.

Т.е. управляет одна программа, а если что-то произойдёт, то этим начинает заниматься совсем другая? На мой взгляд это довольно странно.


>>
"...Только не в отдельном потоке, а в отдельной программе. Возможно и на другом компьютере..."
> Очень и очень спорно... (см. "целесообразность применения") Имхо - резко усложняется (и затягивается) взаимодействие подсистем и надёжность падает на порядки.
А в чём спорность? По-моему гораздо проще отлаживать программу независимо от других, зная, какие данные она должна принимать и какие выдавать, чем отлаживать служный комплекс, в котором паралельно работают несколько зависимых друг от друга программ.

> Я ухожу от оборотов "я бы всё это делал на основе ..." И вот почему. Не надо путать цели и средства. Если вспомнить про "семиуровневую модель", то Вы мне говорите про транспортный уровень, а я талдычу про прикладной.
Вот по этой причине я и говорил про сложность "нахождения общего знаменателя". Проблема не в том, что разные люди видят реализацию одного и того же по разному, а в том, что они, думая, что они говорят об одном, на самом деле подразумевают разные стороны.

> Мне глубоко ..., по какому каналу идут данные, если этот канал удовлетворяет требованиям системы.
А кому это должно быть не ...? Ведь в реальных системах информация должна приходить по конкретным каналам. И только тогда она будет работать.
Спасибо сказали:
Volckoff
Сообщения: 13
ОС: Windows XP Prof

Re: SCADA под Linux

Сообщение Volckoff »

MiK13 писал(а):
27.05.2009 22:31
А просто другого варианта нет. Точнее, не было. Данные можно хранить либо в памяти, либо в файле на диске...
В первом случае доступ к нему имеет только программа, которая их записывает. Во втором случае -- любая программа, имеющая возможность читать этот файл (в том числе и по сети).


Я, кажется понял, Вы формировали файл, который потом по сети считывала другая программа! А передать этот же массив по сетевому протоколу? Той же программе, определив логический протокол взаимодействия?

MiK13 писал(а):
27.05.2009 22:31
...Но достоинство файла -- данные в нём сохраняются при перезапуске системы...


А как же быть с актуальностью данных? Если система будет принимать решение по таким данным, она может быть обманута устаревшими значениями. Для каких-то случаев это м.б. допустимо, но... Проехали...

MiK13 писал(а):
27.05.2009 22:31
Т.е. создаётся отдельный массив. Который всё равно надо где-то хранить...Но это усложняет ситуацию... в событии может быть признак неквитированности

Массив, но массив... УКАЗАТЕЛЕЙ на реальные и живущие своей жизнью объекты. Так что структура его - проще быть не может. Порождать какие-то классы объектов для отдельной регистрации нарушений - смысла нет... А событие, событие это слепок текущего состояния параметра, не более того. Оно само может содержать что-то, но "своего мнения" не имеет. Мы же находимся в пространстве ООП.

MiK13 писал(а):
27.05.2009 22:31
А в контроллере и не должно ничего квитироваться. Он вообще не должен хранить данные. Его задача -- собирать данные и передавать их на верхний уровень.


Т.е. Вы рассматриваете ЦЕНТРАЛИЗОВАННУЮ СИСТЕМУ, а я-то как раз распределённо-иерархическую, где локальный контроллер не только собирает, но обрабатывает и, возможно, принимает решения. Это как раз и разнит эти два подхода к построению структуры системы. Они делают одно и то же, но принципиально различаются по распределению функций. Контроллер от концентратора (шлюза) данных как раз и отличается наличием "технологических мозгов" .
Пример. Машинист стоит у агрегата, смотрит, что всё мигает как мордовская ёлка, и ждёт, когда диспетчер наверху квитирует? Квитирований, как минимум два типа - "нижнее", для того, что бы зафиксировать, что персонал увидел трабл и "верхнее" - Диспетчера, который тоже должен зафиксировать факт увиденного... Это более общая картина. Любая из частей может ... отсутствовать при отсутствии потребности.

MiK13 писал(а):
27.05.2009 22:31
Но поведение объекта(ов) определяется значениями сигналов. И не только теми, что выдаются с объектов, но и теми, что получаются после выполнения над ними определённых мат. операций. Но это определяется уже на "верхнем уровне".
У нас была такая проблема, говорили о том, что нужны "вычисляемые параметры". Но я занимался, в основном, программой сбора и архивирования данных телемеханики, и не представлял, как туда можно "всунуть" ещё и вычисляемые параметры. Которые, IMHO, должны быть только на том уровне, где идёт работа с оператором. А также там, где нужно автоматическое управление (регулирование).


Нынешнее развитие микропроцессоров и системного ПО позволяет "спустить" верх до уровня низа. Это удобно во многих отношениях... Т.е не надо смотреть на узловой контроллер, как на убогий проц. времён оных. Для решения проблемы "расчетного" параметра необходимо определить класс параметра, имеющего связи с входными параметрами и метод перерасчёта своего значения на их основе. В остальном поведение такого параметра ничем не отличается от обычного, данные для которого пришли от датчика...

MiK13 писал(а):
27.05.2009 22:31
А вот что такое подсистема и система? И как их формализовать?


Если при Диспозиции задачи, возникла необходимость рассматривать набор разнородных или однородных параметров как некоторую сущность для интегральной оценки их состояний, то и возникает подсистема. Например, тот же компрессор - это и двигатель и компрессионные цилиндры, выхлоп, охлаждение, да много других. Да, это всё параметры, но проще вывести "Двигатель в работе", нежели говорить, что обороты - то-то, Т выхлопа -то-то, давление топлива, масла и пр. Это расчётный параметр, в значениях имеющий как раз состояния подсистемы.

MiK13 писал(а):
27.05.2009 22:31
А почему бы не реализовать это в виде отдельной программы, которая будет получать данные от системы сбора данных точно также, как и все другие программы?


Если на одном узле, то дублирование кода. Неэффективно...

MiK13 писал(а):
27.05.2009 22:31
Т.е. управляет одна программа, а если что-то произойдёт, то этим начинает заниматься совсем другая? На мой взгляд это довольно странно.


Программа одна. "Технологические исключения" определяют реакцию как конкретного УЗЛА на случившееся, так и всех остальных узлов, обрабатывающих инфу от этого узла.

MiK13 писал(а):
27.05.2009 22:31
По-моему гораздо проще отлаживать программу независимо от других, зная, какие данные она должна принимать и какие выдавать, чем
отлаживать служный комплекс, в котором паралельно работают несколько зависимых друг от друга программ.


Категория "проще" субъективна. Я, лично, люблю отлаживать многопоточные программы с прозрачной структурой.
ООП нам поможет.
Спасибо сказали:
MiK13
Сообщения: 1178
ОС: Linux Debian

Re: SCADA под Linux

Сообщение MiK13 »

Volckoff писал(а):
28.05.2009 10:52
Я, кажется понял, Вы формировали файл, который потом по сети считывала другая программа! А передать этот же массив по сетевому протоколу? Той же программе, определив логический протокол взаимодействия?
Так всё дело в том, что "другой" программы нет. И этот файл располагается на сервере, который предоставляет доступ к данным любой другой программе, которая захочет их узнать.

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

Volckoff писал(а):
28.05.2009 10:52
массив... УКАЗАТЕЛЕЙ на реальные и живущие своей жизнью объекты.
А как обеспечивается сохранность состояния этих объектов при перезагрузке компьютера, на котором они функционируют? И почему объект может быть проще структуры из нескольких полей данных?

Volckoff писал(а):
28.05.2009 10:52
Пример. Машинист стоит у агрегата, смотрит, что всё мигает как мордовская ёлка, и ждёт, когда диспетчер наверху квитирует? Квитирований, как минимум два типа - "нижнее", для того, что бы зафиксировать, что персонал увидел трабл и "верхнее" - Диспетчера, который тоже должен зафиксировать факт увиденного...
А зачем диспетчеру дублировать действия машиниста? У них разные функции. Квитировать надо те события, которые требуют какой-то реакции. Если реагировать на это должен машинист, то пусть он и квитирует его. А если диспетчер, то он. Или это могут быть разные сигналы и, соответственно, события. Причём, в АРМ машиниста может быть заложена ситуация, что если он на какое-то требующее реакции событие не отреагировал в течение заданного времени, то формируется новое событие уже для диспетчера. Хотя если происходит серьёзное, то на это должна реагировать и автоматика. И при этом сообщать как именно она отреагировала.
Volckoff писал(а):
28.05.2009 10:52
Нынешнее развитие микропроцессоров и системного ПО позволяет "спустить" верх до уровня низа. Это удобно во многих отношениях... Т.е не надо смотреть на узловой контроллер, как на убогий проц. времён оных. Для решения проблемы "расчетного" параметра необходимо определить класс параметра, имеющего связи с входными параметрами и метод перерасчёта своего значения на их основе. В остальном поведение такого параметра ничем не отличается от обычного, данные для которого пришли от датчика...
Конечно. И вообще в таком варианте такой расчётный параметр для системы ничем не отличается от измеряемого. И вообще этого отличия может и не быть.
Первоначально у нас значения аналоговых параметров поступали в виде байтов. И в пересчёт в реальные делался прямо в программе сбора. И для каждого сигнала задавалось максимальное значение кода (обычно 250), а также значения параметра для этого кода (максимальное значение) и для кода 0 (минимальное). Но вообще-то программа сбора этим заниматься не должна -- она должна получать реальные значения параметра от программы, которая принимает данные от объекта.

MiK13 писал(а):
27.05.2009 22:31
А вот что такое подсистема и система? И как их формализовать?
Volckoff писал(а):
28.05.2009 10:52
Если при Диспозиции задачи, возникла необходимость рассматривать набор разнородных или однородных параметров как некоторую сущность для интегральной оценки их состояний, то и возникает подсистема. Например, тот же компрессор - это и двигатель и компрессионные цилиндры, выхлоп, охлаждение, да много других. Да, это всё параметры, но проще вывести "Двигатель в работе", нежели говорить, что обороты - то-то, Т выхлопа -то-то, давление топлива, масла и пр. Это расчётный параметр, в значениях имеющий как раз состояния подсистемы.
Так про расчётные параметры мне и так всё понятно. Причём, эти расчёты могут производиться как на верхнем уровне (в программе у диспетчера суммируется значения токов, потребляемых всеми объектами и показывается результат, и об этом параметре знает только диспетчер, в системе его нет), так и результатом выполнения определённых расчётов измерительным устройством.
Но про систему и подсистему я так и не понял.
Volckoff писал(а):
28.05.2009 10:52
MiK13 писал(а):
27.05.2009 22:31
А почему бы не реализовать это в виде отдельной программы, которая будет получать данные от системы сбора данных точно также, как и все другие программы?

Если на одном узле, то дублирование кода. Неэффективно...
Дублирование какого кода?
Спасибо сказали:
Volckoff
Сообщения: 13
ОС: Windows XP Prof

Re: SCADA под Linux

Сообщение Volckoff »

MiK13 писал(а):
28.05.2009 16:01
...И этот файл располагается на сервере, который предоставляет доступ к данным любой другой программе, которая захочет их узнать.

Понятно. Как частное решение частной задачи. В моём случае - ядро имеет интерфейс uplink (сетевой) для передачи данных другим узлам. Можно по запросу, можно по изменению. По изменению - оптимальней.

MiK13 писал(а):
28.05.2009 16:01
...А актуальность данных тут не причём...

Такую модель я не рассматривал. Т.к. подразумевается управление системой, то такие обороты исключаются в принципе. Система должна гарантировать представление данных с такой скоростью, какая необходима для принятия (и в первую очередь автоматикой) решения о реакции. Пока у меня ориентир - 250 Мсек. От возникновения аварии, до исполнения реакции на неё. Сохранять значения параметров необходимо, если они носят накопительный характер (наработка, расход и т.п.) для этого, как правило, есть энергонезависимая память. Туда они и записываются...

MiK13 писал(а):
28.05.2009 16:01
... И почему объект может быть проще структуры из нескольких полей данных?

Объект не просто структура, а структура с другой Философией. Объект - часть системы, а структура - часть программы. Этим всё сказано.

MiK13 писал(а):
28.05.2009 16:01
А зачем диспетчеру дублировать действия машиниста?

Для прокурора. Автоматика сработала, а машинист проспал. Одна ситуация. Автоматика сработала, а машинист не проспал, но проспал Диспетчер - не завёл другую машинку, для компенсации того же... газового трафика. Они работают с РАЗНЫМИ ОБЪЕКТАМИ (СИСТЕМАМИ) и абсолютно не дублируют друг друга. Автоматика своё дело сделает и пошлёт куда надо что надо, но это, зачастую, не решение конкретной технологической проблемы. Пример. Авто. Индикация - свет ближний перегорел. И что из того, что электроника это зафиксировала? Лампочку-то менять надо. Аппарат по замене лампочек разрабатывать? :crazy:

MiK13 писал(а):
28.05.2009 16:01
...Первоначально у нас значения аналоговых параметров поступали в виде байтов. И в пересчёт в реальные делался прямо в программе сбора. И для каждого сигнала задавалось максимальное значение кода (обычно 250), а также значения параметра для этого кода (максимальное значение) и для кода 0 (минимальное)...

Какого кода??? По-проще нельзя? Первичный сигнал в таких-то попугаях, Значение параметра - в таких-то попугаях. Линейный пересчет. Диапазон датчика, диапазон величины, диапазон параметра. Пример. 4-20 мА соответствуют -50 до 500 гр.С. Если сигналы от УСО закодированы дурацким протоколом, то это не проблема параметра, а проблема протокола - перевести из набора байт посылки в форму физ. величины. Т.е в рамках системы должен быть слой, который определяет, что после него все данные представляются в реальных единицах, а не в байтах, битах и структурах.
Рассмотрение байта, как структуры хранения информации говорит о том, что Вы, скорее всего, занимаетесь аппаратными проблемами системы и при этом общая концепция прикладной системы в целом или вообще отсутствует или "..я тебя слепила из того что было". Увы. ИМХО.

MiK13 писал(а):
27.05.2009 22:31
...Но про систему и подсистему я так и не понял.


Параметр может иметь команды, которые он исполняет. Пример - параметр КРАН. Открыть, закрыть и т.п. Подсистема - параметр, который а) Дает интегральную оценку состояния входящих в неё параметров б) Может иметь набор команд, реализующих функциональность подсистемы. Пример - Двигатель - включить, выключить, холостой ход и т.п. Что не ясно? Очевидное? Или есть конкретный датчик "Двигатель"? Или я вообще ничего не понимаю...
К тому же, что для диспетчера важно состояние двигателя,а вот частности - это уже второй план, при необходимости.

Система. Функциональность, которую реализует узел и называется системой. Она представима в виде .... система - параметр, который а) Дает интегральную оценку состояния входящих в неё параметров б) Может иметь набор команд, реализующих функциональность системы. Пример - ГПА - "в работе", "обкатка", "прогрев" и пр. и тр. И от диспетчера необходимо послать только команду "ГПА остановить", "ГПА запустить", а ужо узел разберётся - корректна эта команда и ЧТО надо сделать, что бы её выполнить...

Это как раз и является примером того, что всё приводится к единой модели описания и взаимодействия, как по уровням (между узлами), так и по узлам. И никаких байтов с кодом 250....


MiK13 писал(а):
27.05.2009 22:31
Дублирование какого кода?

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

Вам не приходила мысль для разных WORDов запускать разные Windows на одной машине? А почему? А вот линукс в параллель с виндовз - иногда бывает нужно. Почему?
Увеличивается ли быстродействие компа от запуска двух, трех и т.п. ОС? Почему?
И какие коды в ОС дублируются при запуске, скажем через VMWare?
А в ТОС?
Спасибо сказали:
Volckoff
Сообщения: 13
ОС: Windows XP Prof

Re: SCADA под Linux

Сообщение Volckoff »

Не приходя в сознание обсуждение почило в бозе...:)
Вместо заключения.
В общем-то речь идёт о некоторой специализированной сетевой "виртуальной машине", которая позволила бы создавать распределенные приложения уровня сбора, обработки и управления данными, но без использования громоздких конструкций типа Net-framework, DCOM, и при этом использовала бы ядро ОС для аппаратной адаптации ВМ к реальному железу. Где-то так...
Спасибо сказали:
MiK13
Сообщения: 1178
ОС: Linux Debian

Re: SCADA под Linux

Сообщение MiK13 »

Volckoff писал(а):
10.06.2009 08:34
Не приходя в сознание обсуждение почило в бозе...:)
Ну, может быть, ещё найдётся желающий это сделать. Но пока что-то таких не видно. А у меня сейчас по работе совсем другие задачи.

Volckoff писал(а):
10.06.2009 08:34
Вместо заключения.
В общем-то речь идёт о некоторой специализированной сетевой "виртуальной машине", которая позволила бы создавать распределенные приложения уровня сбора, обработки и управления данными, но без использования громоздких конструкций типа Net-framework, DCOM,
IMHO, какие-то слишком "общие" понятия. И нет (для меня) ясности, что именно должна делать эта виртуальная машина и какой у неё должен быть интерфейс.
Volckoff писал(а):
10.06.2009 08:34
и при этом использовала бы ядро ОС для аппаратной адаптации ВМ к реальному железу.
Ядро какой ОС? Обобщённой сетевой или той, которая стоит на конкретном реальном компьютере?
Спасибо сказали:
Volckoff
Сообщения: 13
ОС: Windows XP Prof

Re: SCADA под Linux

Сообщение Volckoff »

MiK13 писал(а):
15.06.2009 14:32
Ядро какой ОС?
...
IMHO, какие-то слишком "общие" понятия. И нет (для меня) ясности, что именно должна делать эта виртуальная машина и какой у неё должен быть интерфейс.


ОС, которая стоит на конкретном реальном компьютере.

Эта ВМ должна иметь следующие интерфейсы:

1. Конфигурирования, в том числе и конфигурирование бизнес-логики работы
1.1. Статического (из файла, например)
1.2. Динамического (через консоль управления)
2. Диагостики и статистики отказов (отдельным, сеансовым трактом)
3. Ввода-вывода (многоканальный сбор данных)
4. Связи (Uplink)
5. Консольный
6. Безопасность (security)
7. Локального протокола
8. Отладки (Это не одно и то же, что и Диагностика) здесь - подразумевается отладчик

Таким образом общий план работы выглядит так.

1. Готовятся конфигурационные файлы и программа логики (если необходимо)
2. Сбрасываются по каналу связи на рабочий контроллер
3. Контроллер перезагружается (или сам или по команде), при этом корректность воздействия "пасётся" системой безопасности ядра - пароли там и прочее.
4. Включается оснастка "консоль управления" - и связываемся с этой ВМ по тракту консоли (ну например шлюзованный на UDP.) - смотрим локальный протокол запуска или что-то типа того...
или включаем оснастку диагностики - подключаемся и наблюдаем, как там что работает
5. Подключаем отладчик по интерфейсу Отладки и смотрим, как работает логика (если она есть)
6. Переводим контроллер в рабочий режим и программой типа сниффера данных анализируем поток данных от контроллера.

И всё это БЕЗ Win-примочек - только на базовых сетевых протоколах.

Где-то так... Понятно, что "вообще говоря" этот путь условно стандартен, но как раз и есть желание создать коды, переносимые на контроллеры класса, например http://www.phytec.com/products/sbc/C166-xc...CORE-XC167.html или что-то в этом роде...
Спасибо сказали:
Blackjack
Сообщения: 1

Re: SCADA под Linux

Сообщение Blackjack »

Хм, из прочитанного многое ввергло в ступор. Наверно не стоит изобретать велосипед, ходить в крестовые походы и искать новые принципы - заказчики и экслуататоры не оценят.
Вообще, после недавнего спора с коллегами и опыта наладки пришли к мнению, что любая SCADA в принципе должна собираться из всего трех глобальных компонентов, остольное - мелочи реализации: ядра связи, которое может максимально полно и универсально обеспечить взаимодействие с оконечными устройствами по наиболее известным и распространенным протоколам/шинам (modbus, spabus, iec ...-103, ...-101/104 и пр.), базы данных объектов процесса (собственно область обработки дискретных, аналоговых сигналов, шкал, массивов различного рода, процедур обработки) и инструмента визуального отображения, который, разумеется, может и отсутствовать. Причем эти три компонента могут быть и от разных вендоров.
Соответственно, именно универсальное и кроссплатформенное ядро связи зачастую и является основным камнем преткновения, и непременно из-за различий в трактовке тех же стандартизированных протоколов от вендора к вендору и возникают трения в процессе стыковки и внедрения. Кстати, OPC - была очередная попытка формализовать взаимодействие между узлами АСУ верхнего уровня, которая пока еще не провалилась, судя по тому, что ABB Automation эту прослойку использует и в применении IEC61850.
Спасибо сказали:
Volckoff
Сообщения: 13
ОС: Windows XP Prof

Re: SCADA под Linux

Сообщение Volckoff »

Blackjack писал(а):
03.11.2009 22:38
... походы и искать новые принципы - заказчики и экслуататоры не оценят...

Даже промежуточные варианты моего проекта породили две работающие системы, востребованные Заказчиком.
1. САУ ГМК (газо мото компрессор) - аналог только на Украине и то они сами признали неконкурентоспособность
2. Система беспроводных датчиков, позволяющая собирать информацию с поля скважин ( и никакого gsm) Ф 5 км.

Сколько денег в автоматизации улетает на железки, лицензии и пр.?
На эту разницу и можно жить.
Тем паче, моё имхо говорит мне что это не сложно в реализации. Только хрен кому чего докажешь.
Да чиновников заказ на 1000$ не интересует. Ему N 000 000 подавай, да от сименса бонус, да ещё чего-нибудь...
За Державу обидно ® :huh:
Спасибо сказали:
Volckoff
Сообщения: 13
ОС: Windows XP Prof

Re: SCADA под Linux

Сообщение Volckoff »

Да и от стереотипа, что SCADA - единственно возможное решение, необходимо уходить. По той простой причине, что Windows only in match case.
Я говорю не об очередной скаде, а о другом подходе к построению систем сбора и управления...
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: SCADA под Linux

Сообщение BIgAndy »

Zeus писал(а):
21.03.2007 10:52
У меня "перед глазами" единственная работающая (и на многих объектах) SCADA под Linux - нашей конторы.

Есть подозрение, что ваши владельцы скады прото обязаны опубликовать исходные коды... Ну просто обязаны. Ибо GPL V2.....
Спасибо сказали:
MiK13
Сообщения: 1178
ОС: Linux Debian

Re: SCADA под Linux

Сообщение MiK13 »

К сожалению, у меня сейчас нет возможности хоть сколько-нибудь внимания уделять SCADA системам. Поэтому я и замолчал. В надежде, что когда-нибудь такая возможность появится.
Немного изменю то, что написал Blackjack.
Blackjack писал(а):
03.11.2009 22:38
Вообще, после недавнего спора с коллегами и опыта наладки пришли к мнению, что любая SCADA в принципе должна собираться из всего трех глобальных компонентов:
  • ядра связи, которое может максимально полно и универсально обеспечить взаимодействие с оконечными устройствами по наиболее известным и распространенным протоколам/шинам (modbus, spabus, iec ...-103, ...-101/104 и пр.),
  • базы данных объектов процесса (собственно область обработки дискретных, аналоговых сигналов, шкал, массивов различного рода, процедур обработки)
  • инструмента визуального отображения, который, разумеется, может и отсутствовать.

Причем эти три компонента могут быть и от разных вендоров.
Я правильно понял эти три компонента?
В принципе я согласен. Но не совсем.
Основное, с чем я согласен -- это то, что должны быть "базы данных". В кавычках -- потому, что я не сторонник использования различных СУБД -- обычно они очень много тянут за собой.
Мне больше нравится работать на нижнем уровне, когда всё просто и из этого простого можно собрать, в принципе, всё, что угодно (когда-то писал программу на Delphi, которая должна была принимать UDP пакеты и обмениваться по TCP. После возни с компонентами, я всё сделал на базе запросов send/recv и recvfrom, взяв в качестве заготовок примеры из книги "Системное программирование в UNIX")
Мне не нравится концепция "ядра связи", которое должно максимально полно "обеспечить взаимодействие по наиболее известным и распространённым протоколам". Именно из-за разнообразия этиз протоколов. Всегда может появиться какой-то новый протокол, который не будет учтён в ядре. А "ядро" обычно подразумевает что-то цельное.
В тех измерительных системах, с которыми я сталкивался, были два потока информации: ОТ элемента измерения (информационный поток) и К элементу исполнения (управляющий поток). Причём, значения, которые надо было при этом передавать, были только двух типов: "аналоговые", которые можно было уложить в переменные типа float, и дискретные, ,которые укладывались в 1 байт (а часто и в 1 бит). Поэтому у меня и возникла идея хранить и передавать эти значения в соответствующих полях записи (структуры).
Соответственно, система должна иметь стандартный интерфейс, который принимает сообщения в своём "стандартном" формате и из них формирует массив текущих значений и протокол событий.
А что касается "первой составляющей", то вместо универсального ядра мне больше нравится делать отдельные модули. Которые будут принимать данные от телемеханики и из них формировать "стандартные" сообщения. При этом они могут производить и предварительную обработку. Появился новый тип телемеханики -- просто добавляется новый модуль.
Что касается "инструмента визуального отображения", то он, в принципе, может быть любой. Это может быть и консольная программа, которая выводит информацию через ncurces, и GUIшная, выводящая её через X-сервер. Причём Linux не ограничевает возможность работы с этой программой только на локальном компьютере -- через протокол SSH с ней можно работать даже через интернет. Хотя в последнем случае это можно сделать через Web-сервер (тогда не понадобится писать специальных клиентских программ), или через специальную пару, когда одна программа будет забирать данные из "общей области" (текущие данные можно хранить в разделяемой памяти, а протоколы в файлах) и выдавать их по TCP/IP (или как-то ещё) другой программе, которая будет отображать оператору то, что он захочет (точнее -- то, что он сможет у неё попросить :)). Т.е. варианты тут могут быть самые разные.

Volckoff писал(а):
03.11.2009 22:59
Сколько денег в автоматизации улетает на железки, лицензии и пр.?
На эту разницу и можно жить.
Смотря кому. Разработчикам -- да. А вот чиновникам, которые всем этим руководят... они, скорее всего, просто ничего не поймут:(

Volckoff писал(а):
03.11.2009 22:59
Да чиновников заказ на 1000$ не интересует. Ему N 000 000 подавай, да от сименса бонус, да ещё чего-нибудь...
Ну почему? Если он не очень высокий, то ему, может быть и пол лимона хватит :)

BIgAndy писал(а):
04.11.2009 00:11
Zeus писал(а):
21.03.2007 10:52
У меня "перед глазами" единственная работающая (и на многих объектах) SCADA под Linux - нашей конторы.

Есть подозрение, что ваши владельцы скады прото обязаны опубликовать исходные коды... Ну просто обязаны. Ибо GPL V2.....
Скорее всего, никому они ничего не обязаны. Если они захотят, чтобы их система развивалась и дальше другими людьми, то они сами опубликуют исходный код. Но, скорее всего, это им просто не нужно.
Но, главное, (правда, IMHO) это вообще не нужно.
Сейчас уже не помню, где прочитал, но это было примерно так: Если не известно что делает программа и какие данные она обрабатывает, то даже наличие исходных текстов, скорее всего не даст возможность это понять. Но если известно, какие данные обрабатывает эта программа, то искодные тексты, скорее всего, и не понадобяться.
Также и в той системе, о которой я периодически расмышляю -- определиться, какие данные должны в системе храниться и передаваться. А уже реализовать эти хранение и передачу особого труда не составить.
Спасибо сказали:
Volckoff
Сообщения: 13
ОС: Windows XP Prof

Re: SCADA под Linux

Сообщение Volckoff »

MiK13 писал(а):
04.11.2009 02:28
Основное, с чем я согласен -- это то, что должны быть "базы данных". В кавычках -- потому, что я не сторонник использования различных СУБД -- обычно они очень много тянут за собой.

Именно так. Приведя формат хранения к 4-5 таблицам ФИКСИРОВАННОГО формата мы можем хранить их хоть в СУБД, хоть в текстовом файле. Реализовано. API - кода кот наплакал...

MiK13 писал(а):
04.11.2009 02:28
Мне не нравится концепция "ядра связи"...
...Именно из-за разнообразия этих протоколов...
...были только двух типов...
...данные от телемеханики и из них формировать "стандартные" сообщения...

Ядро строится именно по модульному принципу. Новый протокол или девайс - новый модуль.
Про протоколы сетевые - Можно посмотреть EtherCAT (полевой уровень) и SCTP (межузловое взаимодействие).
В моей реализации других нет и не предполагается.
Именно так и реализовано. Только про "массив значений" надо забывать - Таблица параметров с текущими значениями, которые синхронизируются с внешним источником и клиентами.

MiK13 писал(а):
04.11.2009 02:28
... определиться, какие данные должны в системе храниться и передаваться. А уже реализовать эти хранение и передачу особого труда не составить.

Наоборот. Хранить нужно просто список реальных и расчетных параметров, со всеми их свойствами и пр., а вот реализация загрузки, контроля, многопотокового взаимодействия по обслуживанию этого списка - дело не простое. Это и есть суть решения проблемы...
Спасибо сказали:
MiK13
Сообщения: 1178
ОС: Linux Debian

Re: SCADA под Linux

Сообщение MiK13 »

Volckoff писал(а):
04.11.2009 19:16
Ядро строится именно по модульному принципу. Новый протокол или девайс - новый модуль.
На мой взгляд, ядро и модули -- это разные вещи. Ядро -- что-то цельное, что обеспечивает базовые функции, модули -- что-то дополнительное.
Кстати, при создании ядра в линуксе есть возможность выбрать -- либо встроить драйверы прямо в ядро, либо сделать их в виде отдельных модулей.
Также и тут -- ядро обеспечивает приём и выдачу информации в каком-то определённом формате и определённым способом. А модули (программы, которые можно запускать отдельно) просто обеспечивают пребразование потока информации из того формата, который выдают устройства сбора информации в формат, который принимет ядро. А также причём информации от ядра в его формате и передачу этой информации на устройства управления (если такое возможно)
Volckoff писал(а):
04.11.2009 19:16
Про протоколы сетевые - Можно посмотреть EtherCAT (полевой уровень) и SCTP (межузловое взаимодействие).
В моей реализации других нет и не предполагается.
Про EtherCAT ничего не скажу -- в /usr/include не нашёл о нём упоминания. А вот SCTP -- интересная вещь. Можно использовать как один из варивантов обмена информацией с внешними устройствами.
Volckoff писал(а):
04.11.2009 19:16
Именно так и реализовано. Только про "массив значений" надо забывать - Таблица параметров с текущими значениями, которые синхронизируются с внешним источником и клиентами.
А что такое "таблица параметров" и в чём её преимущество перед "массивом значений"?
Volckoff писал(а):
04.11.2009 19:16
MiK13 писал(а):
04.11.2009 02:28
... определиться, какие данные должны в системе храниться и передаваться. А уже реализовать эти хранение и передачу особого труда не составить.

Наоборот. Хранить нужно просто список реальных и расчетных параметров, со всеми их свойствами и пр., а вот реализация загрузки, контроля, многопотокового взаимодействия по обслуживанию этого списка - дело не простое.
А в чём сложность реализации? Приём/передача -- простейшие запросы read/write (или их варианты -- recv/send, msgrcv/msgsnd и др.) В пределах одной области памяти -- простейшие операторы пересылки и просто присваивания (а также сравнения).
Но всё это несложно реализовать тоглько тогда, когда определена структура хранения данных. Которая может быть организована самым разным образом.
Спасибо сказали:
meganetman
Сообщения: 1
ОС: linux

Re: SCADA под Linux

Сообщение meganetman »

топикстартер просил законченную scada под линукс - их уже много :) вот одна из них: myscada.ru все что душе угодно: linux,android,iOS,windows... под линуксом хочет openjdk 8 версии. эта скада совсем не открытая и не бесплатная, правда есть вариант и бесплтаного использования продукта, но будут ограничения по количеству тегов ( для мелкой автоматизации дома или на даче может подойти)
Спасибо сказали:
Ответить