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

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » Пользователи для пользователей » Пользователи для пользователей » Светодиодная панель 3х3 на языке Techno ST

   
Автор / Author Тема / Topic: Светодиодная панель 3х3 на языке Techno ST
Krivosheev
Junior Member / Новичок
Участник № / Member № 6685


Icon 11 отправлено / posted      Профиль для / Profile for Krivosheev           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте. Помогите, пожалуйста в решении вопроса. Поставлена задача реализовать работу светодиодной панели 3х3. При подачи питания на панель (в моём случае с помощью выключателя) панель должна не просто включиться, а иметь индикацию, а именно индикаторы должны включаться попарно, то есть верхние три диода должны включиться, отключиться и включится средний ряд из трёх диодов, затем средний ряд отключается и включается последний ряд из трёх диодов. В кач-ве диодов выбраны выключатели с двумя состояниями, привязаны по каналам HEX_16. В программе также каждый элемент к своему каналу. Выключатель - кнопка, по нажатию которой подаётся сигнал TRUE и запускается программа. Вот, собственно сама программа:
PROGRAM
VAR_INOUT i_1_C : BOOL; END_VAR
VAR_INOUT i_2_C : BOOL; END_VAR
VAR_INOUT i_3_C : BOOL; END_VAR
VAR_INOUT i_4_C : BOOL; END_VAR
VAR_INOUT i_5_C : BOOL; END_VAR
VAR_INOUT i_6_C : BOOL; END_VAR
VAR_INOUT i_7_C : BOOL; END_VAR
VAR_INOUT i_8_C : BOOL; END_VAR
VAR_INOUT i_9_C : BOOL; END_VAR
VAR_INPUT i : INT := 0; END_VAR
VAR_INPUT switch_C : BOOL; END_VAR

IF (!switch_C)
THEN goto c1;
C1:
REPEAT
i_1_C = TRUE;
i_2_C = TRUE;
i_3_C = TRUE;
i = i + 2;
UNTIL i < 20 END_REPEAT;
REPEAT
i_1_C = FALSE;
i_2_C = FALSE;
i_3_C = FALSE;
i_4_C = TRUE;
i_5_C = TRUE;
i_6_C = TRUE;
i = i + 2;
UNTIL i < 40 END_REPEAT;
REPEAT
i_4_C = FALSE;
i_5_C = FALSE;
i_6_C = FALSE;
i_7_C = TRUE;
i_8_C = TRUE;
i_9_C = TRUE;
i = i + 2;
UNTIL i < 60 END_REPEAT;
else goto c2;
C2:
END_IF;

END_PROGRAM.
!НО!
При запуске профайлера программа просто не работает, хотя сам профайлер запускается.
Может кто-нибудь подсказать, в чём может быть причина? Необходимо написать программу именно на Techno ST. Компилируется без ошибок, но реакции нет.
Прошу прощения за длинный вопрос. Очень надеюсь на Вашу помощь, не могу реализовать такую простую схему уже порядка двух недель, а срок уже поджимает [cry / плачь] . В примерах подобной задачи не нашел.
С Уважением, Николай.

Сообщения / Posts 11 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вы неверно понимаете функционирование программы.
Вне зависимости от используемого языка при каждом вызове программы (с циклом обработки канала, вызывающего программу) при условии !switch_C будут исполнены все 3 оператора REPEAT.
Поэтому все выходные переменные всегда будут иметь постоянные значения:
i_1_C = FALSE;
i_2_C = FALSE;
i_3_C = FALSE;
i_4_C = FALSE;
i_5_C = FALSE;
i_6_C = FALSE;
i_7_C = TRUE;
i_8_C = TRUE;
i_9_C = TRUE;

Программу надо переделывать.

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

Топик перенесен в раздел "Пользователи для пользователей"

Сообщения / Posts 15120 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Krivosheev
Junior Member / Новичок
Участник № / Member № 6685


Icon 1 отправлено / posted      Профиль для / Profile for Krivosheev           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Ага, понял. Спасибо, будем думать!
Сообщения / Posts 11 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Krivosheev
Junior Member / Новичок
Участник № / Member № 6685


Icon 1 отправлено / posted      Профиль для / Profile for Krivosheev           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Прошу прощения, не сможете подсказать - возможна ли реализация данной задачи? Или гиблое дело? Стоит ли мне продолжить попытки реализации или пробовать другое ПО ?
Сообщения / Posts 11 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Конечно, можно.
Речь идет только о правильном тексте программы.

