Avgorr
Forum Professor / Завсегдатай форума
Участник № / Member № 2607
отправлено / posted
Подскажите пожалуйста, никак не получается синхронизировать работу в 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.
Сообщения / Posts 168 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Мне кажется, в вызове Imp (Out,Period,Tmin,Up,Dn); перепутаны входы Tmin и Tmax блока IREG. В то же время Tmax нельзя задавать произвольно. Это время должно соответствовать реальному времени хода исполнительного механизма. В целом мне задача не понятна. Если период вызова регулятора равен времени хода исполнительного механизма, то регулятор будет работать плохо. Готов обсудить задачу при более ясном изложении исходной позиции. Но т.к. эта весьма частный вопрос, предлагаю перенести его в режим рабочего контакта по e-mail (на известный Вам адрес техподдержки). Что же касается "рассинхронизации", то одной из причин может являться чрезмерная строгость условия "T_cur == T_mem". Я бы поставил "T_cur >= T_mem".
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |