Форум 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 » Програмирование циклов в Техно ST

   
Автор / Author Тема / Topic: Програмирование циклов в Техно ST
sinegub_mihail
Forum Haunter / Завсегдатай форума
Участник № / Member № 4460


Icon 5 отправлено / posted      Профиль для / Profile for sinegub_mihail           Редактировать/удалить сообщение / Edit/Delete Post 
Уважаемая техническая поддержка!!!

Вопрос 1:
Как реализовать работу программы методом циклов??? На языке Си понятно, а как на Техно ST?
Например, в первом цикле "Исходном" проверяется условие насоса и вентилятора =0, если соответствует, тогда переходим в цикл "Проверка", где проверить состояние дискретных датчиков на равенство =1, если равно то перейти в следующий цикл "Управление", где нужно послать 1 на включение насоса и вентилятора. После включения проверить одновременно состояние этих механизмов (проверка равенства =1), после этого переходим в другой цикл "Проверка 1", где проверяем другие дискретные датчики на равенство =1. Если в условиях любой из датчиков =0 то надо возвратится в цикл "Исходное". И все начинается с начала...


Вышлите пример работы с циклами и каким то таймером ( подсчет по 1 сек) на ел. почту.

Вопрос 2:

Программа циклограммы работы должна находится первой среди программ или ризница не имеется ???
Допустим в циклограмме будет описываться работа объекта с разных циклов, "Проверка", "ПУСК", "Управление" , "Регулирование" , "Аварийный останов" или так далее... [clever / умный] [clever / умный] [clever / умный]

Сообщения / Posts 105 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534


Icon 1 отправлено / posted      Профиль для / Profile for Abram Shnider           Редактировать/удалить сообщение / Edit/Delete Post 
Насколько я понимаю, программы в TM6 выполняются в цикле по умолчанию. Следовательно, предлагаю Вам построить конструкцию из вложенных операторов if-then-else.
Если я Вас правильно понял, то Вы хотите получить период отработки программы по таймеру... Тут могу сказать только то, что TM6 точно может отрабатывать программу каждую секунду (пробовал каждый цикл воспроизводить текущее количество секунд с начала суток).

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


Icon 1 отправлено / posted      Профиль для / Profile for sinegub_mihail           Редактировать/удалить сообщение / Edit/Delete Post 
таймер нужен для счета времени цикла а также задержки или контроля входных сигналов или управления исполнительными механизмами.
Вот например цикл "Проверка герметичности клапанов" на языке Си реализуем так:
#include "zio8252.h"
#include "zstdio.h"
#include "cycles.h"
#include "const.h"


extern void Control_False_Plam_1_2(); /* Контроль ложного пламени 1,2 */

void Control_Cycle_Test_Bell() /* Тест звонка */
{
f_Enable_Long_Stop = 0; /* сбрасываем длинный останов */

if ( f_timer_cycle == ON )
{
Alarm_Bell = ON; /* Звонок аварии */
Alarm_Dispatcher = ON; /* Авар. диспетч. */
Work_Dispetcher = ON; /* Работа диспетч. */
}
else
{
Alarm_Bell = OFF; /* Звонок аварии */
Alarm_Dispatcher = OFF; /* Авар. диспетч. */

if ( f_Control_Hermetic == 0 ) /* проверка герметичности */
{ Next_Cycle = Cycle_tr1; } /* указываем следующий цикл */
else
{ Next_Cycle = Cycle_t1; } /* указываем следующий цикл */
}
}

void Control_Cycle_tr1() /* Цикл tr1 - Натечка */
{
Control_False_Plam_1_2(); /* контроль ложного пламени 1,2 */

if ( Hermetic == 1 ) /* Герметичность - утечка */
{ f_Alarm_Hermetic = 0; }
else
{ f_Alarm_Hermetic = 1; }


if (
f_Alarm_False_Plam_1 == 0 &&
f_Alarm_False_Plam_2 == 0 &&
f_Alarm_Hermetic == 0
)
{
Ventilate_Burner = ON; /* Вент. горелки */
Valve_Security = ON; /* Кл. безопасности */
Work_Dispetcher = ON; /* Работа диспетч. */
}
else
{
f_Alarm = 1;
Next_Cycle = Cycle_Alarm_Stop; /* запускаем Alarm_Stop */
}

if ( f_timer_cycle == OFF ) /* если время цикла истекло */
{ Next_Cycle = Cycle_tr2; } /* указываем следующий цикл */
}

void Control_Cycle_tr2() /* Цикл tr2 - Нет контроля */
{
Control_False_Plam_1_2(); /* контроль ложного пламени 1,2 */

if (
f_Alarm_False_Plam_1 == 0 &&
f_Alarm_False_Plam_2 == 0
)
{
Ventilate_Burner = ON; /* Вент. горелки */
Valve_Security = ON; /* Кл. безопасности */
Valve_Cut_Off_1 = ON; /* Кл. отсекателя 1 */
Work_Dispetcher = ON; /* Работа диспетч. */
}
else
{
f_Alarm = 1;
Next_Cycle = Cycle_Alarm_Stop; /* запускаем Alarm_Stop */
}

if ( f_timer_cycle == OFF ) /* если время цикла истекло */
{ Next_Cycle = Cycle_tr3; } /* указываем следующий цикл */
}

