Здравствуйте.
Установив SP8, после перезагрузки вывалилась такая ошибка
Вложение 37701
з.ы. переустановил CS, заработало
Вид для печати
Здравствуйте.
Установив SP8, после перезагрузки вывалилась такая ошибка
Вложение 37701
з.ы. переустановил CS, заработало
как можно вытянуть из СПК207 дату и время, через ФБ RTC или есть "специально обученные" системные переменные?
Закончил писать дипломную работу на кдс и хочу выразить благодарность всем,кто оказал мне помощь!Спасибо вам!А это я скажу на защите диплома:
Вложение 37755
Есть такое фрагмент кода
IF PExtAuto THEN
PExtTimer(IN:=coolingRequired, pt:=T#1S);
PExt:=PExtTimer.Q;
END_IF
То есть задержка на включение PExt, на выключение - нет задержки.
Есть жалоба, что после суток-двое PExt перестает включаться без причин.
Корректно ли написано, может по таймеру есть какие-то особенности?
Так дело же не в заказчике, выведите таймер из тела условия и её мешало бы поставить счётчик, меняет ли coolingRequired свои состояния
То есть код сделать таким?
БЫЛО
IF PExtAuto THEN
PExtTimer(IN:=coolingRequired, pt:=T#1S);
PExt:=PExtTimer.Q;
END_IF
СТАЛО
PExtTimer(IN:=(PExtAuto and coolingRequired), pt:=T#1S);
PExt:=PExtTimer.Q;
Зачем выводить из условия? Операция сравнения бита же быстрее чем прогонка таймера.
При работе с условиями:
- если PExtAuto сбросится, то таймер не будет вызываться и при следующем заходе под условие он не начнет счет заново, а продолжит с того момента, где он был (это верно, если coolingRequired не сбросится в FALSE);
- так же, присвоение результата работы таймера переменной PExt будет производится только в том случае, если переменная PExtAuto будет в TRUE, т.е. происходит только в момент входа под условие;
Запуская таймер без условия Ваш таймер перезапустится, если PExtAuto или coolingRequired будут в FALSE и, соответственно, сбросится значение переменной PExtAuto.
Спасибо за подробные обьяснения Владислав, capzap.
Если оставлю условие на таймер,
- худшее, что может быть, это мгновенное его срабатывание (т.к. в таймере осталось какое-то старое число в счетчике). Это не проблема.
Гипотетически может ли быть операция переполнения таймера, когда вместо секунды, он будет считать сверхбольшое время?
Эксплуатант говорит через сутки-двое перестает устанавливаться переменная.
Хотел бы до конца осознать...
Не стоит забывать, что если таймер сработал, и переменная PExtAuto перешла в FALSE в след. цикле, то выход таймера не сбросится в FALSE, а останется в состоянии TRUE.
Нет. Если он получает на вход 1 секунду и только ее, то и считать он будет только секунду.
Здесь имеется в виду, что не отрабатывает таймер?
.
Так и надо. При отключении АВТО режима, переменная должна остаться в прежнем состоянии, не сбрасываться.
"Через сутки-двое" не включает PExt при наличии всех условий (не отрабатывает таймер)... Со слов эксплуататора конечно, что он там жмет и делает непонятно. Но логика таймера должна срабатывать при любых предшествующих действиях.
Поменять
IF PExtAuto THEN
PExtTimer(IN:=coolingRequired, pt:=T#1S);
PExt:=PExtTimer.Q;
END_IF
на
PExtTimer(IN:=(PExtAuto and coolingRequired), pt:=T#1S);
PExt:=PExtTimer.Q;
не могу.
Нужно, чтобы при отсутствии PExtAuto (ручной режим), PExt продолжал включаться с кнопки независимо, а крайний вариант всегда будет его выключать...
Надеюсь понятно написал)
В условии может просто оперировать входами таймера, а не использовать сам таймер
Есть число 251. Как программе указать чтобы она читала только единицы, десятки и сотни.
Т.е на выходе функции должно получиться три числа записанные в разные переменные: 2, 5 и 1.
Например, так:
Вложение 37970Код:FUNCTION_BLOCK EXTRACT_DIGITS
VAR_INPUT
uiInput: UINT;
END_VAR
VAR_OUTPUT
uiHundreds: UINT;
uiTens: UINT;
uiOnes: UINT;
END_VAR
VAR
END_VAR
uiHundreds := uiInput / 100;
uiTens := (uiInput MOD 100) / 10;
uiOnes := uiInput - uiHundreds * 100 - uiTens * 10;
Благодарю, работает как нужно.
Добрый день.
Вы точно уверены, что вам нужен непрерывно действующий soft-PLC?
Какие задачи вам необходимо решить?
Деление с остатком.
Добрый день!
Подключаю библиотеку OSCAT Basic, в менеджере библиотек нужную функцию (FUNCTION _ARRAY_MEDIAN : REAL) вижу.
В программе при создании экземпляра функции её нет.
Что не так делаю?
Спасибо.
Добрый день.
Можете продемонстрировать скриншотами, как вы добавляете функцию?
По хорошему лучше всегда использовать "путь к функции" (т.е. область ее видимости). Но это не обязательно.
Это может требоваться если:
1) Так указал разработчик библиотеки (как раз в OSCAT BASIC так и сделано);
2) POU с аналогичным именем уже есть в другой библиотеке и компилятор не понимает, к какому из них вы пытаетесь обратиться.
Можно настроить среду разработки так, чтобы она сама подставляла область видимости к имени POU.
Для этого зайдите в меню Tool -> Options -> Smart coding и установите галочку Insert with namespace.
Добрый день! Возникли непонятные проблемы при управлении с визуализации.
На экране визуализации расположено несколько элементов:
Вложение 38102
Вложение 38103
Т.е. при OnMouseDown выполняется запись в переменную:
Вложение 38105
Вложение 38107
И при OnDialogClosed выполняется ST-код:
Вложение 38104
Вложение 38106
Для понимания указываю два диалога, но с остальными аналогично всё.
И если первым элементом всё работает прекрасно, то с остальными происходит что-то непонятное. OnMouseDown работает правильно, при нажатии на "ОК" происходит запись переменной, а вот при закрытии диалога dctulf выполняется ST-код первого элемента, т.е.:
Вместо:Код:Arg11 := 10;
Arg12 := REAL_TO_WORD(VISUAL_PRG.chgPressDay * 100);
Cmd1 := 2;
и т.п.Код:Arg11 := 11;
Arg12 := REAL_TO_WORD(VISUAL_PRG.chgPressNight * 100);
Cmd1 := 2;
Пробовал как на SP5, так и на SP7.
Я в лёгком замешательстве...
Если выложите проект - поисследуем этот вопрос.
Желательно убрать оттуда все лишнее, оставив только несколько элементов визуализации и переменные, которые с ними связаны.
Прикладываю проект. Вроде всё лишнее убрал.
Вложение 38108
В 3.5 SP11 Patch5 все работает корректно (это не значит, что я рекомендую переделать проект в нем).
Вероятно, это баг SP5/SP7 - в те времена действительно было несколько проблем с OnDialogClosed.
Если правильно помню, то какую-то из них около года назад также нашли именно вы.
Да, тоже я находил. А где достать SP11 patch5? И не будет ли проблем в работе СПК,если переделать проект на этой версии?
Здравствуйте! Подскажите, что за проблема может быть
Вложение 38236
До этого все загружалось, добавил один экран визуализации и одно POU, при компиляции ошибок не выдает
CS3.5 SP8
СПК207,03,WEB
Версия таргета 3.5.4.0
Большое спасибо!
было деление на 0 (3 штуки)))
Столкнулся с еще подобной проблемой, только теперь где то в визуализации, где можно поискать ошибку?
Вложение 38258
Еще непонятность - вызвал экран из PRG, сначала один (отображение времени), потом другой (с отображением времени и кнопкой сброса). Как только появляется последний экран, если нажать на любую область экрана (не обязательно на кнопку или на кнопку) то появляется предыдущий экран, хотя это ни как и ни где не прописано. При этом, если нажал на кнопку, ее основная функция не выполняется, а просто перекидывает на предыдущий экран, что это за баг или у меня , что не так?
Если так сделать при отладке на ПК, такого не происходит