Это функциональный блок. Вы его вызвать, случаем, не забыли?
Инженер-системотехник
+7 (916) 477 3925
Первоначально опубликовано Максим Ананских
Это функциональный блок. Вы его вызвать, случаем, не забыли?
Я его вызывал так: pi(); Это правильно? По крайней мере компилятор не возражает. Ещё я хотел оценить время выполнения программы, делал это так: rez:= SysIECTaskGetInfo('PRG_ST',ADR(TaskInfo)); но результат всегда нулевой независимо от названия задачи (перепробовал массу имён задачи, а она у меня одна).
На мой взгляд, вот это должно работать:
PROGRAM PLC_PRG
VAR
PI: PI_INFORMATION;
DI_OFS: WORD;
DI_LEN: WORD;
DO_OFS: WORD;
DO_LEN: WORD;
END_VAR
Проверить сейчас, к сожалению, не могу - контроллера под рукой нет. Еще есть тонкости с версиями прошивок. Думаю, вам подойдут версии, начиная с FW12: они умеют автоматически генерировать конфигурацию контроллера, если её нет, а это как раз то, что вам нужно.
По поводу SysIECTask... не подскажу - не пользовался ими. Лучше спросить на форуме по CoDeSys. Но можно в онлайне зайти в PLC Browser и посмотреть там статистику.
Инженер-системотехник
+7 (916) 477 3925
PI(); возвращает FALSE и в структуре все нули. Так что не работает... А что такое PLC Browser в онлайне?
Вопрос есть по диагностике: может ли программа в 841 контроллере обнаруживать потерю связи с верхом (чтобы предпринять действия)? Например, узнать число TCP подключений или даже наличие связи с ethernet коммутатором? Спасибо.
Попробовал приведенную выше программу на 750-841 SW 13. Работает.
PLC Browser - это полезная функция в Codesys. Её можно найти в проекте на закладке ресурсов. С его помощью можно общаться с контроллером в диалоговом режиме. Команда tsk, например, выдает такую информацию:
Number of Tasks: 1
Task 0: DefaultTask, ID: 0
Cycle count: 209961
Cycletime: 1 ms
Cycletime (min): 1 ms
Cycletime (max): 3 ms
Cycletime (avg): 1 ms
Status: RUN
Mode: UNHANDLED
----
Priority: 1
Intervall: 0 ms
Event: NONE
----
Function pointer: 16#00CD0454
Function index: 82
На следующий вопрос постараюсь развернуто ответить позже. Но вкратце - если вы используете встроенный сервер Modbus, то управлять его работой не получится, а получить его диагностику трудно. Но кое-что сделать все-таки можно. Есть регистры Modbus, считывая значение которых, можно получить некоторую диагностическую информацию. О них сказано в описании.
Инженер-системотехник
+7 (916) 477 3925
Первоначально опубликовано Максим Ананских
Но кое-что сделать все-таки можно. Есть регистры Modbus, считывая значение которых, можно получить некоторую диагностическую информацию. О них сказано в описании.
Если речь идёт про Configuration Register, то я легко добираюсь к ним через Modbus по сети по адресам начиная с 0x1000, но из контроллера не получается туда добраться - не понял как адресовать.
PI() сработало! Что-то я не так раньше делал.... Спасибо!
О и SysIECTaskGetInfo() заработало! Я просто не догадался до имени DefaultTask, а так и PLC_PRG пробовал... СПАСИБО! Остался вопрос, как из контроллера достучаться к конфигурационным регистрам (Configuration Register)?
Первоначально опубликовано min
Остался вопрос, как из контроллера достучаться к конфигурационным регистрам (Configuration Register)?
Единственный способ, который я знаю - обратиться к самому себе по Modbus. Где-то в памяти должны лежать эти регистры, но где - неизвестно.
Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме