This is topic Отчет тревог in forum Редактор проекта TRACE MODE 6 / at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/32/t/000357.html

Posted by Helic (Участник № / Member № 3274) on :
 
Здравствуйте. Выходной аргумент программы имеет тип "string" и привязан к атрибуту "Коментарий" канала.Каким образом передать значение аргумента программы в Отчет тревог.
 
Posted by Baikal_E (Участник № / Member № 4135) on :
 
Вот один из способов [clever / умный] : в вашей программе каждому значению типа string присваиваете порядковый номер от 1 до N. Например:
1 - давление превышено;
2 - температура пониженная;
..
8 - недостаточно горючего.
...
N - экстренный останов.


Далее создаете пользовательский словарь с сообщениями, которые в программе имеют номера.
Далее создаете канал, связанный с системной переменной @Message типа OUTPUT и этот канал связываете с пользовательским словарем. Затем из программы подаете во входное значение созданного канала номер сообщения. В результате вы получите в Отчете тревог ваше значение типа string [Усмешка / Big Grin] .
Если значений типа string больше 8, то придется [duno / незнайка] создать еще один пользовательский словарь с каналом, связанным с системной переменной @Message типа OUTPUT и создать еще один канал Call, который вызывает программу. В этой программе все атрибуты (из предыдущей программы) с номером больше 8 переопределить, т.е.
9 будет 1
10 будет 2
и т.д до 8
И также значения от 1 до 8 посылаете на вход второго созданного канала. Таким образом можете читать в отчете тревог уже 16 [fun / веселый] атрибутов типа string.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Запись длинных строк в канал CALL

Для канала CALL.STRING:

если в канале установлен флаг Отчет тревог (43,EB), при каждом изменении CALL.STRING.R значение соответствующего аргумента (или комментарий) записывается в ОТ (не более 48 символов);
 
Posted by Baikal_E (Участник № / Member № 4135) on :
 
Если я правильно понял, канал CALL.STRING - это канал Call с типом вызова String. C какого релиза появился данный тип вызова канала Call?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В текущем релизе данный канал работает.
 
Posted by Baikal_E (Участник № / Member № 4135) on :
 
Что в текущем релизе работает-это понятно [Усмешка / Big Grin] . Скажите, пожалуйста, с какого релиза появился данный канал [Недоумение / Confused] , т.к. мы используем в проектах разные релизы.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
6.06.2
 
Posted by Baikal_E (Участник № / Member № 4135) on :
 
Спасибо за информацию!!
 
Posted by Selya (Участник № / Member № 6591) on :
 
Сделал, как посоветовали во 2ом сообщении темы.
Канал Message_OUT привязан к системной переменной @Message и к Пользовательскому словарю.

Далее в программе на Техно ST отправляю в Отчёт тревог сообщения следующим образом:
code:
Message_OUT_In = 1; // Message#1

Столкнулся с такой проблемой, если сделать так:
code:
Message_OUT_In = 1; // Message#1
...
Message_OUT_In = 2; // Message#2

то в ОТ приходит только одно сообщение Message#2
Получается, что в рамках одного такта программы Message#2 как бы затирает Message#1

Как бы сделать так, чтобы в ОТ приходило и Message#1 и Message#2 ?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Действительно, в одном такте канал может выдать только одно сообщение из привязанного к нему "Словаря сообщений".
Чтобы выдать последовательно 2 сообщения, надо предусмотреть, чтобы программа выдавала соответствующие команды последовательно на разных тактах.

Кроме того, если количество передаваемых таким образом сообщений ОТ больше 8, целесообразно использовать не системную переменную @Message и "Пользовательский словарь", а канал HEX16 с установленным флажком "Параметры/Вид представления DEC" (см. документацию "Архивирование/Отчет тревог узла/Сообщения по каналам/Сообщения по каналам HEX16 и HEX32").
 
Posted by Selya (Участник № / Member № 6591) on :
 
Действительно, этот вариант с HEX16/HEX32 мне больше подходит.
А есть какой-то простой способ прервать выполнение программы и перейти в следующий такт? Не хочется изобретать велосипед.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Если 2 сообщения всегда должны выводиться в ОТ последовательно, то может быть есть смысл объединить их в одно сообщение?
Если выбор сообщения зависит от каких-то условий, то при правильном построении программы будет выводиться только одно сообщение.

Прервать выполнение ST-программы можно с помощью оператора goto.
 
Posted by Selya (Участник № / Member № 6591) on :
 
Нет, сообщения в ОТ выводятся не последовательно, между ними есть ещё операции, которые тоже могут выводиться в ОТ через Словари сообщений Для_канала_Событие, Для_FLOAT.
Про goto уже догадался. С ним и без того сложная программа получается ещё запутанней.
 
Posted by Selya (Участник № / Member № 6591) on :
 
Пришёл к такому не очень красивому, но работающему решению: на каждое сообщение создаю собственный канал и все эти каналы привязываю к одному Словарю сообщений. Тогда вводимые последовательно сообщения будут последовательно отображаться:
code:
Message1_OUT_In = 1; // Message#1
...
Message2_OUT_In = 2; // Message#2


 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2