Стартовая страница › Форумы › Разработка и интеграция › ModFBDJP
Помечено: FBD
- В этой теме 33 ответа, 3 участника, последнее обновление 2 месяца, 3 недели назад сделано manjey73.
-
АвторСообщения
-
06.03.2024 в 15:13 #31281JurasskParkУчастник
Уважаемый @manjey73, ну так все переменные теги (входные и выходные) как и константы считается из статичные переменные из программы, расчетные теги котрые получили все запишутся в скаду.
1. Прочитали их Скада входные теги
2. Программа рассчиталась
3. Выходные теги передались на запись в Скада
4. Перешли к другой программеЯ правильно понимаю, что вы боитесь, что будет одна переменная на входе и одна на выходе? ? И вы такой… Ууууу… Сволочь…
06.03.2024 в 15:21 #31282manjey73УчастникСкорее 1-ое.
Если брать по аналогии с любыми ПЛК (не путать с программируемыми реле) где есть участки кода, которые требуется выполнять. В CodeSys это называется POU.
Которые можно вызывать либо из самой программы Main, либо настроить циклический вызов по времени или событию. Вот кстати модуль и должен это разруливать.Соответственно входы и выходы надо связывать с каналами Scada.
Например устанавливаем Scada на промПК, добавляем модули ввода/вывода ну скажем с Modbus протоколом.
В модуле пишем программу, как бы мы писали в ПЛК с учетом там архитектуры и т.д.
Связываем через каналы от модулей входы и выходы программы с входами и выходами модулей ввода/вывода.Получаем в итоге SoftPLC вместе со Scada и HMI в одном флаконе.
Сейчас это можно реализовать установив например openPLC и Scada на одно железо. Но если это будет модуль сервера Scada то это вообще будет круть 🙂
К тому же я смотрю по списку на скрине там и работа с файлами (FileSystem ветка) есть и еще что-то06.03.2024 в 15:24 #31283manjey73Участник@JurasskPark правильно поняли — боюсь 🙂 но простые функции на FBD тоже никто не отменял… 🙂
Более развернуто выше. Даже сейчас можно установить openPLC и через Modbus получить то же. Но модуль сервера для Scada было бы круто, особенно с функционалом самому создавать эти самые FBD. Не в рамках VisualStudio в качестве библиотеки, а непосредственно в модуле. Но тут как говорится как код написан.06.03.2024 в 17:01 #31285JurasskParkУчастникЧего точно не будет, это разработки блоков в модуле. Только Visual Studio. Только хардкор. ?
06.03.2024 в 17:47 #31286manjey73Участник@JurasskPark ну на самом деле не так принципиально, главное, чтобы было можно самостоятельно.
Тут больше другое волнует. Возьмем банальный TON, мы поставили в программе больше одного TON — Модуль должен понимать что эти TON разные и выделять под их работу свою область памяти. Для флага, для выхода блока и т.д. то есть как это реализовано в рантаймах ПЛК.
И так со всеми блоками одной программы.То есть по сути как реализовано в драйверах, код драйвера один, но мы можем запустить два экземпляра драйвера как на одной линии связи, так и на разных и мешать они друг другу не будут, если мы сами в коде драйвера это не предусмотрели, используя общие данные линии связи или глобальные на разных линиях связи.
- Этот ответ был изменен 10 месяцев, 3 недели назад от manjey73.
07.03.2024 в 08:53 #31289manjey73УчастникДа, про разработку блоков в модуле, возможно только самими же FBD ?
То есть накидали квадратиков AND, OR, TON, RTrig и так далее, соединили их линиями, для соответствия работы программы, потом обвели и сказали сохрани как макрос или как групповой FBD с заданием своего имени?Такое доступно при реализации? я не говорю про язык ST или написание блока на C# непосредственно в модуле.
07.03.2024 в 11:29 #31290JurasskParkУчастникДа, про разработку блоков в модуле, возможно только самими же FBD ?
То есть накидали квадратиков AND, OR, TON, RTrig и так далее, соединили их линиями, для соответствия работы программы, потом обвели и сказали сохрани как макрос или как групповой FBD с заданием своего имени?Такое доступно при реализации? я не говорю про язык ST или написание блока на C# непосредственно в модуле.
Проще ответить кодом. Как это выглядит. Если одним словом, то визуализация рисуется кодом. Никаких UserControl нет.
И чтобы появился какой-то элемент, например, label — его сначала как компонент разработать, а потом добавлять.using FBDJP.Base.Components.Base; using FBDJP.Base.Components.Switches.Base; using FBDJP.Base.Components.UI; using FBDJP.Base.Processing; namespace FBDJP.Base.Components.Switches.Logic { public class OrSwitch : SwitchBase { protected override void OnInitialize(Engine renderingEngine) { ActivateInputAdd(new PinDescription(typeof(bool), UIType.CheckBox), 2); AddOutput(typeof(bool)); UniqueName = "FBDJP.Base.Components.Switches.Logic.Or"; DisplayName = "Or"; Description = "Or Gate"; } public override GroupBase OnSetGroup() { return Groups.Logic; } protected override void OnProcessData<T>(Processor p, ProcessingNode<T> node) { bool result = false; for (int i = 0; i < TotalInputs; i++) { result = result || GetDataValueOrDefault<bool>(i); } SetData(0, new DataContainer(result)); base.OnProcess(p, node); } } }
07.03.2024 в 11:32 #31291manjey73УчастникНу я не говорю, как он будет выглядеть кодом в сохраненном файле MyFBD_1.
Я о другом. О возможности создать FBD, который потом вставится в другую программу и будет выглядеть как MyFBD_1 а не набором опять всяких AND, OR, XOR и так далее07.03.2024 в 11:38 #31292JurasskParkУчастникТакого функционала нет.
Посмотрел у Owen Logic — это называется Макрос.07.03.2024 в 11:41 #31293JurasskParkУчастникКстати, с таким подходом вам можно взять библиотеки Owen Logic и вам начать свой модуль. 😀
07.03.2024 в 11:49 #31294JurasskParkУчастникНо! Я посмотрел, Owen Logic тоже использует библиотеку Newtonsoft.Json.dll для блоков, поэтому «подсмотреть» как они создают макрос — думаю можно попытаться.
07.03.2024 в 11:58 #31295manjey73УчастникДа, именно. Макрос в Овен Лоджике. В других ПЛК это может называться по другому.
Как писал выше, в том же CodeSys это тоже программа и отмечается как POU. У нее есть входы, выходы. Ее можно поставить как ОДИН квадратик (для аналога языка FBD) в основной программе, соединить ее входы/выходы с требуемыми переменными и т.д.
При чем можно в двух экземплярах или больше.Ну простой пример. Кран с приводом и концевыми выключателями. Я например брал себе домой у китайцев, подбирал себе по управлению из СЕМИ СХЕМ. То есть они отличаются по принципам управления. Самый простой это пружинный, подал питание открылся, снял питание — закрылся. Но есть и более сложные схемы. То же встречал и на клапанах для вентиляций.
Соответственно надо накидать программу управления под конкретную схему и лучше оформить это в виде макроса.Вот как пример. Макрос один, но могу в программе установить таких два.
07.03.2024 в 12:00 #31296manjey73УчастникНе, не, не. Не смотрите на Овен Лоджик как способ реализации, я всего лишь пример из него привел. И Newtonsoft.Json.dll там совсем для других вещей. В части именно программы и макросов там полная ЖОПА 🙂 …
У них графический стол программы в прямом смысле, не координатный.- Этот ответ был изменен 10 месяцев, 3 недели назад от manjey73.
07.03.2024 в 12:02 #31298manjey73Участникна картинке слева это макрос в поле программы, а справа потроха самого макроса.
Вот чтобы потроха не повторять и делается макрос, можно использовать в программе более одного. И не сыпать кучу элементов на поле… макрос выполняет строго определенную функцию, но повторяющуюся.Способ реализации как писал может быть разным, главное чтобы в основной программе не было мусора из потрохов.
07.03.2024 в 14:39 #31299MikhailМодераторВ современном .NET Newtonsoft.Json заменена на встроенные классы .NET для работы с JSON. Если есть возможность, лучше использовать их, чтобы уменьшить dll hell.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.