PDA

Просмотр полной версии : ПЛК 73. Отключение дефолтовых функций кнопок



Alex12345
09.05.2012, 23:51
Здравствуйте, уважаемые форумчане !

В нете искал, руководство по пользователя читал, по программированию тоже... и так нигде не нашел, как отключить функции кнопок, которые прописаны по умолчанию :confused: :
Например если подержать кнопку "ввод" на экране появиться окно "конфигурация плк". Еще хуже то, что стрелки вверх вниз листают рабочие экраны в тех случаях, когда это совсем ненужно! При нажатии этой кнопки изменяется n в SetWorkScreen(n). На первое время избавился так:

IF ((kb = 8) OR (kb=4)) AND (flag3= FALSE) AND (flag4=FALSE)
THEN
s1:= GetWorkScreen () ;
SetWorkScreen(s1);
END_IF

все бы ничего, но при нажатии этих кнопок экран начинает обновляться.:( очень некрасиво выходит, особенно в режиме уставки !:mad:
Помогите, пожалуйста их отключить . Очень надеюсь на вашу помощь. Заранее огромное спасибо )))

Валенок
10.05.2012, 00:50
А вы сделайте 1 (один экран). Я так делаю когда нужно много (> 6..8 ) экранов. Алгоритм по сути тот же, и проще динамически менять набор экранов по состоянию
S
Поначалу делал ввод с экранов. Надоело. Ввод - в конфигурации, на экранах - только инфа. Если нужно чем-то управлять - пуск/стоп в нужном экране делает реверс пуска

Alex12345
10.05.2012, 01:36
программа вышла на 360 строчек.. не хотелось бы мне переходить на один экран. (используется 5 или 6 экранов)

Ввод - в конфигурации, на экранах - только инфа.
я в курсе, но хотелось бы сделать так, что бы эта инфа не появлялась и не смущала заказчика...

Валенок
10.05.2012, 02:27
(используется 5 или 6 экранов)


хотелось бы сделать так, что бы эта инфа не появлялась
Вы уж определитесь батенька

Alex12345
10.05.2012, 02:37
Вы уж определитесь батенька
я имею ввиду, что нужно что бы конфигурация не показывалась на экране...
неужели для этого нужно в программе использовать один рабочий экран ?

kolyan
10.05.2012, 08:19
Здравствуйте, уважаемые форумчане !

В нете искал, руководство по пользователя читал, по программированию тоже... и так нигде не нашел, как отключить функции кнопок, которые прописаны по умолчанию :confused: :
Например если подержать кнопку "ввод" на экране появиться окно "конфигурация плк". Еще хуже то, что стрелки вверх вниз листают рабочие экраны в тех случаях, когда это совсем ненужно! При нажатии этой кнопки изменяется n в SetWorkScreen(n). На первое время избавился так:

IF ((kb = 8) OR (kb=4)) AND (flag3= FALSE) AND (flag4=FALSE)
THEN
s1:= GetWorkScreen () ;
SetWorkScreen(s1);
END_IF

все бы ничего, но при нажатии этих кнопок экран начинает обновляться.:( очень некрасиво выходит, особенно в режиме уставки !:mad:
Помогите, пожалуйста их отключить . Очень надеюсь на вашу помощь. Заранее огромное спасибо )))

Присоединяюсь к вопросу.
Очень не хотелось бы, чтобы персонал мог свободно выходить в меню.
Вопрос модераторам:
каким образом можно отключить функцию входа в меню (поставить пароль и.т.п.)?

Валенок
10.05.2012, 08:50
А что плохого - пусть смотрят. Секретные параметры ?

kolyan
10.05.2012, 09:54
Если персонал начнёт влезать в конфигурацию ПЛК - бед потом не оберёшься.

Валенок
10.05.2012, 13:16
ну влезут, ну поcмотрят - и чего ?

Pointer
10.05.2012, 14:04
Валенок, а вы и есть походу разработчик? Не имея ответа...зачем поститься? Тоже присоединяюсь к вопросу...

Валенок
10.05.2012, 14:20
Разработчик чего ? Я - пользователь


я имею ввиду, что нужно что бы конфигурация не показывалась на экране...

Галки там есть - чтоб не видно было. В РЭ есть.

Александр123456
10.05.2012, 14:54
Разработчик чего ? Я - пользователь


Галки там есть - чтоб не видно было. В РЭ есть.

Галки то там есть, да вот есть там следующий глюк,
что если эти галки видимости убрать, то меню конфигурации становятся недоступными, НО...
НО если контроллер перезагрузить ПЕРЕДЕРНУВ питание, и войти в это меню, то подменю, которые были отключены, становятся вдруг видимыми и доступными для конфигурирования, НО...
НО не долго, если выйти из этого меню в рабочее, то скрытые галочками меню больше не доступны до СЛЕДУЮЩЕГО СБРОСА ПИТАНИЯ.
вобшем как то так.