Сообщения / Posts 15120 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Krivosheev
Junior Member / Новичок
Участник № / Member № 6685


Icon 1 отправлено / posted      Профиль для / Profile for Krivosheev           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
И, тем не менее, реализация даже столь простого на первый взгляд вопроса под сомнением.. Изменил программу, используя оператор repeat или оператор while, но проект некорректно работает, как и в первый раз. Выполняется только конечная строка, а именно работает нижний ряд диодов. Может кто-нибудь подкинуть идею, как реализовать поставленную задачу? Мои идеи кончились.
Сообщения / Posts 11 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Alex210271
Active Forum Member / Активный участник форума
Участник № / Member № 4421


Icon 1 отправлено / posted      Профиль для / Profile for Alex210271           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вот Вам принцип построения подобной программы:

PROGRAM
VAR_OUTPUT ARG_000 : REAL; END_VAR
VAR_OUTPUT ARG_001 : REAL; END_VAR
VAR_OUTPUT ARG_002 : REAL; END_VAR
VAR_OUTPUT I : REAL; END_VAR

IF I>= 0 AND I <= 20 THEN
ARG_000 = 1;
ARG_001 = 0;
ARG_002 = 0;
end_if;
IF I> 20 AND I <= 40 THEN
ARG_000 = 0;
ARG_001 = 1;
ARG_002 = 0;
end_if;
IF I> 40 AND I <= 60 THEN
ARG_000 = 0;
ARG_001 = 0;
ARG_002 = 1;
end_if;
If I < 60 Then
I= I + 1;
else
I = 0;
End_if;


END_PROGRAM

Вам нужно понять принцип работы Trace Mode. Каналы [и программы, в том числе] и так выполняются циклически с заданным периодом и единицами цикла [см. каналы типа CALL.PROGRAM] поэтому никаких циклов в программе не надо нужны только условия и действия. И конечно правильно подобрать период вызова программы. В моем примере параметр I растет от 0 до 60 при каждом вызове программы и в зависимости от его значения первые двадцать циклов ARG_000 равен 1, затем двадцать циклов ARG_001 равен 1 и тд.

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


Icon 1 отправлено / posted      Профиль для / Profile for Alex210271           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Циклы нужны только если у вас за один вызов программы должно выполниться множество действий. Так у Вас и работает. Мгновенно пробегает ВСЕ циклы и выдает на выходе только последние значения. То есть горит третий ряд светодиодов.
Сообщения / Posts 79 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
PROGRAM
VAR_OUTPUT ARG_000 : REAL; END_VAR
VAR_OUTPUT ARG_001 : REAL; END_VAR
VAR_OUTPUT ARG_002 : REAL; END_VAR
VAR_INOUT I : INT; END_VAR

IF I == 0 THEN
ARG_000 = 1;
ARG_001 = 0;
ARG_002 = 0;
end_if;
IF I == 1 THEN
ARG_000 = 0;
ARG_001 = 1;
ARG_002 = 0;
end_if;
IF I == 2 THEN
ARG_000 = 0;
ARG_001 = 0;
ARG_002 = 1;
end_if;
I= I + 1;
IF I == 3 THEN
I=0
End_if;

END_PROGRAM

и не забыть поставить нужный период пересчета программы

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


Icon 1 отправлено / posted      Профиль для / Profile for Alex210271           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Уважаемый Nico совершенно прав. Так должна выглядеть эта программа в действительности. Можно также попробовать вместо операторов If использовать оператор CASE. Я просто не хотел давать готовый ответ, а дать идею для развития. Кроме того, мой вариант может позволить сделать каждый из трех периодов свечения разной длительности.
Сообщения / Posts 79 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Krivosheev
Junior Member / Новичок
Участник № / Member № 6685


Icon 1 отправлено / posted      Профиль для / Profile for Krivosheev           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Спасибо Вам большое, Nico и Alex210271 за подробное объяснение принципа работы программы. Не думаю, что без Вашей помощи я пришел бы к правильному выводу. Ещё раз спасибо!
Сообщения / Posts 11 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Krivosheev
Junior Member / Новичок
Участник № / Member № 6685


Icon 1 отправлено / posted      Профиль для / Profile for Krivosheev           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Странно, но из просмотра переменных при запуске программы в обоих случаях только первый диод принимает значение 1. Остальные же не реагируют. Проблема может быть в периоде пересчета? Или же в самом канале?
Сообщения / Posts 11 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Alex210271
Active Forum Member / Активный участник форума
Участник № / Member № 4421


Icon 1 отправлено / posted      Профиль для / Profile for Alex210271           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Программа работает именно так как указывалось. Какое-то время первый аргумент равен единице, затем второй, потом третий. Для того чтобы понять есть ли проблема в периоде пересчета, неплохо бы узнать каким у Вас задан этот период для канала вызова программы. И я надеюсь что этот канал имеет тип input и правильные привязки к каналам управления светодиодами. И какой вариант программы мой или Nico вы взяли за основу своей версии.
Сообщения / Posts 79 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Krivosheev
Junior Member / Новичок
Участник № / Member № 6685


Icon 1 отправлено / posted      Профиль для / Profile for Krivosheev           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
За основу был взят Ваш вариант программы, потому как имеется возможность задать различное время работы диода. Безусловно, канал имеет тип input и привязан правильно. Пробовал период пересчета 1 и 5 сек, а также 10 или 20 циклов calc.
Сообщения / Posts 11 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Krivosheev
Junior Member / Новичок
Участник № / Member № 6685


Icon 1 отправлено / posted      Профиль для / Profile for Krivosheev           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Прошу прощения, в программе разобрался! Достаточно ли на ГЭ создать кнопку с привязкой по каналу типа OUTPUT с созданной программой и атрибутом "Выполнить" ? Или же следует сделать канал типа INPUT и подавать значение "1" для запуска программы?
Сообщения / Posts 11 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Alex210271
Active Forum Member / Активный участник форума
Участник № / Member № 4421


Icon 1 отправлено / posted      Профиль для / Profile for Alex210271           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Программа вызываемая каналом Call типа Input работает непрерывно со своим периодом пересчета. Нужно либо в программе добавить условие которое будет выполнять или пропускать основное тело, ту часть программы которую Вы уже отладили, или включать и выключать программу в нужный момент. Можно канал изначально выключить (атрибут 3, с) потом по кнопке включить, изменив третий атрибут на ноль, и выключить командой изнутри программы при помощи функции setAttributeI(UDINT ch_id, UINT attr_id, DINT value) где первый параметр ID канала вызывающего программу (нужно Call вызова программы привязать как её же аргумент с атрибутом 118, ID) второй параметр номер атрибута - как раз 3, и третий параметр - 1 значение третьего атрибута которое будет установлено. Эту команду нужно вставить где-то в конце и при проверке условия что счетчик I достиг заданного значения.
Сообщения / Posts 79 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Krivosheev
Junior Member / Новичок
Участник № / Member № 6685


Icon 1 отправлено / posted      Профиль для / Profile for Krivosheev           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
На ГЭ в кач-ве диодов три выключателя и кнопка запуска программы. Выключателя привязаны к соответствующим каналам диодов, но реакции нет, хотя в просмотре компонентов программа выполняется. Выключатели не подходят? Динамизация включена по ARG & CONST.
Сообщения / Posts 11 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Alex210271
Active Forum Member / Активный участник форума
Участник № / Member № 4421


Icon 1 отправлено / posted      Профиль для / Profile for Alex210271           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
ГЭ выключатель в виде зеленых или красных ламп вполне подходят для отображения включения и выключения ваших диодов. Другой вопрос - очень трудно дать рекомендации не видя какие у вас сделаны привязки и как вы задали настройки ГЭ. если привязки правильные и каналы принимают значение только 0 и 1 то для работы этих ГЭ нужно задать константу 1 и XOR 1.
Сообщения / Posts 79 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Krivosheev
Junior Member / Новичок
Участник № / Member № 6685


Icon 1 отправлено / posted      Профиль для / Profile for Krivosheev           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Всё отлично работает, правда немного медленно) Спасибо огромное!
Сообщения / Posts 11 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Krivosheev
Junior Member / Новичок
Участник № / Member № 6685


Icon 1 отправлено / posted      Профиль для / Profile for Krivosheev           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Прошу прощения, появился ещё один вопрос. Можно ли с запущенного профайлера по кнопке с ГЭ заходить в редактор программы? Например в редактор созданной программы на языке Techno ST?
Сообщения / Posts 11 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
нет
Сообщения / Posts 554 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close 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

Rambler's Top100 Rambler's Top100



Powered by Infopop Corporation
UBB.classic™ 6.7.2