Симулатор за тестване на SCADA софтуер

Добър ден, скъпи хакери!

системата

Ще ви разкажа за моя проект, с който се занимавам в свободното си време от три години.

Работя във фирма за автоматизация като програмист на контролери. Напоследък използваме основно Siemens, SIMATIC S7 PLC и пакета за визуализация WinCC, но имаме опит и с други производители. Профилът на компанията е петролният и газовият сектор (резервоарни паркове, помпени станции, железопътни стелажи, акостиращи комплекси, пожарогасителни системи).

В момента, използвайки моята софтуерна платформа, можем да се отървем от повечето грешки и да отстраним грешките в автоматизираните функции в комфорта на офиса (вместо да седим на кабелна макара, в неотопляема стая, в мразовит зимен ден).

В опростен вид нашата система за управление на процеси се състои от следните компоненти:

  • Сензори (налягане, температура) и изпълнителни механизми (вентили, помпи).
  • Програмируем логически контролер (PLC).
  • Система за визуализация (SCADA, HMI).
Сигналите от сензори и изпълнителни механизми се изпращат до PLC, обработват се и се предават към системата за визуализация, с която човешкият оператор взаимодейства. Командите на оператора се предават обратно към PLC, който генерира необходимите сигнали за управление на изпълнителните механизми. В PLC са внедрени автоматизирани функции и аварийна защита (ESD).

Обикновено имаме двама души, които участват в разработката. Единият пише програма за PLC, вторият прави система за визуализация. Сега се опитваме да включим трети - тестер. Не мога да кажа, че прилагаме много сложни алгоритми за управление, но има някои специфики, свързани предимно с размера на системата. Например текущият ми проект има общо приблизително 2300 сигнала,повечето от които са входни (около 1500).

За тестване сглобяваме стенд, състоящ се от PLC и система за визуализация в офиса. Някои производители предлагат софтуерни PLC симулатори, така че понякога можете да се справите с конвенционален компютърен хардуер. Например S7PLCSim от Siemens:

scada

Остава въпросът със сензорите и изпълнителните механизми, които са свързани към нашата система чрез дискретни / аналогови входни / изходни сигнали.

Някои производители на PLC предоставят инструменти за софтуерна симулация на входни сигнали. Например чрез средата за програмиране Step7 за контролери на Siemens можете да настроите стойността на всеки входен сигнал в истински PLC, а ако използвате симулатор на контролер, просто го задайте чрез графичния интерфейс. На илюстрацията по-горе: IB 10 е входният байт, IW 5 е входната дума, QB 7 и QW 2 са изходите, а MD 123 е двойната дума във вътрешната памет на контролера.

Друг подход, който трябва да се спомене, е симулацията на входни сигнали на хардуерно ниво. За нас този подход е неудобен - твърде много време се изразходва за връзка. Освен това в офиса обикновено има само процесорен модул от PLC, а модулите за свързване на входно-изходни сигнали, които са поставени в отделни шкафове, са на склад или вече са изпратени за монтаж на клиента.

Ясно е, че с такива средства е възможно да се извърши проста проверка на преминаването на сигнали от контролера към системата за визуализация и обратно. Можете да дебъгвате не много сложни автоматични алгоритми, тъй като стъпка 7 има точки на прекъсване. Но ако в алгоритъма участват няколко части от оборудването (няколко помпи + тръбопроводи от клапани и сензори), това е доста трудно.

От няколко години за всичкина моя проект, в допълнение към програмата за PLC, създавам софтуерен симулатор на автоматизиран обект. Англоговорящите източници понякога наричат ​​такива системи - Factory Acceptance Test (FAT) simulator (симулатор за фабрично приемане) и ги класифицират според степента на надеждност на симулацията. В мрежата няма много информация за създаване на такива симулатори, използват се главно Matlab + Simulink, LabView, някой изпълнява симулацията вътре в PLC. Има специални инструменти за разработка - WinMOD, Mynah MiMiC, Siemens SIMIT, APROS.

