С длиной зуммера я справился. Если кому будет интересно, или понадобиться, выкладываю код функции:
Код:void LongBeep()
{
int i;
WORD j;
Read (HMI_LOCAL_MCH,0,TYPE_PFW,300,0,TYPE_WORD,&j);
for( i = 0; i <= j; i ++ )
{
Beep();
}
}
Вид для печати
С длиной зуммера я справился. Если кому будет интересно, или понадобиться, выкладываю код функции:
Код:void LongBeep()
{
int i;
WORD j;
Read (HMI_LOCAL_MCH,0,TYPE_PFW,300,0,TYPE_WORD,&j);
for( i = 0; i <= j; i ++ )
{
Beep();
}
}
Передалал свой вчерашний пример с PSB на биты PSW.Цитата:
Вообще думал одно окно, которое будет открываться по фронту любого бита.
Но вот это:
вам надо будет реализовать самостоятельно в соответствии с нужным вам алгоритмом.Цитата:
На этом окне вывод информации из регистра. А вот в этот регистр писать информацию о состоянии сработавших битов.
Это верно.Цитата:
Я конечно понимаю, что хочу много от СП, когда тут уже лучше СПК брать, тогда сразу все решилось бы быстро и просто.
Здравствуйте, почему не работает эмуляция при запуске проекта на СП310-Р. Скрины прилагаю. Вес проекта 32МБ. Вложение 37643
Спасибо разобрались в табл использовали PCW регистры.
Еще проблема с прошивкой через кабель USB, проверяли на двух кабелях, через флэшку прошил без проблем Вложение 37646
Выложите все же ваш проект, пожалуйста - попробуем загрузить у себя.
Подскажите, как в исторической таблице сделать, чтобы время появления отображалась как DD MM YYYY, вместо YY MM DD
В исторической таблице так сделать, к сожалению, нельзя.
Но можно сделать свою таблицу с любым форматом времени:
https://youtu.be/BU1ugXRrzg4
Добрый день.
Подскажите что в макросе не так. Нужно считать с ПР200 значение регитра.
WORD Value=0;
Read(PLC, 1, MODBUS_RTU_REG_4X, 538, 0, TYPE_WORD, &Value);
PSW[300]=Value;
Добрый день.
А без макроса считать значение удается? Например, обычным цифровым дисплеем.
Возможно, вы просто не вызываете макрос?
а как его вызвать?
Без макроса работает
Мне нужно это значение перепулить на другое Slave устройство
С помощью элемента Функциональная область.
Условие запуска - циклический, функция - вызов макроса.
Вложение 37671
без макроса работает.
Это можно сделать и без макроса - опять-таки с помощью функциональной области, действие - Копировать регистр (или Копировать группу регистров).Цитата:
Мне нужно это значение перепулить на другое Slave устройство
Это рассмотрено в видеопримере: https://www.youtube.com/watch?v=c_PfSdLZWlY&t=1s
Спасибо. Все получилось
Здравствуйте, вопрос следующий возможно ли с помощью кнопки с использованием пароля возводить необходимый бит? Получается что только элемент перехода на экран по паролю спрашивает пароль и выполняет соответствующий переход. А функциональная кнопка пароль не спрашивает, а устанавливается только соответствующий ей уровень доступа. Как же сделать кнопку с паролем на какое либо действие
Для каждого действия функциональной кнопки можно настроить уровень доступа (или указать бит ограничения):
Вложение 37676
В этом случае действие не будет выполняться, пока пользователь не подтвердит свой уровень доступа.
Уважаемые специалисты помогите советом. Стоит задача вычислять энтальпию воды нагреваемую котлом, в дальнейшем для подсчета тепловой энергии. Вычисление значений энтальпии воды осуществляется на основе таблиц ГСССД 187-99, значения которых оформлены массивом данных зависимости температуры воды от энтальпии воды. В среде Codesys 2.3 с применением ПЛК все получается, получаю корректные значения. Возможно ли текст данной программы перевести в макрос для панели оператора СП300?
Текст программы на Codesys:
FUNCTION ENTHALPY : REAL
VAR_INPUT
T : REAL;
END_VAR
VAR
Pts : INT := 11;
data : ARRAY[1..20, 0..1] OF REAL := 0.0,0.06, 10.0,42.1, 20.0,83.9, 30.0,125.8, 40.0,167.58, 50.0,209.4, 60.0,251.2, 70.0,293.1, 80.0,335.0, 90.0, 377.0, 100.0,419.1;
END_VAR
ENTHALPY := LINEAR_INT(T, Data, Pts);
Заранее спасибо.
Спасибо что помогли разобраться. Теперь стало понятнее. Просто впервые сталкиваюсь с макросами на СИ. Кроме энтальпии аналогично вычисляю значения плотности воды от температуры воды. В среде Codesys 2.3 с применением ПЛК аналогично все получается, получаю корректные значения. Возможно ли текст данной программы перевести в макрос для панели оператора СП300? Не могли бы подсказать ка перевести на СИ?
FUNCTION DENSITY : REAL
VAR_INPUT
T : REAL;
Sat : BOOL;
END_VAR
VAR CONSTANT
a0 : REAL := 999.83952;
a1 : REAL := 16.952577;
a2 : REAL := -7.9905127E-3;
a3 : REAL := -4.6241757E-5;
a4 : REAL := 1.0584601E-7;
a5 : REAL := -2.8103006E-10;
b : REAL := 0.0168872;
END_VAR
VAR
T2: REAL;
T4: REAL;
END_VAR T2 := T * T;
T4 := T2 * T2;
DENSITY := (a0 + a1*T + a2*T2 + a3*T2*T + a4*T4 + a5*T4*T) / (1.0 + b*T);
IF sat THEN DENSITY := DENSITY - 0.004612 + 0.000106 * T; END_IF;
Заранее спасибо.
Прикладываю пример с Density.
Если вы сравните ST-код с кодом макроса, то увидите, что отличия в синтаксисе незначительны.
Основная информация по работе с макросами приведена в справке, если нужно что-то более углубленное - подойдет любой учебник по С.
Добрый день.
1. Есть ли в СП310 аналог фреймов из кодесис?
2. Допускается ли работа СП (режим мастера) с несколькими слейвами?
Здравствуйте! Использую историческую таблицу, создал кнопку квитировать (действие для таблицы подтвердить). Каким образом сделать, чтобы при нажатии на эту кнопку устанавливался одновременно какой либо бит?
Добрый день. Кнопка управления графиками/таблицами подобный функционал не поддерживает.
Опишите, пожалуйста, какую задачу вы пытаетесь решить таким образом? Возможно, мы сможем предложить вам иной способ.
Например произошла авария, одновременно включается звуковая сигнализация. Вот и надо ее выключить с квитированием.
Прикладываю пример на озвученную тему.
Комментарии:
1. Если принять регистр хранилища за X, то регистр X+10 определяет, сквитирована ли тревога в строке 0 (1 - сквитирована, 0 - нет).
Регистр X+10+12 определяет, сквитирована ли тревога в строке 1. Регистр X+10+2*12 - для строки 3, и так далее по формуле X+10+12*i.
2. Заполнение таблицы начинается со строки 1 (а не 0). Т.е. регистр X+10 первый раз станет активным после квитирования тревоги, появившейся после "переполнения" таблицы (когда старые данные начнут стираться и заменяться новыми - кольцевым буфером). Это проще понять, запустив пример (например, в эмуляции).
3. Таким образом, контролируя нулевые биты упомянутых регистров - можно реализовать выполнение нужных действий при квитировании.
4. В рамках примера этот контроль осуществлен с помощью функциональных областей (при необходимости сделайте их глобальными). Если в таблице много строк - то проще будет сделать обработку в макросе.
Спасибо большое за помощь, Евгений Кислов, стало понятнее. Буду разбираться дальше с макросами для панелей СП300
Добрый день, использую в проекте историческую таблицу для архивирования аварий. Но в ней есть недостаток, не понятно действует авария на текущий момент или нет. Понятно что можно создать еще таблицу реального времени или таблицу тревог, но там опять придется прописывать все аварии. Может можно сделать, чтобы наименование аварий прописывать один раз.
На каждое аварийное событие сделайте два сообщение одно, как сейчас - от ВКЛ бита, а второе - от ВЫКЛ этого же бита.
Вложение 37848
Вложение 37849
Спасибо, petera. Вариант интересный, но он мне не подойдет.
Я так понял в исторической таблице шрифт сообщений поменять нельзя?