Как перенести концепции управления в реальном времени из среды C в IEC61131 (CODESYS)?

Мы пытаемся выполнить измерение/вычисление в реальном времени на выборочных данных. Наш предыдущий опыт был основан на C программировании. Интересно, может ли кто-нибудь помочь мне перенести структуру программирования c в реальном времени в структурированный текст ПЛК IEC61131?

Для цикла управления в реальном времени (с постоянным циклом цикла) нам нужен таймер запуска, таймер окончания и функция ожидания, которая работает следующим образом:

while(1) {

    t_start=timems();  /* a variable gets the current processor time in ms*/

    /*... here the function performs the calculation...*/

    t_stop=timems(); /* a variable gets the current processor time in ms*/

    deltaT=t_stop-t_start; /* time difference between the start of the loop and end of the loop is calculated*/;

    waitms(loop_constant-deltaT); /* the loop waits for the remainder of the constant loop time before the next iteration*/
}

В частности, мне интересно, как мы можем реализовать эти временные структуры внутри IEC61131? Я думаю, мы можем сделать задержку с помощью TON. Тем не менее, любые советы о том, как получить время от процессора, приветствуются.

(В этом сообщении обсуждается, что можно написать код и передать его IEC 61131. Однако в образовательных целях предпочтительнее написание кода внутри IEC 61131.)

p.s.1: Я работаю над устройством SEL-3350, оснащенным прошивкой CODESYS для написания программ IEC61131.

p.s.2: после пары дней поиска я понял разницу между управлением в реальном времени на основе программирования на C и на IEC61131 (используя CODESYS).

По сути, когда вы кодируете устройства ПЛК, у вас есть возможность внутри диспетчера задач настроить свойства цикла обработки контроллера. Следовательно, в отличие от «C», нет необходимости выполнять бесконечный цикл (пока (1)) и программное обеспечение позаботится об этом. Например, в среде CODESYS вы выбираете тип программы как «циклический» и интервал времени как «константу цикла», и это будет похоже на код C, упомянутый выше.


person aghd    schedule 24.07.2017    source источник
comment
Что такое "C" код? И мы не переводческая служба.   -  person too honest for this site    schedule 24.07.2017
comment
@Olaf Я считаю, что OP означает язык программирования C   -  person TriskalJM    schedule 24.07.2017
comment
@TriskalJM: Мне очень нравится, когда люди говорят очевидное, потому что не понимают сути. :-)   -  person too honest for this site    schedule 24.07.2017
comment
Я должен был проверить твой профиль, а, @Olaf? :П   -  person TriskalJM    schedule 24.07.2017
comment
Спасибо за комментарии. Я переформулировал вопрос.   -  person aghd    schedule 24.07.2017
comment
Какой ПЛК вы используете? Много раз ПЛК будет иметь task, где вы можете выбрать, как часто он сканирует (например, 1 мс, 10 мс, 100 мс и т. д.).   -  person mrsargent    schedule 25.07.2017
comment
@ Олаф Мне очень нравится этот вопрос. Он показывает проблему преобразования классического блокирующего кода в циклически исполняемый код. Это не имеет ничего общего с переводческой службой.   -  person Felix Keil    schedule 26.07.2017
comment
@FelixKeil: переполнение стека работает не так. Мы не перевод и не репетиторство. ОП должен предоставить возможное решение и спросить о конкретной проблеме, с которой он столкнулся. Пройдите тур и прочитайте Как Спросите, чтобы получить дополнительную информацию. На такие вопросы не следует отвечать, но голосовать за закрытие.   -  person too honest for this site    schedule 26.07.2017


Ответы (1)


CoDeSys предоставляет библиотеку CmplecTask, которая дает вам подробную информацию о текущей задаче. Позвольте вашему коду выполняться в выделенной задаче, которая запускается циклически, и управляйте всем с помощью информации, программно считываемой из информации о задаче. Там доступны все тайминги, джиттеры и т.д.

person darkmattercoder    schedule 18.11.2017