|
  |
Как правильно распределить управление системами, Нужен совет! |
|
|
Гость_Max2114_*
|
14.6.2012, 7:21
|
Guest Forum

|
Всем доброе утро! Нахожусь в раздумьях по поводу того, как правильно распределить управление системами на объекте. В данный момент занимаюсь разработкой ПО верхнего уровня и пусконаладкой систем и вот хочу спросить совета. Есть объект, управляется несколькими ПЛК. У каждого ПЛК есть RS232 и Ethernet. По месту к каждому ПЛК по RS232 подключается ЖК-панель Weintek. Кроме этого каждый ПЛК подключен к сети Ethernet и данные с него считывает АРМ диспетчера со скада-системой. Со считыванием и отображением даннных проблем никаких нет. А вот с заданием уставок и изменением режимов работы системы есть небольшая проблема, и для решения этой проблемы есть несколько вариантов - никак не могу остановится на каком-либо из них. Проблема следующего рода - задаю уставку из скады - данные записываются в контроллер. В контроллере в ячейке памяти, зарезервированной под работу по интерфейсу сохраняется значение переменной. Кроме того, переменная "висит" в скаде. Теперь подхожу к ЖК-панели и задаю эту уставку в ней. Уставка переписывается в контроллере, но затем происходит следующее - с скады опять приходит старая уставка и данные переписываются в память заного. Т.е. одновременно управлять контроллером двумя мастерами не получается. Есть несколько вариантов решения проблемы: 1. Завести в контроллере переменную - "выбор мастера" и переключать разные входы. Но тогда в контроллере для каждой уставки придется отвести по два входа с интерфейса. 2. В скаде придумать кнопку, которая будет отключать работу с интерфейсом переменных, отслающих данные по интерфейсу контроллерам. Будет что-то типа кнопки "включить местное управление". 3. Ограничить функционал ЖК-панелей и оставить им только визуализацию, без возможности вмешиваться в управление системами. Возможно есть еще варианты - в общем нужен "свежий взгляд". Всем заранее спасибо за советы.
|
|
|
|
|
14.6.2012, 7:27
|
Группа: Участники форума
Сообщений: 1755
Регистрация: 6.12.2006
Из: Москва
Пользователь №: 5075

|
А зачем SCADA все время пишет переменную в контроллер? Это программная особенность такая? Сделайте запись в контроллер по нажатию кнопки "Применить" например и получится схема "кто последний - тот и папа".
Сообщение отредактировал Сергей Долганов - 14.6.2012, 7:27
|
|
|
|
|
14.6.2012, 7:58
|
Всегда !
Группа: Участники форума
Сообщений: 1259
Регистрация: 1.7.2005
Из: Новосибирск
Пользователь №: 934

|
Цитата(Max2114 @ 14.6.2012, 10:21)  задаю уставку из скады - данные записываются в контроллер. В контроллере в ячейке памяти, зарезервированной под работу по интерфейсу сохраняется значение переменной. Кроме того, переменная "висит" в скаде. Теперь подхожу к ЖК-панели и задаю эту уставку в ней. Уставка переписывается в контроллере, но затем происходит следующее - с скады опять приходит старая уставка и данные переписываются в память заного. Т.е. одновременно управлять контроллером двумя мастерами не получается. Записывайте данные из разных источников в одну ячейку. Получите управление и актуальные значения во всех местах. В чем проблема-то?
|
|
|
|
|
14.6.2012, 8:10
|
Группа: Участники форума
Сообщений: 1755
Регистрация: 6.12.2006
Из: Москва
Пользователь №: 5075

|
Цитата(Lex @ 14.6.2012, 8:58)  Записывайте данные из разных источников в одну ячейку. Получите управление и актуальные значения во всех местах. В чем проблема-то? А Вы думаете он в разные пишет?
|
|
|
|
|
14.6.2012, 8:19
|
Группа: Участники форума
Сообщений: 166
Регистрация: 21.10.2010
Пользователь №: 77347

|
Такая проблема возникает всегда когда протокол циклически пишет все переменные какие есть в программе (так делает Modbus например), в этом смысле протоколы на основе "телеграмм" намного удобнее.
Это же только с аналоговыми значениями проблема? С битовыми ведь всё просто. Для аналоговых в любом случае придётся размножить переменные в ПЛК - как минимум разделить рабочее значение и значения, хранящееся в HMI и SCADA. Ну и переписывать их друг в друга по некоему алгоритму. Например, если ваш контроллер позволяет определить конец текущего цикла программы - всё несколько проще. Смотрите что изменилось на конец цикла - и если одно значение не равно двум другим - пишете новое значение в два других.
|
|
|
|
|
14.6.2012, 8:22
|
Группа: Участники форума
Сообщений: 60
Регистрация: 6.10.2009
Пользователь №: 39262

|
Цитата(Сергей Долганов @ 14.6.2012, 9:10)  А Вы думаете он в разные пишет?  Практически да, зависит от скада и ее настроек. В данном случае похоже у скады нет обратной связи по этой переменной с плк. Сделайте в скаде отдельное поле для ввода, для установки уставки по кнопке "применить", и отдельное поле для индикации уставки для чтения значения с плк, то же в HMI. При параллельной работе с нескольми терминалами управления, все уставки и алгоритмы работы желательно хранить в плк.
|
|
|
|
|
14.6.2012, 8:28
|
Всегда !
Группа: Участники форума
Сообщений: 1259
Регистрация: 1.7.2005
Из: Новосибирск
Пользователь №: 934

|
2 Max2114 вообще странно как-то... По моему опыту Скада не переписывает постоянно значения, а только по изменению... (даже без кнопки Применить, а встроенными средствами). Изменил оператор уставку, нажал энтер - значение обновилось. И считывается, чтобы показать актуальное. Поменял кто-то это значение из другого места (с пульта, по расписанию и т.п.) - измененное значение отразилось в скаде. С чего оно опять-то меняться будет? Как правильно написал Сергей Долганов - "кто последний - тот и папа". В Дезиге есть система управления по приоритетам... можно попробовать ее самому реализовать, но, имхо, сложно это. И, скоре всего, не нужно. Из первого сообщения. 1. Теоретически возможно, практически - очень сложно и неудобно в итоге. 2. Возможно. Но тогда наддо на скаду добавлять индикатор "Местное управление", чтобы оператор понимал, почему его система не слушается. 3. Не есть гуд. По смыслу местного управления. Цитата Такая проблема возникает всегда когда протокол циклически пишет все переменные какие есть в программе (так делает Modbus например) Имхо, дело не в протоколе, а в кривых руках или лени программиста. Циклом можно опрашивать входы. но не выходы же
Сообщение отредактировал Lex - 14.6.2012, 8:31
|
|
|
|
|
14.6.2012, 9:13
|
Группа: Участники форума
Сообщений: 166
Регистрация: 21.10.2010
Пользователь №: 77347

|
Автор, какие протоколы то? А то погрязнем в вариантах.
|
|
|
|
|
14.6.2012, 11:04
|
Группа: Участники форума
Сообщений: 830
Регистрация: 27.2.2008
Пользователь №: 16012

|
Целиком согласен с Lex и Долгановым. Касательно потокола Modbus хранителем данных выступает ПЛК. Мы всегда реализуем на ПЛК для одной ячейки памяти несколько (сколько необходимо) переменных по которым могут приходить данные. Алгоритм следующий: если текущее значение переменной не равно ее же предыдущему значению и переменная не равна значению в ячейке памяти - записываем в ячейку новое значение переменной. И так по каждой перменной для данной ячейки.
Такми образом, кто бы ни выступал источником новых данных (панелька, СКАДА и т.д.) будет реализован механизм "Кто последний тот и прав". А все получатели получат эти самые последние данные.
|
|
|
|
Гость_Max2114_*
|
14.6.2012, 13:55
|
Guest Forum

|
Цитата(Lex @ 14.6.2012, 9:28)  2 Max2114 вообще странно как-то... По моему опыту Скада не переписывает постоянно значения, а только по изменению... (даже без кнопки Применить, а встроенными средствами). Изменил оператор уставку, нажал энтер - значение обновилось. И считывается, чтобы показать актуальное. Поменял кто-то это значение из другого места (с пульта, по расписанию и т.п.) - измененное значение отразилось в скаде. С чего оно опять-то меняться будет? Как правильно написал Сергей Долганов - "кто последний - тот и папа". В Дезиге есть система управления по приоритетам... можно попробовать ее самому реализовать, но, имхо, сложно это. И, скоре всего, не нужно. Из первого сообщения. 1. Теоретически возможно, практически - очень сложно и неудобно в итоге. 2. Возможно. Но тогда наддо на скаду добавлять индикатор "Местное управление", чтобы оператор понимал, почему его система не слушается. 3. Не есть гуд. По смыслу местного управления. Имхо, дело не в протоколе, а в кривых руках или лени программиста. Циклом можно опрашивать входы. но не выходы же  Кривые руки программиста не при чем - такой эффект получается при использовании программных средств, без написания дополнительных макросов, реализующих "фишки" типа отключения передачи данных по интерфейсу. Протокол ModbusTCP. И скада и панель пишут данные "циклически". Т.е. опрос и запись ведется постоянно. Кто последний тот и папа - не получится (хотя при большом желании можно "замутить" отключение записи со скады, но нежелательно так как получится "громоздко". Цитата(Chabol @ 14.6.2012, 12:04)  Целиком согласен с Lex и Долгановым. Касательно потокола Modbus хранителем данных выступает ПЛК. Мы всегда реализуем на ПЛК для одной ячейки памяти несколько (сколько необходимо) переменных по которым могут приходить данные. Алгоритм следующий: если текущее значение переменной не равно ее же предыдущему значению и переменная не равна значению в ячейке памяти - записываем в ячейку новое значение переменной. И так по каждой перменной для данной ячейки.
Такми образом, кто бы ни выступал источником новых данных (панелька, СКАДА и т.д.) будет реализован механизм "Кто последний тот и прав". А все получатели получат эти самые последние данные. У меня как раз один из варинатов решения данной проблемы именно такой  И скорее всего так и сделаю.
Сообщение отредактировал Max2114 - 14.6.2012, 13:54
|
|
|
|
Гость_Max2114_*
|
14.6.2012, 14:17
|
Guest Forum

|
Цитата(Сергей Долганов @ 14.6.2012, 7:27)  А зачем SCADA все время пишет переменную в контроллер? Это программная особенность такая? Сделайте запись в контроллер по нажатию кнопки "Применить" например и получится схема "кто последний - тот и папа". Так просто это сделать не получится - переменная по модбасу записывается всегда. Последний вариант, предложенный Chabol - самый оптимальный. Его и буду использовать.
|
|
|
|
|
14.6.2012, 20:31
|
Группа: Участники форума
Сообщений: 857
Регистрация: 27.4.2008
Пользователь №: 18181

|
Сама по себе ситуация немного странно вывернута: ну не могут быть у одних и тех же данных два разных источника. Это просто два разных источника и две разные информации I1 и I2. ПЛК лишь должен выступать судьей в выборе, то есть выполнить некоторую операцию над данными: f(I1, I2). Возможно потребуется дополнительная информация от источников, чтобы разрешить конфликт. Может это будет бит "сейчас папа - я"? Эта же информация должна пойти крест накрест: от ПЛК к источнику 1 должна пойти инфа I2 с указанием, что "источник 2 является папой" и соответственно к источнику 2 должна пойти инфа I1 с битом "источник 1 - папа". Это для того, чтобы обновить источникам свои данные.
|
|
|
|
|
15.6.2012, 5:21
|
Всегда !
Группа: Участники форума
Сообщений: 1259
Регистрация: 1.7.2005
Из: Новосибирск
Пользователь №: 934

|
Цитата(Max2114 @ 14.6.2012, 16:55)  такой эффект получается при использовании программных средств Если не секрет - что за ПО? Скада? Чтоб на те же грабли не наступать...
|
|
|
|
Гость_Max2114_*
|
15.6.2012, 7:01
|
Guest Forum

|
Цитата(Lex @ 15.6.2012, 5:21)  Если не секрет - что за ПО? Скада? Чтоб на те же грабли не наступать... е-мае, да любая скада и любой ОПС-сервер при работе с модбасом будет себя вести точно так же. Это не "телеграммный" протокол. И эти "грабли" получаются в том случае, если "slave" - слуга двух господ. Панель Weintek ведет себя точно так же, как и скада. И другой контроллер тоже (в некоторых правда есть возможность выполнять запрос при условии, но при "обычном" подключении все будет аналогично). Если не верите - возьмите два ПК со скадой, контролер с двумя портами и протоколом модбас и попытайтесь перезаписать одну и ту же переменную. И увидите, что не правы.
|
|
|
|
|
15.6.2012, 8:24
|
Группа: Участники форума
Сообщений: 1154
Регистрация: 25.8.2010
Из: Одесса
Пользователь №: 69560

|
Что-то вы, товарищи, не то мутите. И панель Вайнтек, и любой контроллер пишет переменные по Модбасу ТОЛЬКО ТОГДА, когда на это есть запрос. Например, на панели, закончил ввод, нажал на экранной клавиатуре Enter, и только тогда произойдет однократная запись по адресу переменной. Не понимаю, о чем речь идет... Аналогично и на текстовых панелях. Только кнопки уже будут аппаратные.
Сообщение отредактировал Alexander_I - 15.6.2012, 8:26
|
|
|
|
|
15.6.2012, 8:41
|
Группа: Участники форума
Сообщений: 1081
Регистрация: 12.12.2007
Пользователь №: 13744

|
В контроллере предусмотрите дополнительную переменную, которая будет записывать задание на регулятор по команде. Теперь, меняя эту переменную и подовая команду на запись, будете менять задание со скады. Все остальное время задание со скады прилетать не будет.
|
|
|
|
|
15.6.2012, 9:07
|
Всегда !
Группа: Участники форума
Сообщений: 1259
Регистрация: 1.7.2005
Из: Новосибирск
Пользователь №: 934

|
Цитата(Max2114 @ 15.6.2012, 11:01)  е-мае, да любая скада и любой ОПС-сервер при работе с модбасом будет себя вести точно так же. Это не "телеграммный" протокол. И эти "грабли" получаются в том случае, если "slave" - слуга двух господ. Панель Weintek ведет себя точно так же, как и скада. И другой контроллер тоже (в некоторых правда есть возможность выполнять запрос при условии, но при "обычном" подключении все будет аналогично). Если не верите - возьмите два ПК со скадой, контролер с двумя портами и протоколом модбас и попытайтесь перезаписать одну и ту же переменную. И увидите, что не правы. Ну как бэ у меня абсолютно обратный опыт. По крайней мере по Modbus RTU. С Modbus TCP только предстоит работать. Там вроде как возможна мультимастерность. Может, возможна и описываемая ситуация, как особенность самого протокола... А может это особенность конкретного ПО (скады или ОРС-сервера)... На исполнителя не грешу, надеюсь у Вас квалификация достаточная  (поэтому про криворукость не принимайте на свой счет - это про других, их личного опыта). Поэтому и интересуюсь. А не просто так поболтать... А про телеграммы.... Modbus RTU это же не бродкаст, а запрос-ответ, поэтому можно задать (для разных команд) когда будет запрос - циклично или разово. ИМХО.
Сообщение отредактировал Lex - 15.6.2012, 9:09
|
|
|
|
|
15.6.2012, 9:31
|
Группа: Участники форума
Сообщений: 1337
Регистрация: 24.5.2010
Из: Москва
Пользователь №: 58149

|
Цитата(Chabol @ 14.6.2012, 12:04)  Целиком согласен с Lex и Долгановым. Касательно потокола Modbus хранителем данных выступает ПЛК. Мы всегда реализуем на ПЛК для одной ячейки памяти несколько (сколько необходимо) переменных по которым могут приходить данные. Алгоритм следующий: если текущее значение переменной не равно ее же предыдущему значению и переменная не равна значению в ячейке памяти - записываем в ячейку новое значение переменной. И так по каждой перменной для данной ячейки.
Такми образом, кто бы ни выступал источником новых данных (панелька, СКАДА и т.д.) будет реализован механизм "Кто последний тот и прав". А все получатели получат эти самые последние данные. Только вот последним всегда окажется СКАДА. И опять перезапишет уставку такой, какая нужна именно ей. Кнопка на скаде ближе к теме, но я бы сделал ее автоматической. Например по условию, что оператор с АРМа со СКАДОЙ ввел новое значение уставки включается подпрограмма, запускающая команду на перезапись переменной в контроллере. После прихода подтверждения о успешном выполнении команды она удаляется из регистров, но чтение этой переменной продолжается и сравнивается с уставкой. Если вдруг контроллер дал сбой и переменная слетела, то скада опять перезаписывает эту переменную. Только вот стоит вопрос . как сделать так, чтобы СКАДА не восприняла изменение переменной с панели за сбой. Придется вводить некий флаг, который сообщает, что изменение произошло с панели и по нему скада понимает. что это не сбой. Только вот я не знаю, возможно ли реализовать этот алгоритм, когда программа в контроллере , СКАДА или панели пишется не на языке программирования а при помощи конфигураторов. Это уже зависит от самого ПО. Я не являюсь программистом таких систем, по этому не знаю всех тонкостей конфигурирования и программирование СКАДЫ, но если написали про ручную кнопку, то думаю и програмную по событию сделать не составит особого труда. Цитата(Lex @ 15.6.2012, 10:07)  А про телеграммы.... Modbus RTU это же не бродкаст, а запрос-ответ, поэтому можно задать (для разных команд) когда будет запрос - циклично или разово. ИМХО. Во, нужно учиться араторскому мастерсту. то что расписал чуть ли не в в целой статье -оказывается умещается в паре предложений.
|
|
|
|
Гость_Max2114_*
|
15.6.2012, 9:54
|
Guest Forum

|
Вы не читаете внимательно! У меня ModbusTCP и ModbusRTU - т.е. панель пишет по ModbusRTU а скада по ModbusTCP. И вообще я проблему уже решил - завел две переменные для интрефейса со скады и для панели. Запись в ПЛК происходит при изменении одной из переменных, кто последний изменился ту и записывает. Сделе это посредствам ПЛК. Насчет того,пишет ли вайнтек данные постоянно или нет - вы сами то пробовал? Я пробовал и не раз, и знаю о чем говорю. Если кто не верит, могу для прикола сделать прогу с двумя пнаелями которые будут мастерами для одного контроллера по разным портам. Вам только так кажется, что данные в интрефейс приходят только тогда, когда вы туда что-то пошлете. При старте контроллера и скады/панели в интрефейс приходит 0. Когда нажимаешь кнопку и задаешь параметр, то в интерфейс посылается значение уставки, и в ячейке памяти контроллера просиходит запись (в той ячейке, в которой лежит переменная интерфейса). После этого пермененная так и "болтается" в интерфейсе. И если эта же ячейка используется другим мастером, по другому интерейсу, то он так же её переписывает, а так как с интерфейса скады опять приходят данные то происходит повторная перезапись. Если кто не верит - попробуйте. Цитата(Rus75 @ 15.6.2012, 10:31)  Только вот последним всегда окажется СКАДА. И опять перезапишет уставку такой, какая нужна именно ей. Вариант, предложенный Chabool как раз работоспособный. Запись в память контроллера просиходит при ИЗМЕНЕНИИ поступающих данных из интерфейса из двух переменных. Которая последняя ИЗМЕНИЛАСЬ та уставка и записывается.
Сообщение отредактировал Max2114 - 15.6.2012, 9:55
|
|
|
|
|
15.6.2012, 9:58
|
Группа: Участники форума
Сообщений: 1337
Регистрация: 24.5.2010
Из: Москва
Пользователь №: 58149

|
Цитата(Max2114 @ 15.6.2012, 10:54)  Вы не читаете внимательно! У меня ModbusTCP и ModbusRTU - т.е. панель пишет по ModbusRTU а скада по ModbusTCP. И вообще я проблему уже решил - завел две переменные для интрефейса со скады и для панели. Запись в ПЛК происходит при изменении одной из переменных, кто последний изменился ту и записывает. Сделе это посредствам ПЛК. Насчет того,пишет ли вайнтек данные постоянно или нет - вы сами то пробовал? Я пробовал и не раз, и знаю о чем говорю. Если кто не верит, могу для прикола сделать прогу с двумя пнаелями которые будут мастерами для одного контроллера по разным портам. Вам только так кажется, что данные в интрефейс приходят только тогда, когда вы туда что-то пошлете. При старте контроллера и скады/панели в интрефейс приходит 0. Когда нажимаешь кнопку и задаешь параметр, то в интерфейс посылается значение уставки, и в ячейке памяти контроллера просиходит запись (в той ячейке, в которой лежит переменная интерфейса). После этого пермененная так и "болтается" в интерфейсе. И если эта же ячейка используется другим мастером, по другому интерейсу, то он так же её переписывает, а так как с интерфейса скады опять приходят данные то происходит повторная перезапись. Если кто не верит - попробуйте.
Вариант, предложенный Chabool как раз работоспособный. Запись в память контроллера просиходит при ИЗМЕНЕНИИ поступающих данных из интерфейса из двух переменных. Которая последняя ИЗМЕНИЛАСЬ та уставка и записывается.
|
|
|
|
|
15.6.2012, 10:26
|
Группа: Участники форума
Сообщений: 1337
Регистрация: 24.5.2010
Из: Москва
Пользователь №: 58149

|
Как я понял, проблемы возникают именно из-за OPC сервера. Вы не можете из СКАДы изменить параметры переменной. По этому параметры опроса. статус (чтение/запись) и т.д. и т.п. у вас определяются при конфигурации и изменеию не подлежат. Т.е. возникают програмные ограничения. Отсюда и приходится вам работать с программой контроллера. Тоже выход. Делали АСУ ТП для одного из заводов. Так специально для более гибкой настройки системы ставили на верхнем уровне мощные контроллеры и уже через них работали со СКАДой. Но я выполнял только "железную" часть проекта в тесном сотрудничестве с монтажной и наладочной организацией. Теперь то я понимаю, зачем такая конфигурация ими была задана. Хотя в первом посту вы предлагали использовать кнопу переключения на "ручное управление",т.е. у вас было видение. как заставить интерфейс не перезаписывать переменную.
Сообщение отредактировал Rus75 - 15.6.2012, 10:29
|
|
|
|
|
15.6.2012, 14:03
|
Группа: Участники форума
Сообщений: 830
Регистрация: 27.2.2008
Пользователь №: 16012

|
Реализовывали не единожды связки с MasterSCADA и ОРС Lectus с Modbus RTU Слейвами.
ОРС отвечал за циклическую передачу комманды записи Слейву лишь до того момента пока Слейв ее не исполнит/воспримет (о чем он и сообщает в ответе показывая примененные данные). После этого никакой циклической записи переменной не велось, по крайней мере до тех пор пока ее снова не изменят и пока не отпадет необходимость в циклических посылках (пока Слейв не ответит, что получил запром на запись).
|
|
|
|
|
15.6.2012, 19:00
|
МОДЕРАТОР
Группа: Модераторы
Сообщений: 10896
Регистрация: 3.7.2004
Пользователь №: 32

|
много букв. може уже есть ответ. надо в любом месте считать и лишь потом записать если была команда "фас" Код if (old != new) { if(bitFas)old = new } скада ничего не пишет если ничего тне отдает опс-серверу.
|
|
|
|
Гость_Max2114_*
|
15.6.2012, 20:00
|
Guest Forum

|
Блин, прошу прощения  Шайтан попутал. Сегодня поэкспериментировал - никаких манипуляций не надо - "кто последний тот и папа" по умолчанию... пол года назад эксперимнетировал с панелью и контроллером в качетсве мастера - была проблема. Сегодня подключил панель и паралельно скаду - все отлично и без всяких там изворотов. Видимо +45 ударили в голову (в смылсе +45 градусов тепла)..
Сообщение отредактировал Max2114 - 15.6.2012, 20:01
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
Реклама
ООО «Арктика групп» ИНН: 7713634274
ООО "Русич" ИНН 9721068883 / ЕРИД 2VtzqvMjLF8
ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqxXgvJi
Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqwyM2dc
Реклама: ООО «СЛ-ЛАЗЕР» ИНН 7727447267 | erid: 2VtzquvhFWx
Последние сообщения Форума
|