(Можете выложить прект здесь.)
Спасибо , отослал на поддержку , здесь не знаю как прикреплять файлы к сообщению. версия ол последняя 2.7.354.0 , но переводилась с предпоследней не помню номера.
Вид для печати
(Можете выложить прект здесь.)
Спасибо , отослал на поддержку , здесь не знаю как прикреплять файлы к сообщению. версия ол последняя 2.7.354.0 , но переводилась с предпоследней не помню номера.
Здравствуйте!
При написаний функций
RealToUdint
условие RealToUdint := lreal_to_udint(in)*10; и последующей попытке симуляций, программа выдает критическую ошибку и не выходит из симуляций блокируя вкладки функций и схемы и дальше ни как.
Вместо Real вписал lreal
Причем lreal подсвечивается оранжевымВложение 78456
Где тут ошибаться, скопируйте текст и проверьте Вложение 78457
Если умножение на 10 вынести за скобки, то из 12.3 получите 120 вместо 123 в примере, на скрине.Код:function Real_udint: udint;
var_input
inVar : real;
end_var
Real_udint := real_to_udint(inVar*10);
end_function
Прога на ST используя FB должна была регулировать время цикла выполнения в большую и меньшую стороны (эксперимент).
Используется ИПП120.
При вводе значения по нажатию кнопки SEL значение задержки можно редактировать во 2.й строчке экрана. При увеличении значения , время исполнения цикла тоже увеличивается , а вот при уменьшении , ожидаемого уменьшения времени исполнения не происходит , остаётся как будто ни чего не изменял. Время исполнения цикла в мс. также выводиться во 2.й стоке экрана панели. Если ещё увеличивать то всё получиться , а в обратку ни в какую не хочет. Выводимое на экран значение совпадает с системным временем исполнения программы из менюшки.
Для задержек пробовал циклы for и while , разницы в работе нет. Проект прилагается. Может тут кто подскажет куда копать или в поддержку придётся писать ?
Это полная фигня, то чем вы занимаетесь и непонимание работы контроллера и цикла.
Не надо пытаться задерживать цикл, наоборот он должен быть как можно меньше, код надо оптимизировать, а все временные задержки делаются на таймере, еcли не нужно выполнять кусок программы, сделайте обход куска по IF...THEN
Лучше бы написали, что вы хотите, вам бы помогли найти правильный подход.
в минус не может быть меньше реального цикла, как бы вы не хотели. Увеличивать всегда можно, тем же while в конце программы, но уменьшить неуменьшаемое нельзя.
Проект не смотрел, надо ОЛ обновлять, не до него. Значит я не понял, про какой цикл вы говорите.
Надо напоминать, что ваш проект сам по себе выполняется всегда в цикле? может здесь проблема?
Я вот сейчас смотрю проект. Очень интересно!!!
Вложение 78467
Как же достали эти криворукие пЕсатели ОЛ..... вот если у вас версии совпадают, почему такая портянка ошибок?
Вот как после этого обновлять ОЛ? как говорится: работает, не трожь.
з.ы. из-за этого и не смотрю проекты, если нет крайней необходимости.
Я верю Вам. У меня всё открывает без проблем, только Ваш не хочет.
Вложение 78469
У вас, имхо, не совсем правильный подход. Не надо тормозить цикл (или разгонять), надо выбрать подходящий прибор для ваших задач. Если вы собираетесь на ПР делать большие проекты, то это ошибка, ПР для малых проектов. Всего 64 сетевых переменных, групповой опрос отсутствует, какие выводы?
Для средних и больших проектов используйте ПЛК110 и ПЛК2хх.
Все эксперименты на ПР с длительностью цикла, даже обсуждать не буду. Это будет срач на 20 станиц, мне жалко времени.
Ну коли так , у меня тогда вопрос лично к вам . Вы отвечаете (разрабатываете) ОЛ или ST для ОЛ или может руководитель данной ветки продукта , просто да или нет ?
ЗЫ. если вы обычный пользователь как и я тогда мне ваше время не нужно если не хотите то и не надо и я не ПОНИМАЮ зачем мне это "Это будет срач на 20 станиц". я в туалет здесь не хожу , а какие контроллеры выбрать зависит не от меня , точнее не только от меня но и результатов к каким я приду после теста ИПП120.
iljael Просьба сменить тон. Отвечаю по делу: модель работы OwenLogic взята с модели работы CodeSys 2.3.
Она циклическая, как в CodeSys. С невытесняющей многозадачностью (когда каждой задаче выделяется определённый квант времени работ: программе, обмену по RS, обработке экранов).
Поэтому всё поведение циклов будет работать согласно стандарту МЭК на программирование ПЛК (входы => программа => выходы; описано вот тут в моей статье): цикл FOR будет стремиться выполниться за один цикл программы.
Если он сожрёт много ресурсов, то планировщик задач попытается выделить программе больше времени за счёт урезания времени работы с экраном и опросом по RS. Это штатная функция OwenLogic: чем нагруженнее программа, тем больше время её цикла и тем больше тормозит опрос по RS.
Собственно, просьба сменить тон относится к тому, что кой смысл ругаться? У ОВЕНа OwenLogic работает так, как я описал. Если это не устраивает - что нужно? Чтобы ОВЕН переделал ядро? Пожалуйста: эта работа будет стоить денег. Если вы готовы её оплатить - просьба обратиться в ОВЕН официально. Скорее всего к Максиму Денисову, который занимается разработкой OwenLogic.
Если не готовы оплатить - то дальше разговор продолжать смысла не имеет: ОВЕН работает так, как работает.
Я не понял про тон , я задаю вопросы чисто технического характера и ругаться ни с кем не хотел. Вы можете объяснить почему мой "проект" не работает , точнее работает но в одну сторону, сторону увеличения длительности а в сторону уменьшения длительности не работает ?
Так и не смог я открыть проект. Но решил попробовать создать FB, который бы выполнял определенное действие с определенной периодичностью.
На входе время в мс, на выходе значение счетчика. У меня как увеличивается частота выполнения так и уменьшается без проблем.
Вложение 78484
Может я не вник в суть проблемы?Код:function_block Task1 // Задача 1
var_input
CycleTime : udint;
end_var
var_output
Q : udint;
end_var
var
Tick : SYS.TON;
end_var
Tick(I := true, T := udint_to_time(CycleTime));
if Tick.Q Then
Q := Q + 1; Tick(I := false);
end_if
end_function_block
Скрин экрана это следствие, обратите внимание на то что окна под замком а симуляция не включена. Кроме этого не удавалось удалить ФБ блок из за этого.
Больше не дружу с Lreal f а только с real
))))
iljael Объяснил же: процессорное время ОДНОКРАТНО перераспределяется так, чтобы дать проекту максимум. Обратно НЕ перераспределяется. Так устроен ОВЕН.
Про FOR и два цикла программы - да, не так понял. Такого по МЭКовскому стандарту никогда не может быть.
Да вы меня не так поняли , изменяется количество итераций цикла for в большую или меньшую сторону (в зависимости от введенного с панели числа)и из за этого динамически изменяется количество раз сколько код исполниться внутри цикла и соответственно должно меняться время исполнения цикла программы , а не задержка как у вас. В большую изменяется а в меньшую нет , что для меня и не понятно хотя количество циклов реально меняется в обе стороны а вот время выполнения только в одну сторону.
Хотя вот в посту #3746 похоже замаячил свет в конце туннеля.
Да.
А теперь, надеюсь, мы получим ответ на вопрос, ЗАЧЕМ это нужно.
Спрашиваю без сарказма: ведь такое "регулирование" времени выполнения программы - это крайне нештатное НАСИЛИЕ над ПРкой.
Которое ещё и будет работать нестабильно. Например, изменит ОВЕН процессор в ПРке. Он станет работать ещё быстрее - и всё замедление рухнет одномоментно (например, как было в DOS'овских программах на Pascal: если их запускать под Windows, то там вылезала ошибка деления на ноль - по ссылке на английском ОЧЕНЬ поучительная история о том, как задержка Delay была сделана циклом, и он рушился под Windows).
Поэтому информацию - в студию. ЗАЧЕМ? Мы подскажем, как решить по другому.
Только во внутренней документации на OwenLogic (для сотрудников ОВЕНа). Но для этого надо как минимум пойти работать в ОВЕН.
если Sleep (Delay) в секундах, то какая разница, насколько там быстрый процессор?
melky А ты почитай ссылку. Там шла инициализация таймера в тиках и на быстром проце они переполнялись.
я в курсе, что некоторые меряли тиками процессора, но эти времена ушли давно.
Придется переделывать многие проекты и цена вопроса должна быть минимальной вот и приходиться перед началом большого перевода проектов с одной платформы на другую оценивать примерную совместимость по быстродействию контроллера на который хотим перевести , а как проверить ? Зная логику исходного проекта и понимая примерное количество строк кода и чем программа в этих строках занимается нужно просто последовательно выполнить примерные эквиваленты этих строк на новой платформе и посмотреть возможно ли будет нормальная работа проекта на новом оборудовании или придётся доплачивать (что ОЧЕНЬ не желательно) за более быстродействующее и тут попался на глаза ИПП120 и столкнулся с проблемой которую описал на форуме , ну это так вообщем и в кратком изложении надеюсь понятно объяснил. Ну и если с ИПП120 не получиться то мне дешевле выйдет на кассовых терминалах с экраном все сделать.
ИПП120 если не ошибаюсь, это ПР200 без входов/выходов. А оно не умеет групповых запросов от слова вообще. Уже только на это бы обратили внимание.
з.ы. я вот ковыряю панельку https://aliexpress.ru/item/100500682...00038427272932
openPlc еще не пробовал на нее ставить, пока только RapidScada. крутится, опрашивает счетчик Пульсар.
за цикл? вы не в себе :)
О каком цикле речь?Цитата:
Мне не надо групповых запросов , одиночные по событию штук по 10 за цикл сойдут