Ошибка 4024 Программирование структурированного текста

IF  IP_emo:=FALSE THEN
    State:= OFF_Mode;
ELSE
    State :=OFF AND  IP_emo:=TRUE AND start_Btn:=TRUE OR start_Btn:=False;
    State:= Monitor_Mode;
END_IF

Я не уверен, почему я получаю ошибку 4024 в этом коде, требующем a := before "THEN". Кто-нибудь может мне помочь?


person Ruach02    schedule 12.06.2017    source источник


Ответы (2)


Отказ от ответственности: не уверен, какой ПЛК вы используете или что означает ошибка 4024, но я могу прокомментировать формат вашего кода, если вы используете типичный язык ПЛК IEC 61131 (каким является большинство ПЛК).

Во-первых, := я оператор присваивания. = — это оператор сравнения. Таким образом, в вашем статусе if вы должны использовать

IF IP_emo = FALSE THEN

или альтернативно (в зависимости от того, какой ПЛК вы используете. Обычно все языки IEC 61131 одинаковы)

IF NOT IP_emo THEN

Во-вторых, AND и OR предназначены для сравнения, поэтому вы не можете использовать их с оператором присваивания. Вы можете сделать что-то вроде

ELSE
   State :=OFF;
   IP_emo:=TRUE; 
   start_Btn:=TRUE; 
   start_Btn:=FALSE;
   State:= Monitor_Mode;
END_IF

или, может быть

 ELSE
   State :=OFF;
      IF IP_emo=TRUE AND start_Btn=TRUE AND (start_Btn=TRUE OR start_Btn=FALSE) THEN
          State:= Monitor_Mode;
      END_IF
END_IF

не совсем уверен, что вы пытаетесь сделать.

person mrsargent    schedule 12.06.2017

Вы не указываете, какой ПЛК или инструмент вы используете, что означает ошибка 4024 и из какой строки она исходит. Это немного затрудняет ответ на ваш вопрос. Некоторые, вероятно, скажут, что вопрос заслуживает отрицательного ответа на этот счет.

Меня немного смущает форматирование вашего примера. Пожалуйста, отформатируйте как код (выполняется автоматически, если вы используете отступ в 4 пробела), и его будет легче читать и отвечать.

Я сделал попытку форматирования ниже, и у меня есть некоторые комментарии к этому.

  • Строка 1: обычно вы не используете :=, а только = перед THEN (может зависеть от компилятора, но я в этом сомневаюсь)
  • Строка 4: Слишком много знаков :=. Должны ли эта и последующие строки быть разделены на какой-то ELSIF или другой вложенный IF?

Надеюсь, это поможет. :-)

IF IP_emo:=FALSE THEN
  State:= OFF_Mode;
ELSE
  State :=OFF AND IP_emo:=TRUE AND start_Btn:=TRUE OR start_Btn:=FALSE;
  State:= Monitor_Mode;
END_IF
person pboedker    schedule 12.06.2017