PDA

Просмотр полной версии : Как конкатенировать строки в таблице аварийных сообщений?



alekstani
27.03.2023, 11:05
Добрый день!
Подскажите, пожалуйста, есть ли какой-то функционал в Codesys v3.5 sp17 для конкатенации строк в таблице аварийных сообщений (баннере). Таблица обращается к списку текстов, где находит общее аварийное сообщение к нему нужно прибавить индекс в виде цифры. Пытался в текстовую таблицу записать оператор типа CONCAT(Критически высокий уровень PH, PV.iWorkingMachine); Не помогает. Может быть кто-то знает как решаются подобные задачи?

Евгений Кислов
27.03.2023, 11:34
Добрый день!
Подскажите, пожалуйста, есть ли какой-то функционал в Codesys v3.5 sp17 для конкатенации строк в таблице аварийных сообщений (баннере). Таблица обращается к списку текстов, где находит общее аварийное сообщение к нему нужно прибавить индекс в виде цифры. Пытался в текстовую таблицу записать оператор типа CONCAT(Критически высокий уровень PH, PV.iWorkingMachine); Не помогает. Может быть кто-то знает как решаются подобные задачи?

Добрый день.
Используйте LATCH-переменные (триггерные переменные).

alekstani
27.03.2023, 12:10
Ок. Спасибо

alekstani
03.04.2023, 18:48
Добрый день!
После текста аварии использую триггерную переменную. Однако, по какой-то причине она не обновляется ни в баннере, ни в таблице аварийных сообщений пока авария не подтверждена. Фактически же триггерная переменная изменяется, но в таблице она раз за разом повторяется. В таблице она находится в столбце станок и каждая строка это авария для другого станка чем был прежде. Обязательно нужно использовать аварии с квитированием. В чем причина и как это исправить?66987

Евгений Кислов
03.04.2023, 18:57
Добрый день.
Выложите, пожалуйста, простейший проект, в котором я смогу повторить проблему и пошагово опишите, как именно это сделать.

alekstani
04.04.2023, 09:24
Добрый день!
Не могу прикрепить проект. Направил на почту.
В проекте необходимо наблюдать за переменной PV.iWorkingMachine, при этом ее значение со временем меняется, однако в таблицу записывается одно и тоже значение, если не квитировать аварию.

Евгений Кислов
04.04.2023, 09:54
Добрый день!
Не могу прикрепить проект. Направил на почту.
В проекте необходимо наблюдать за переменной PV.iWorkingMachine, при этом ее значение со временем меняется, однако в таблицу записывается одно и тоже значение, если не квитировать аварию.

Не получил письма.
Залйте проект на файлообменник и выложите здесь ссылку.

alekstani
04.04.2023, 10:24
https://disk.yandex.ru/d/uiSDdZ-yPtJk2Q

Евгений Кислов
04.04.2023, 10:46
Я посмотрел ваш проект.
На мой взгляд, единственный вариант - добавить на каждый станок свою отдельную тревогу.
У вас сейчас одна тревога на все станки и требуется квитирование. Значение LATCH-переменной фиксируется при перехода в состояние тревоги ACTIVE.
А для перехода в него нужно, чтобы тревога была предварительно сквитирована. Т.е. все работает именно так, как задумано разработчиками CODESYS - просто вам требуется иное поведение.

alekstani
04.04.2023, 10:53
Вы не представляете сколько тогда мне тревог придется записать в список текстов (на порядок больше) и плюс это не гибкая система получается, т.к. индексы (в качестве которых выступают триггерные переменные) могут иметь разное значение. Где-то это цифры, где-то приставка к цифрам текстовая идет.

Евгений Кислов
04.04.2023, 10:56
Вы не представляете сколько тогда мне тревог придется записать в список текстов и плюс это не гибкая система получается, т.к. индексы (в качестве которых выступают триггерные переменные) могут иметь разное значение. Где-то это цифры, где-то приставка к цифрам текстовая идет.

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

alekstani
04.04.2023, 11:00
Можете подсказать другой вариант? Если к примеру перед каждым новым сообщением старое квитировать автоматически и аварию вызывать, например, по событию.
Я попробовал вызывать два метода, но почему-то тогда триггерная переменная не успевает записываться совсем. Может мне разнести эти методы в разные циклы программы?
AlarmManager.AlarmGlobals.g_AlarmHandler.Acknowled geOneOfGroup(Alm_AlarmConfiguration_Alarmgroup_IDs .ID_Sensors, Alm_Sensors_Alarm_IDs.ID_51);
AlarmManager.AlarmGlobals.g_AlarmHandler.RaiseEven t(Alm_AlarmConfiguration_Alarmgroup_IDs.ID_Sensors , Alm_Sensors_Alarm_IDs.ID_51);

Евгений Кислов
04.04.2023, 11:06
А в чем тогда вообще смысл квитирования, если оно будет "автоматическим"?
Может тогда вообще от него отказаться?
Или представить квитирование в виде отдельного события в группе тревог?