kolyan
10.05.2012, 16:21
ну влезут, ну поcмотрят - и чего ?

Я всегда удивлялся, когда люди, вместо того, чтобы на вопрос поставленный ответить, начинают задавать свои.
Если знаете - скажите...

kolyan
10.05.2012, 16:34
Снял все галочки "Показывать в меню".
Всё равно всё отображается.

Валенок
10.05.2012, 16:50
если перезагрузить ПЕРЕДЕРНУВ питание, .. становятся вдруг видимыми и доступными для конфигурирования, если выйти из этого меню в рабочее, то скрытые галочками меню больше не доступны до СЛЕДУЮЩЕГО СБРОСА ПИТАНИЯ.
Ну Вы не первый кто это заметил. Лично я этот глюк нашел удобным - пришел, дернул, посмотрел, вышел. Редактирование-то можно запретить, а вот состояние Di посмотреть при отладке - милое дело.
А что тетечки - да пусть смотрят скока хочут если додумаются передернуть питание

Валенок
10.05.2012, 16:55
Я всегда удивлялся, когда люди, вместо того, чтобы на вопрос поставленный ответить, начинают задавать свои
Иногда, сударь, такие вопросы задают - что без встречных не поймешь.
А Вы при просмотре "секретной" информации - перезагрузитесь автоматически
Кстати лишние подменюшки - закрываются.

Pointer
10.05.2012, 17:44
Разработчик чего ? Я - пользователь

И вас, как пользователя, не интересует ответ разработчика на данный вопрос?;) :D

Валенок
10.05.2012, 20:42
Эти вопросы я задавал еще пару лет назад. Ответа нет. Дальше см. пост #15

Alex12345
11.05.2012, 13:30
Дальше см. пост #15
Очень неплохо было бы закрепить линком. Я не нашел (((

Pointer
11.05.2012, 14:33
Эти вопросы я задавал еще пару лет назад. Ответа нет.
Дык может ответ за два года появился....а вы забегаете перед паровозом)))))))))))

Александр Приходько
11.05.2012, 15:09
Товарищи, предлагаю закончить холивар.
На самом деле если внимательно прочитать документацию, то все встанет на свои места.

Что нам надо - это просто напросто запретить стандартный функционал кнопок.
Как сделать - это позволяем делать монопольный режим.

Что такое монопольный режим?
Это когда у вас есть возможность делать с экраном и кнопками что вам захочется. В данном режиме у кнопок нет "стандартного" функционала, вы его придумываете сами.

Как использовать?
Для этого нужно использовать библиотеку IND_MODE. Можно ПЛК всегда использовать в монопольном режиме, можно предусмотреть программное переключение.


Я подготовил небольшой пример. Кнопки F1 и F2 переводят режим рпботы дисплея из рабочего в монопольный и обратно.

В обоих случаях на экран выводится текст и инкремент по кнопке ВВОД. Но если в рабочем режиме кнопку ВВОД удержать более 2-х секунд, то вы попадете в конфигурацию. В монопольном режиме, всего лишь работает инкремент.

Смотрите пример, там все с комментариями.

kolyan
11.05.2012, 22:02
Спасибо за ответ!

Serega_80
06.07.2016, 22:56
Здравствуйте! Подскажите, пожалуйста, как в монопольном режиме вывести значение переменной на экран? В обычном режиме пишу: ShowReal(0,0,0,'%2.0f', var);
А в монопольном режиме такое не прокатывает. Подскажите, как надо. Заранее благодарен!

lara197a
06.07.2016, 23:19
в инструкции к бибкам все написано
25315

kolyan
07.07.2016, 06:32
в инструкции к бибкам все написано
25315

А можно поподробнее?
В приведенном Вами примере на экран выводится текстовое сообщение, но никак не значение переменной.
Вопрос, как мне кажется состоит в том, а можно ли в монопольном режиме выводить на экран именно значения переменных (INT, REAL и.т.п.).

Serega_80
07.07.2016, 07:48
Интересуют именно переменные. Сообщения выводить понятно как.

ASo
07.07.2016, 07:59
Естественно, перевести в строку и вывести.

lara197a
07.07.2016, 09:01
как верно писал асо. переводим реал в стринг.
На самом деле это намного удобнее.
К примеру создаем ФБ, где формируем сообщения по ситуации.
этот режим носит только информационный характер.

Serega_80
07.07.2016, 09:20
Благодарю! Буду пробовать.

kolyan
07.07.2016, 10:12
как верно писал асо. переводим реал в стринг.
На самом деле это намного удобнее.
К примеру создаем ФБ, где формируем сообщения по ситуации.
этот режим носит только информационный характер.

