Добрый день!
Не могу pid регулятор добавить Вложение 80784
help pls
Вид для печати
Добрый день!
Не могу pid регулятор добавить Вложение 80784
help pls
А с библиотекой util будет в эмуляции работать?
Добрый день. Кто-нибудь знает как сделать высоту/длину прямоугольника в визуализации зависимой от переменной? Или степень заливки менять в соответствии со значением переменной? Сейчас только имею на руках масштабирование, но это не совсем мне подходит.
Большое спасибо. Получил как раз то, что хотел.
Здравствуйте коллеги! Скажите пожалуйста, как можно сравнить два проекта в кодесис 35?
Добрый день.
Проект - Сравнить
Вложение 80972
Привет.
Подскажите, зачем нужна библиотека 3sLicense ?
Я так понял, что она вставляется в другие библиотеки, которые будут платными?
Ну т.е она отвечает за лицензирование?
Добрый день.
Пытаюсь из кода программы поменять настройки СОМ-порта, который находится в режиме RTU Slave.
Делаю как здесь: https://ftp.owen.ru/CoDeSys3/11_Docu...odbus_v3.1.pdf (стр. 63)
Останавливаю компонент через Modbus_Serial_Device.xEnable, меняю настройки, запускаю.
После запуска появляется xInternalError и ErrorCode = 2.
Нигде не нашел расшифровку для Modbus_Serial_Device.ErrorCode.
При этом адрес (Slave ID) меняется на ура. Проблема возникает с изменением скорости/четности.
Есть идеи из-за чего так происходит?
Добрый день.
Из-за бага CODESYS - нельзя из кода поменять контроль четности на NONE.
Вчера как раз рассказывал об этом в видео:
https://www.youtube.com/watch?v=NZ7DJidW_EI
Добрый день. Подскажите как сделать, ни как не получается. Есть блок на СТ, переключатель выходов при каждом импульсе на вход. Хочу добавить блокировки.
Допустим первый выход заблокирован, значит нужно переключать только второй и третий выходы.
Соответственно, если в блокировке второй, то переключать только первый и третий. Если в блокировке третий, то переключать только первый и второй.
FUNCTION_BLOCK Circle
VAR_INPUT
IN: BOOL;
END_VAR
VAR_OUTPUT
OUT1, OUT2, OUT3, OUT4: BOOL; //выходы
END_VAR
VAR
axOut: ARRAY[0..3] OF BOOL;
RTrig: R_TRIG;
x, i: INT;
END_VAR
RTrig(CLK:=IN);
IF RTrig.Q THEN
x:=x+1;
IF x>=3 THEN x:=0; END_IF
FOR i:=0 TO 3 DO
axOut[i]:= FALSE;
END_FOR
axOut[x] := TRUE;
END_IF
OUT1:= axOut[1];
OUT2:= axOut[2];
OUT3:= axOut[0];
OUT4:= axOut[3];
В обработку триггера между иф и ендиф после х:=х+1 ставьте условие, например, исключаем номер 2:
Искл:= 2
Иф х=Искл зен х:=х+1 ендиф
PS исправьте еще х>=3 на х>3... Иначе 3 никогда не получите, а у вас он в выходах есть
Не проще ли переключать выходы, указанные в массиве?
И если выход в блоке, просто удалять его из массива.
Ну контролировать что у вас заблокировано и вносить в массив разрешенные. Количество разрешенных параметр счетчика, по импульсу перебирать массив, сбрасывая счетчик, когда массив заканчивается, чтобы возвращаться с первому элементу массива.
В одной из тем форума подобное рассматривали:
Вложение 81044
Вложение 81045
И, здесь подобный алгоритм рассматривали:
https://owen.ru/forum/showthread.php?t=36564
Не понятно куда он может пропасть, вы можете только отследить его отсутствие в течении например 10 секунд, по таймеру.
Тогда отключить выходы, можно задав main:=0; в конце ФБ, а так же сбросить последний элемент массива (маску) выходов, можно такКод:TOF1(IN:=In , PT:=T#10s);
IF NOT TOF1.Q THEN main:=0; boiler[4]:= FALSE; END_IF
Спасибо большое
Каким образом на языке ST в Кодесис можно с экономить на таймерах TON? Например, у меня идет запуск электродвигателей друг за дружкой через выдержку времени(по шагам). То есть, получается на шаге 1 таймер запустился, на 2 шаге должен остановиться и запуститься сразу для 3 шага. Я только придумал использовать 2 таймера минимум, чередуя их.
Зачем на пустяках экономить... ПЛК от этого не задымиться...
В CodeSys все таймеры софтовые, какой смысл в экономии, если хватает памяти? Да и в тех ПЛК, где таймеры завязаны на набор внутренних флагов их обычно дофига и надо постараться, чтобы они закончились.
Не помню уже кто из форумчан меня критиковал за таймеры, скидывал скриншот своего первого проекта на ST.
Но прогеров порой не поймешь, то зачем столько таймеров, то зачем на таймерах экономить, когда памяти вагон.
Адресовано не вам, повторюсь, не помню кто, но порой кажется что некоторые камнями кидаются лишь бы "зубы поточить").
Зачем лепить кучу таймеров, если нужен только один?
Вот здесь, уже давно выкладывал управление по времени на одном таймере, выход задаётся маской бит, можно включать, выключать и переключать нагрузку
Простой шаговый автомат, новый TON с паузой_____ https://owen.ru/forum/showthread.php...39&page=43#424
Прогр. управление 6 нагрузками 6 реж. 12 шагов _ФБ_фунции_____https://owen.ru/forum/showthread.php...39&page=11#105
А так это будет на Codesys 2.3, ниже примеры, тут для наглядности основная программа на CFC.
а вообще для простого варианта, достаточно этого - Простой шаговый автомат, новый TON с паузой, там прямо на ST
Зачем нужно много таймеров?
Ну на вскидку - уставка времени работы таймера больше цикла работы программы. Работа программы не предполагает шагов или Таймер никогда не сработает внутри шага а предназначен для проверки внутри шага.
Все ж от программы зависит. Если программа всегда выполняется по шагам и никак иначе, то таймер можно использовать один. А если шаги предназначены для неких проверок и тоже работают как цикл, но медленнее, то одного может и не хватить.
Почти закончил переписывать прогу и в конце вылез косяк. Кнопка стоп(без фиксации) привязана к триггеру, что должно было исключить данную проблему, но когда все запущено и я нажимаю кнопку стоп, то все шаги(30 и 40 шаг) где есть триггер, пролетают и прога оказывается на 20 шаге. Проблема в триггере, так как стоит его закоментить, то все отключается поочередно с выдержкой времени как и должно быть.
У вас стоп триггер всегда во всех иф работает...
А последующие if сразу выполняются из-за этого.
Надо или elsif использовать, или стоп триггер скобками в нужных местах ограничить... Вы походу не ориентируетесь как or и and в одной строчке работают...
PS Стоп триггер, если это даже триггер, взведен до окончания подпрограммы (если я не переработал...)