Форум TRACE MODE: техническая поддержка
Тема закрыта / Topic Closed  Тема закрыта / Topic Closed
Послать новую тему / Post New Topic  
Тема закрыта / Topic Closed  Тема закрыта / Topic Closed
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » Языки программирования в TRACE MODE 6 / Algorithm Programming Languages » Написание алгоритма счетчика Блок контакта

   
Автор / Author Тема / Topic: Написание алгоритма счетчика Блок контакта
Сергей Кравчук
Forum Member / Участник форума
Участник № / Member № 5384


Icon 1 отправлено / posted      Профиль для / Profile for Сергей Кравчук           Редактировать/удалить сообщение / Edit/Delete Post 
День добрый!

Есть контроллер, на котором установлен блок контакт, котрый считает количество скипов на шахте,
с контроллера приходит значение канала 0 или 1,
т.е. смена значения канала ( канал: K019_2_SP1_D, канал класса HEX16) с 0 на 1 и наоборот 1 на 0 считается как 1 скип (канал: SCHETCHIK_SKIPOV, канал класса HEX16).

Задача состоит в следующем:

Необходимо написать программу, которая будет считать эти изменения в реальном времени.
Также необходимо сделать возможность сброса значения счетчика.

Пробовал различные варианты алгоритмов, ни чего не помогает [Неодобрение / Frown]
В предыддущей Скада системе, счетчик работал отлично. Но при переходе на Трасе Мод старый алгоритм
счета скипов не работает.

Привожу рабочий алгоритм в предыдущей скада системе (VB script):

If Adroit.GetTag ("K19_2_SP1.value") <> Adroit.GetTag ("SC.value") Then
Schetchik = Adroit.GetTag ("SKIP.value")
If Adroit.GetTag ("K19_2_SP1.value") = "Истина" Then
Adroit.SetTag "SKIP.value",Schetchik +1
End If
Adroit.SetTag ("SC.value"),Adroit.GetTag ("K19_2_SP1.value")
End If

,где
K19_2_SP1.value - значение канала K019_2_SP1_D
SC.value - временная переменная, которая хранит предыдущее состояние K19_2_SP1.value
Schetchik - временная переменная, которая хранит предыдущее состояние SKIP.value
SKIP.value - счетчик скипов SCHETCHIK_SKIPOV

Вот программа на языке ST:

if K019_2_SP1_D_R <> SC_TEMP then

if K019_2_SP1_D_R == true then
SCHETCHIK_SKIPOV_In = SCHETCHIK_SKIPOV_In + 1;
SC_TEMP = K019_2_SP1_D_R;
end_if;
End_if;

,где
K019_2_SP1_D_R - аргумент привязанный к реальному значению канала K019_2_SP1_D
SC_TEMP - глобальная переменная
SCHETCHIK_SKIPOV_In - аргумент привязанный к входному значению канала SCHETCHIK_SKIPOV

Пробовал использовать атрибут 6 (Тенденция)

if K019_2_SP1_D_D == 1 then
SCHETCHIK_SKIPOV_In = SCHETCHIK_SKIPOV_In + 1;
End_if;

Сейчас пробоуем вариант с использованием внешней DLL, но есть загвоздка в том что, функция передает одно значение.
А необходимо передавать 2, сам счетчик и временную переменную.

Но никаких положительных результатов это не дало.
Прошу помощи у знающих.

Сообщения / Posts 39 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
1. По первому и второму вариантам Ваших программ считаться могут только переходы из 0 в 1. Обратные переходы не будут считаться.
По третьему варианту (через тенденцию) при правильной организации вызова программы, правильных типах данных и правильных привязках должны считаться оба перехода.
2. Какой тип имеет аргумент программы, связанный с входным значением канала SCHETCHIK_SKIPOV? Он должен быть IN/OUT.
3. Как вызывается программа? Каналом CALL или процедурой трансляции? Если программа вызывается в качестве процедуры трансляции числового канала, привязки должны быть иными.
4. Самый простой вариант программы - без условного оператора:
SCHETCHIK_SKIPOV_In = SCHETCHIK_SKIPOV_In + K019_2_SP1_D_D;
5. Необходимо также учитывать соотношение периода отработки контроллируемого контакта, периодов обработки каналов K019_2_SP1, SCHETCHIK_SKIPOV и периода вызова программы. Если сигнал меняется чаще, чем он обрабатывается в K019_2_SP1, программе и канале SCHETCHIK_SKIPOV, возможно нарушение функции счета.

Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Сергей Кравчук
Forum Member / Участник форума
Участник № / Member № 5384


Icon 1 отправлено / posted      Профиль для / Profile for Сергей Кравчук           Редактировать/удалить сообщение / Edit/Delete Post 
2. Тип in/out тип данных real
3. вызывается в цикле CALC, т.е. программа вызывается в том же цикле в котором опрашивается канал K019_2_SP1_D
5. Период обработки контакта, каналов K019_2_SP1, SCHETCHIK_SKIPOV и вызова программы один (т.е. цикл CALC).
Сам блок-контакт считает все правильно, проверяли по базе данных, т.е. записи изменения состояния котатка соответствуют реальному изменению состояния скипа.

Хотелось бы отработать вариант с (6) тенденцией.

Как правильно вызывать программу?
Возможно ее следует повесить на трансляцию канала K019_2_SP1_D?

K019_2_SP1_D - канал класса HEX16
Какие аргументы заводить??
я создавал аргумент
K019_2_SP1_D_D тип IN тип данных Real, и привязывал его к атрибуту (6) Тенденция канала K019_2_SP1_D.
Возможно я не правильно завел аргумент, и у меня не происходило изменения состояния канала ...

Сообщения / Posts 39 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
1. При использовании программы "с тенденцией" ее нельзя вызвать в процедуре трансляции канала K019_2_SP1. А вот в процедуре трансляции канала SCHETCHIK_SKIPOV - можно. Только тогда тип аргумента программы SCHETCHIK_SKIPOV надо сделать IN/OUT и привязать к РЕАЛЬНОМУ значению канала SCHETCHIK_SKIPOV.
2. Тип данных у обоих аргументов программы должен быть целочисленный.
3. Полный период обработки сигнала контакта (приема, программой, пересчет каналов) должен быть безусловно меньше, чем минимальный промежуток времени неизменности сигнала.

Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Сергей Кравчук
Forum Member / Участник форума
Участник № / Member № 5384


Icon 1 отправлено / posted      Профиль для / Profile for Сергей Кравчук           Редактировать/удалить сообщение / Edit/Delete Post 
Спасибо, вариант с трансляцией канала SCHETCHIK_SKIPOV подошел,
только вот канал K019_2_SP1 пришлось перевести с класса HEX16 в класс FLOAT,
т.к. тенденция в классе HEX16 почемуто не срабатывала у нас.

Сообщения / Posts 39 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Мы проверяли предлагаемое решение на каналах HEX16.
Готовы рассмотреть Ваш вариант "не работающего" решения в рабочем порядке.
Пришлите Ваш проект на hotline@adastra.ru.

Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Послать новую тему / Post New Topic  
Тема закрыта / Topic Closed  Тема закрыта / Topic Closed
Открыть тему / Open Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2