void Control_Cycle_tr3() /* Цикл tr3 - Утечка? Откр. */
{
Control_False_Plam_1_2(); /* контроль ложного пламени 1,2 */

if ( Hermetic == 0 ) /* Герметичность - утечка */
{ f_Alarm_Hermetic = 0; }
else
{ f_Alarm_Hermetic = 1; }


if (
f_Alarm_Plam_1 == 0 &&
f_Alarm_Plam_2 == 0 &&
f_Alarm_Hermetic == 0
)
{
Ventilate_Burner = ON; /* Вент. горелки */
Valve_Security = ON; /* Кл. безопасности */
Valve_Cut_Off_1 = ON; /* Кл. отсекателя 1 */
Work_Dispetcher = ON; /* Работа диспетч. */
}
else
{
f_Alarm = 1;
Next_Cycle = Cycle_Alarm_Stop; /* запускаем Alarm_Stop */
}

if ( f_timer_cycle == OFF ) /* если время цикла истекло */
{
Valve_Cut_Off_1 = OFF; /* Кл. отсекателя 1 */
Next_Cycle = Cycle_tr4; /* указываем следующий цикл */
}
}

void Control_Cycle_tr4() /* Цикл tr4 - Утечка? Закр. */
{
Control_False_Plam_1_2(); /* контроль ложного пламени 1,2 */

if ( Hermetic == 0 ) /* Герметичность - утечка */
{ f_Alarm_Hermetic = 0; }
else
{ f_Alarm_Hermetic = 1; }

if (
f_Alarm_Plam_1 == 0 &&
f_Alarm_Plam_2 == 0 &&
f_Alarm_Hermetic == 0
)
{
Ventilate_Burner = ON; /* Вент. горелки */
Valve_Security = ON; /* Кл. безопасности */
Valve_Cut_Off_1 = OFF; /* Кл. отсекателя 1 */
Work_Dispetcher = ON; /* Работа диспетч. */
}
else
{
f_Alarm = 1;
Next_Cycle = Cycle_Alarm_Stop; } /* запускаем Alarm_Stop */

if ( f_timer_cycle == OFF ) /* если время цикла истекло */
{
Valve_Security = OFF; /* Кл. безопасности */
Next_Cycle = Cycle_t1; /* указываем следующий цикл */

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


Icon 1 отправлено / posted      Профиль для / Profile for sinegub_mihail           Редактировать/удалить сообщение / Edit/Delete Post 
наименование циклов указывается в заголовочном файле но не в этой программе...
Сообщения / Posts 105 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
sinegub_mihail,
вышлите, пожалуйста, Ваше описание задачи и преполагаемое Вами решение на адрес техподдержки.
Как бы общо не выглядел вопрос с организацией обработки данных, его решение в каждом конкретном случае может быть разным.

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


Icon 1 отправлено / posted      Профиль для / Profile for sinegub_mihail           Редактировать/удалить сообщение / Edit/Delete Post 
как в программе на языке ST с оператором if-then-else добавить несколько проверок переменных на равенство в одной строке при одном условии присвоении переменной значения, пример:

PROGRAM
VAR_INPUT Газ_низко : REAL; END_VAR
VAR_INPUT Газ_высоко : REAL; END_VAR
VAR_INPUT Вода_больше : REAL; END_VAR
VAR_INPUT Вода_меньше : REAL; END_VAR
VAR_INPUT Взрыв : REAL; END_VAR
VAR_INPUT Вентилятор_вкл : REAL; END_VAR
VAR_OUTPUT Клапан_1 : REAL; END_VAR
VAR_OUTPUT Клапан_2 : REAL; END_VAR
VAR_OUTPUT Клапан_3 : REAL; END_VAR
VAR_OUTPUT Клапан_4 : REAL; END_VAR

if Газ_низко == 0
then Клапан_1 =0;
elsif Газ_высоко == 0
then Клапан_1 =0;
elsif Вода_больше == 0
then Клапан_1 =0;
else Клапан_1 =1;
end_if;

END_PROGRAM

Нужно на равенство (в одну строку )добавить все входные ( Вода_меньше, Взрыв, Вентилятор_вкл) при условии что выходе присвоение значения переменной будет только Клапан_1

Сообщения / Posts 105 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534


Icon 1 отправлено / posted      Профиль для / Profile for Abram Shnider           Редактировать/удалить сообщение / Edit/Delete Post 
Если я правильно Вас понимаю, то подойдет следующая конструкция:

IF ((Газ_низко == 0) || (Газ_высоко == 0) || (Вода_больше == 0))
THEN
Клапан_1 = 0;
ELSE
Клапан_1 = 1;
END_IF;

Исходя из своего опыта могу добавить, что надо быть внимательным с типами данных переменных (см. тему http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/33/t/000100.html)
Удачи!

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


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
IF ((Газ_низко == 0) || (Газ_высоко == 0) || (Вода_больше == 0))
THEN
Клапан_1 = 0;
ELSE
Клапан_1 = 1;
END_IF;

Сообщения / Posts 17100 | Из / 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