This is topic ПДД регулятор in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.
Подскажите пожалуйста, никак не получается синхронизировать работу в ST программе функции PDD с функцией IREG так, чтобы PDD можно было вызывать с периодом который можно изменять в реальном времени, пускай для примера 35 секунд. А IREG вызывается для отработки команды "открыть" "закрыть" согласно расчитанной величине в каждом цикле программы равным времени пересчёта узла, если делать Tmax равно периоду вызова функции PDD, то через 5 - 8 вызовов происходит рассинхронизация и получается у PDD свой период, а у IREG свой. Вот кусок этой программы: if F_time == 1 then PDD_ (Zad,Izm,Zona,Kp,Kd,Kdd,Out); F_time := 0; Sek (); T_mem := SekG; T_mem := T_mem + Period; if T_mem >= 60 then T_mem := T_mem - 60; end_if; else Sek (); T_cur := SekG; if T_cur == T_mem then F_time := 1; end_if; end_if; Imp (Out,Period,Tmin,Up,Dn); ,где Sek ()-возвращает текущую секунду (SekG); PDD_- функция PDD; Imp- функция IREG (Mode и Gap не использую). Контроллер WinCon8000.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Мне кажется, в вызове Imp (Out,Period,Tmin,Up,Dn); перепутаны входы Tmin и Tmax блока IREG. В то же время Tmax нельзя задавать произвольно. Это время должно соответствовать реальному времени хода исполнительного механизма. В целом мне задача не понятна. Если период вызова регулятора равен времени хода исполнительного механизма, то регулятор будет работать плохо. Готов обсудить задачу при более ясном изложении исходной позиции. Но т.к. эта весьма частный вопрос, предлагаю перенести его в режим рабочего контакта по e-mail (на известный Вам адрес техподдержки). Что же касается "рассинхронизации", то одной из причин может являться чрезмерная строгость условия "T_cur == T_mem". Я бы поставил "T_cur >= T_mem".