звук работает хочу понять как он сделан
Вид для печати
Не знаю писали об этом или нет, но пользователям дико неудобно взаимодействовать с элементом "Динамический текст".
Куча жалоб на то, что не видно выбран он или нет по нажатии на кнопку Sel.
Это надо додуматься изменять не цвет фона при выборе, а цвет тонкой рамки. Да еще и с черного на темно-зеленый.
Приходится делать рамку жирной и светлой, чтобы был виден выбор элемента.
На ПР205 230 22.00 не получилось обновить, можете подсказать как дальше востоновить? Треугольник мигает, ПК не видит контроллер
Лучше сюда обратиться
Вложение 87846
Здравствуйте.
FUNCTION_BLOCK startGroupSelect
VAR_INPUT
inputTimer :BOOL;
locRem :UDINT;
inputButton :ARRAY [0..7] OF BOOL;
inputRem :ARRAY [0..7] OF BOOL;
END_VAR
VAR_OUTPUT
invertorSupplayON :BOOL;
routerSupplayON :BOOL;
outputGroup :ARRAY [0..7] OF BOOL;
END_VAR
VAR
ASICtimeDelay :TIME := T#20S;
inventorTimeDelay :TIME := T#10S;
END_VAR
CASE locRem OF
// Управление с кнопок панели ПР205
0: outputGroup[0] := inputButton[0];
outputGroup[1] := inputButton[1];
outputGroup[2] := inputButton[2];
outputGroup[3] := inputButton[3];
outputGroup[4] := inputButton[4];
outputGroup[5] := inputButton[5];
outputGroup[6] := inputButton[6];
outputGroup[7] := inputButton[7];
// Управление по таймерам
когда locRem = 0, на контроллере работают только первые две строчки:
outputGroup[0] := inputButton[0];
outputGroup[1] := inputButton[1];
в режиме симуляции всё как положено. Причём на ПР200 работает нормально.
доп. системные таймеры в массив складывать нельзя?
Первые две строчки работают, а остальные в отпуске или у них перекур?
А где шаги то?
Шаг только нулевой есть и присвоение только 2 строки.
Таймеры в массив нельзя.
я не всё в пост вставил, 1: с таймера назначение 2: удалённо
при LocRem 0: 8 выходов принимают значение восьми переключателей с экрана
при 1: выходы включаются по таймерам
при 2: с диспетчеризации
вставил в цикл
FOR i:=0 TO 7 BY 1 DO
outputGroup[i] := inputButton[i];
END_FOR
тоже самое - только два выхода назначаются
в симуляции всё ок.
Up
массив таймеров для того, чтобы изменять время включения групп, это критично.
Up2
>> таймеры в массив нельзя
в перспективе подвезёте?)
Вложение 89005
это симуляция, зелёные индикаторы привязаны к outputGroup[0..7], переключатели привязаны к inputButton[0..7]
на экране контроллера же, все переключатели включены но индикаторы горят только первые два, и физические выходы тоже только два.
Up
косяк вроде не в массивах, т.к. я вчера уже этот ФБ отработал на ПР200 - всё ок. ПР205 на которых глюк они в шкафах и работают(пред.версия кода, но там прям всё на коленке).
думается что проблема именно в переключателях(тумблерах), т.к. порядок их перебора с экрана он живёт отдельно, я пробовал переименовывать тумблеры, выстраивать их в панели слева и даже удалил старые и назначил новые.
372 версия.
>> забить массивы
удалить старые и назначить новые? и привязать соответственно?
полностью удалил массивы, экран, завёл новые массивы, назначил элементы - тоже самое( Причём по таймеру группы включаются корректно.
мож это поможет Вложение 89010 это вываливается при попытке включить онлайн-отладку.
а ПР225 это аналог 205 только в щитовом исполнении? Сейчас попробовал вместо переключателей кнопки - четыре вообще не выбираются(не подсвечиваются когда выбраны), ощущение что элементы не влазят в память, выделенную для активного экрана.. У тебя переключатели на одном экране были? На рабочем коде управление группами на двух экранах.. Вот не могу к сожалению прям досконально потестить, хоть покупай это ПР)
Up
посмотрел твой код - поставь восемь переключателей?
Ок. выходной массив собирается в битовое слово и уходит на МУ110(у меня пунктик насчёт входов/выходов ПЛК)..
глянь пож вот это:
глюк только на этом фб, но CASE 1: ведь работает.Код:FUNCTION_BLOCK startGroupSelect
VAR_INPUT
inputTimer :BOOL;
locRem :UDINT;
inputButton :ARRAY [0..7] OF BOOL;
inputRem :ARRAY [0..7] OF BOOL;
END_VAR
VAR_OUTPUT
invertorSupplayON :BOOL;
routerSupplayON :BOOL;
outputGroup :ARRAY [0..7] OF BOOL;
i :UDINT;
END_VAR
VAR
ASICtimeDelay :TIME := T#20S;
inventorTimeDelay :TIME := T#10S;
timerStartGroup0 :SYS.TON;
timerStartGroup1 :SYS.TON;
timerStartGroup2 :SYS.TON;
timerStartGroup3 :SYS.TON;
timerStartGroup4 :SYS.TON;
timerStartGroup5 :SYS.TON;
timerStartGroup6 :SYS.TON;
timerStartGroup7 :SYS.TON;
timerStopGroup0 :SYS.TOF;
timerStopGroup1 :SYS.TOF;
timerStopGroup2 :SYS.TOF;
timerStopGroup3 :SYS.TOF;
timerStopGroup4 :SYS.TOF;
timerStopGroup5 :SYS.TOF;
timerStopGroup6 :SYS.TOF;
timerStopGroup7 :SYS.TOF;
invertorSupplay :SYS.TOF;
routerSupplay :SYS.TOF;
END_VAR
CASE locRem OF
// Управление с кнопок панели ПР205
0:
FOR i:=0 TO 7 BY 1 DO
outputGroup[i] := inputButton[i];
routerSupplayON := inputButton[i];
invertorSupplay(I:=inputButton[i], T:=inventorTimeDelay, Q=>invertorSupplayON);
END_FOR
// Управление по таймерам
1:
routerSupplayON := inputTimer;
routerSupplay(I:=inputTimer, T:=ASICtimeDelay);
timerStartGroup0(I:=routerSupplay.Q, T:=T#0S);
timerStartGroup1(I:=routerSupplay.Q, T:=T#5S);
timerStartGroup2(I:=routerSupplay.Q, T:=T#10S);
timerStartGroup3(I:=routerSupplay.Q, T:=T#15S);
timerStartGroup4(I:=routerSupplay.Q, T:=T#20S);
timerStartGroup5(I:=routerSupplay.Q, T:=T#25S);
timerStartGroup6(I:=routerSupplay.Q, T:=T#30S);
timerStartGroup7(I:=routerSupplay.Q, T:=T#35S);
timerStopGroup0(I:=timerStartGroup0.Q,T:=T#0S, Q=>outputGroup[0]);
timerStopGroup1(I:=timerStartGroup1.Q,T:=T#5S, Q=>outputGroup[1]);
timerStopGroup2(I:=timerStartGroup2.Q,T:=T#10S, Q=>outputGroup[2]);
timerStopGroup3(I:=timerStartGroup3.Q,T:=T#15S, Q=>outputGroup[3]);
timerStopGroup4(I:=timerStartGroup4.Q,T:=T#20S, Q=>outputGroup[4]);
timerStopGroup5(I:=timerStartGroup5.Q,T:=T#25S, Q=>outputGroup[5]);
timerStopGroup6(I:=timerStartGroup6.Q,T:=T#30S, Q=>outputGroup[6]);
timerStopGroup7(I:=timerStartGroup7.Q,T:=T#35S, Q=>outputGroup[7]);
invertorSupplay(I:=outputGroup[7], T:=inventorTimeDelay, Q=>invertorSupplayON);
// Управление с диспетчеризации
2:
FOR i:=0 TO 7 BY 1 DO
outputGroup[i] := inputRem[i];
routerSupplayON := inputButton[i];
invertorSupplay(I:=inputButton[i], T:=inventorTimeDelay, Q=>invertorSupplayON);
END_FOR
ELSE
outputGroup [0] := FALSE;
outputGroup [1] := FALSE;
outputGroup [2] := FALSE;
outputGroup [3] := FALSE;
outputGroup [4] := FALSE;
outputGroup [5] := FALSE;
outputGroup [6] := FALSE;
outputGroup [7] := FALSE;
END_CASE
END_FUNCTION_BLOCK
с таймерами как раз проблем нет.. только с переключателями с экрана.
ой.. 373 версия))
Это при первом заходе в case 1: проблем не будет - если выйти из него в середине процесса и зайти повторно - можно получить сюрпризы различного вида.
Здесь явно какой-то шаговый автомат с временнЫми переходами просматривается - посмотри в эту сторону, может вовсе не массив TONов нужен, а просто массив TIME
так код блока, который единственный глючит, лежит выше по треду. восемь inputButton - это восемь переключателей на экране, inputTimer - bool с расписания, inputRem - восемь битов с диспы. Output - это восемь битов выходных. locRem - это шаги CASE назначение выходов, где 0: с кнопок на экране, 1: с расписания(ну там таймеры по очереди), 2: с диспетчеризации
стальное это задание часов-минут для расписания, выбор времен таймеров, выбор дней, откуда выбирать - локально или с дисп. это тчн не важно и оно всё работает. я же пишу что перенёс на пр200 и там всё работает. а на пр205 затык только с переключателями на экране.
следи за руками:
это фб выбора дней Вложение 89013
это состояние тумблеров на экране: Вложение 89014 я перепроверил назначение элементов массива, конечно.
это состояние элементов входного массива(тумблеры как раз привязаны к элементам этого массива) Вложение 89015 уже интересно))
а это состояние выходного массива Вложение 89016
ладно я выбор групп прикостылил бул-переменными, но вот чтобы ещё дни и часы с минутами! Не, допиливайте. (массивы с элементами бул.. наверное, это не точно))
В общем есть какая-то проблема в OL с массивами, рано ещё их использовать
а ты не участвовал в разработке? я думал что да) ускорить бы допил - массивы то завезли но не все и не полностью)