След известно мислене реших да опитам да създам своя собствена платформа. На първо място, имаше желание да науча нещо ново (.NET и C#). Обстоятелствата се стекоха добре и нашата компания за един от проектите придоби готова OPC клиентска библиотека. Това ми позволи да се концентрирам върху основната задача.

За да се създаде софтуерен симулатор за стенд с реален PLC, е необходимо да се предвиди замяната на данните, получени от физически входове, с такива за симулация. За съжаление, това трябва да се направи в самата програма на контролера. Следващата стъпка е да се осигури достъп до тези данни през OPC интерфейса. След това можете да започнете да пишете PLC програма и да създавате симулатор на автоматизирания обект.

Ако използвате S7PLCSim, няма нужда от заместване на данни. В този случай системата за визуализация ще трябва да се изпълнява на същата машина заедно със S7PLCSim и симулатора на обект (ограничение на S7PLCSim). В случай на липса на мощност, можете да опитате да ги разпространите с помощта на безплатната помощна програма NetToPLCSim.

Разработената от мен платформа е като примитивна среда за създаване на системи за визуализация. Работата може да бъде разделена на три етапа:

  1. Създаване на променливи (Item). Има само три типа:
  2. вътрешен - вътрешенпроменлива, която се използва за комуникация между обекти в рамките на симулатора.
  3. OPC е променлива, свързана с външен OPC сървър. В този случай симулаторът действа като OPC клиент.
  4. S7PLCSim - тази променлива е предназначена за комуникация със симулатора на контролера SIMATIC S7. Поддържат се области на паметта I, Q, M и DB.
  5. На настоящия етап на разработка платформата позволява връзка само към един симулатор на контролер SIMATIC S7 и един OPC сървър. От друга страна, всички променливи са видими в OPC, тъй като платформата е OPC сървър.

Можете да добавяте и премахвате променливи, докато симулаторът работи. Системата няма да ви позволи да изтриете променлива, която се използва.

Обект може да се добавя, премахва и свойствата му могат да се редактират, докато симулаторът работи.

Създаване на потребителски интерфейс. Като основа се използва панелът с раздели (TabControl). На всеки създаден екран можете да поставите дисплеи на симулационни обекти. Например, аналогов сензор, можете да го показвате като плъзгач, поле за въвеждане на стойност или графика, навсякъде в панела. Един и същ обект може да се показва произволен брой пъти, на един или няколко панела, в различни изгледи.

За да изтриете симулационен обект, първо трябва да изтриете всичките му дисплеи на всички панели. Конфигурацията на симулатора се записва като XML файл с проста структура:

Това ви позволява да го редактирате ръчно, да го генерирате със скриптове, например в Excel, както и да използвате напълно системата за контрол на версиите.

Ето как може да изглежда интерфейсът на симулатора:

симулатор

Възможности

Създаването на симулатор на автоматизиран обект предоставя много предимства:

  • Удобство за разработка и тестване.Чрез създаване на PLC програма и паралелно сТъй като има симулатор на обекти, мога да тествам всяка част от кода и да симулирам почти всяка ситуация. Конструкторът на системата за визуализация също се радва на всички удобства на симулатора, без да се задълбочава в PLC програмата (и без да ме дърпа всеки път, когато иска да провери нещо). Повече или по-малко нормален графичен интерфейс ви позволява да включите в тестването на системата човек, който не е участвал в нейното създаване, което означава, че той ще открие повече грешки от всеки от създателите. Освен това, дори в обекта, можете да превключите системата в режим на симулация, да модифицирате и проверите нещо напълно софтуерно, без да използвате реално оборудване.
  • Демонстрация на работата на софтуерната част на системата, независимо от степента на готовност на всичко останало.
  • Обучение на оператори.Пускането на системата в режим на симулация позволява на оператора да проучи работата на системата (и да открие грешки) по-подробно и най-важното без стрес.
  • Опростяване на гаранционната поддръжка на системата.Ако пресъздадете условията за възникване на грешка, понякога можете да минете без командировка до обекта.

По-нататъчно развитие

Тъй като това е първият ми опит в създаването на нещо сериозно в C#, преди всичко бих искал да преработя архитектурата:

  • Изберете слоя, отговорен за външните връзки и ги внедрите като добавки (Plug-in). Това ще ви позволи да се свържете с множество OPC сървъри и екземпляри на Siemens SIMATIC S7PLCSim. Освен това ще улесни добавянето на други видове връзки, като Modbus.
  • Вградете клас визуални елементи, които не са свързани със симулационни обекти. В момента всеки елемент на потребителския интерфейс на екрана е задължително свързан със симулационен обект, което не е много удобно. Понякога наистина не е достатъчноспособността да нарисувате нещо, да вмъкнете картина или просто да напишете обяснителен текст.
  • Създайте Plug-in система за симулационни обекти и техните съпоставки. Основната посока на развитие на платформата е разширяването на библиотеката от симулационни обекти, така че удобството при тяхното създаване и интегриране е ключов фактор.