Небольшой вопрос.
С аналогового входа бывает, приходят числа, у которых слишком большая точность (кол-во знаков после запятой).
Где - то это обсуждалось, уже забыл - как ограничить точность представления числа?

lara197a
07.07.2016, 10:49
умножайте на 10 и переводите из реал в инт.
получите значение в размере 2 байта.
при отображении укажите 1 точка после запятой.

melky
07.07.2016, 11:23
kolyan еще можно использовать ROUND для реалов.

kolyan
07.07.2016, 13:20
kolyan еще можно использовать ROUND для реалов.

Это функция?
Если да, то из какой библиотеки?
Не из Оската?

melky
07.07.2016, 15:01
Да, это функция в oscat basic
Собственно вот импортируйте

kolyan
08.07.2016, 10:30
Да, это функция в oscat basic
Собственно вот импортируйте

Спасибо.
Но там опять какие-то подфункции скрытые используются.
Компилятор ругается на X := setup.DECADES[LIMIT(0,N,8)];
Буду смотреть.

melky
08.07.2016, 11:21
А, сорри, там что-то в проекте надо добавить, дома смогу посмотреть где и что...

Скачайте архив заново. Только аккуратнее с импортом Global переменных, он перезатрет что у вас уже там есть. Лучше в голый проект импортните, там одна строчка всего добавляется и добавьте руками.

petera
08.07.2016, 12:21
Спасибо.
Но там опять какие-то подфункции скрытые используются.
Компилятор ругается на X := setup.DECADES[LIMIT(0,N,8)];
Буду смотреть.

Возьмите лучше у Oscat функцию REAL_TO_STRF
Потому, что стандартная функция REAL_TO_STRING работает только в эмуляции. При загрузке в контроллер она не работает, возникают крякозябры даже без вывода на ЖКИ http://www.owen.ru/forum/showthread.php?t=11396&p=69319&viewfull=1#post69319
А так получите сразу и String и нужное кол. цифр после запятой, работает округление для отброшенных знаков.

FUNCTION REAL_TO_STRF : STRING(20)
VAR_INPUT
IN : REAL;
N : INT;
END_VAR
VAR
O: REAL;
i: INT;
END_VAR

(* LIMIT N to 0 .. 7 *)
N := LIMIT(0,N,7);
(* round the input to N digits and convert to string *)
O := ABS(in) * EXP(N* 2.30258509299405);
REAL_TO_STRF := DINT_TO_STRING(REAL_TO_DINT(O));
(* add zeroes in front to make sure sting is at least 8 digits long *)
FOR i := LEN(REAL_TO_STRF) TO N DO REAL_TO_STRF := CONCAT('0', REAL_TO_STRF); END_FOR;
(* add a dot if n > 0 *)
IF n > 0 THEN REAL_TO_STRF := INSERT(REAL_TO_STRF, '.', LEN(REAL_TO_STRF) - N); END_IF;
(* add a minus sign if in is negative *)
IF in < 0 THEN REAL_TO_STRF := CONCAT('-', REAL_TO_STRF); END_IF;

kolyan
11.07.2016, 11:54
Возьмите лучше у Oscat функцию REAL_TO_STRF
Потому, что стандартная функция REAL_TO_STRING работает только в эмуляции. При загрузке в контроллер она не работает, возникают крякозябры даже без вывода на ЖКИ http://www.owen.ru/forum/showthread.php?t=11396&p=69319&viewfull=1#post69319
А так получите сразу и String и нужное кол. цифр после запятой, работает округление для отброшенных знаков.

FUNCTION REAL_TO_STRF : STRING(20)
VAR_INPUT
IN : REAL;
N : INT;
END_VAR
VAR
O: REAL;
i: INT;
END_VAR

(* LIMIT N to 0 .. 7 *)
N := LIMIT(0,N,7);
(* round the input to N digits and convert to string *)
O := ABS(in) * EXP(N* 2.30258509299405);
REAL_TO_STRF := DINT_TO_STRING(REAL_TO_DINT(O));
(* add zeroes in front to make sure sting is at least 8 digits long *)
FOR i := LEN(REAL_TO_STRF) TO N DO REAL_TO_STRF := CONCAT('0', REAL_TO_STRF); END_FOR;
(* add a dot if n > 0 *)
IF n > 0 THEN REAL_TO_STRF := INSERT(REAL_TO_STRF, '.', LEN(REAL_TO_STRF) - N); END_IF;
(* add a minus sign if in is negative *)
IF in < 0 THEN REAL_TO_STRF := CONCAT('-', REAL_TO_STRF); END_IF;

Спасибо за ответы!

lectorleo
23.06.2017, 07:42
Вернусь к первому вопросу, а можно как-то запретить функционал кнопок по умолчанию в Work_mode?