Как Eclipse Sirius может взаимодействовать с другими системами?
Что я хочу:
У меня датчик с переменной isWorking(boolean)
на реальной системе. Теперь я хочу зрителя, который показывает мне, работает ли датчик или нет. Например, сенсорный узел зеленый или красный.
Что я имею:
У меня есть программа softSPS на CoDeSys с переменной isWorking
, С помощью JEasyOPC я могу прочитать / переписать эту переменную и распечатать ее в консоли Eclipse. Я также создал модель Sirius для своей системы во время выполнения затмения, как показано во всех учебных пособиях Sirius, которые я нашел. Я видел, что я могу изменить цвет узла с условным стилем.
Итак, у меня есть узел Sensor
и переменная isWorking
но я не знаю, как их соединить.
Я нашел кое-что о "внешнем действии Java" в документации Sirius. В Sirius Forum также есть пример ( https://www.eclipse.org/forums/index.php/t/764175/), но я не знаю, работает ли это для моей проблемы и как я могу использовать JEasyOPC с их.
Другой способ, который я нашел, - это связывание данных JFace, но я нашел только учебник, который работает с моделью EMF, а не с диаграммой Sirius ( http://www.vogella.com/tutorials/EclipseDataBindingEMF/article.html). Я не хочу менять свою метамодель.
2 ответа
Я знаю Затмение и Сириус. Если я вас правильно понимаю, у вас есть переменная, с помощью которой вы хотите отобразить узел другого цвета в соответствии со значением переменной. Чтобы сделать это, вы должны быть заняты ожиданием [1], что не является наилучшей практикой, поэтому рекомендуется уведомить слушателя об изменении значения переменной.
Затем, следуя выбранной вами стратегии, занятому ожиданием (с потоком, который зацикливает вашу переменную в цикле) или слушателем, вам необходимо обновить модель EMF, чтобы Сириус реагировал на изменение модели EMF и изменял цвет узла.
С уважением.
Лучший способ сделать это - использовать механизм Java-сервисов Sirius. Сначала необходимо добавить класс расширения для вашей точки обзора в проекте спецификации точки обзора. Вы щелкаете правой кнопкой мыши по точке обзора и выбираете New Extension/Java Extension
, Там вы вводите имя класса, которое содержит метод, который вы хотите вызвать в вашем элементе Sirius. Однако для вызова вашего метода вы должны использовать либо service:
элемент или выражение Acceleo, как это [methodName()]
,
Вы должны убедиться, что ваш класс, для которого вы вызываете метод, доступен для использования Сириусом. Это означает, что вам нужно запустить среду 3-Eclipse следующим образом:
- Окружающая среда затмения нет. 1, содержащий вашу модель и класс, содержащий ваш метод обслуживания
- Эклипс № экземпляра 2 запущен с нет. 1, который содержит ваш проект спецификации точки обзора Sirius
- Эклипс № экземпляра 3 запущенная форма №. 2, которая будет содержать ваши диаграммы, созданные для вашего экземпляра модели.
Вы можете посмотреть на это для получения дополнительной информации (лучше, чем действия Java): https://www.eclipse.org/sirius/doc/specifier/general/Writing_Queries.html
Также имейте в виду, что если ваш метод обслуживания должен вести себя по-разному, в зависимости от узла Sirius, на котором отображается результат, вам нужно будет убедиться, что вы передали правильный контекст. Я могу помочь с этим, просто дайте мне знать в комментарии. Однако, если ваш метод обслуживания только проверяет одну вещь, а затем возвращает результат (т.е. у вас есть только один датчик, который вы видите на диаграмме), вам не нужно беспокоиться об этом.