Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 17

Тема: странная синтаксическая ошибка

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию странная синтаксическая ошибка

    IF di0 THEN
    do0:=FALSE;
    do1:=FALSE;
    do2:=FALSE;
    do3:=FALSE;
    TPup(in:=FALSE);
    TPup(PT:=T#20S);
    TPdown(in:=FALSE);
    TPdown(PT:=T#20S);

    mode:=1;
    ELSE (*IF di0*)

    IF mode=1 THEN

    TPup(q=>b);
    IF NOT b THEN
    TPup(in:=TRUE);
    ELSE(* IF NOT b *)
    CAL tpUp(pt=>apt; et=>aet); (*здесь не выдаёт ошибку*)
    IF aet=apt THEN
    mode:=2;
    tpUp(in:=FALSE);
    END_IF (* IF aet=apt *)

    END_IF (* IF NOT b *)

    END_IF (* IF mode=1*)

    IF mode=2 THEN

    TPdown(q=>b);
    IF NOT b THEN
    TPdown(in:=TRUE);
    ELSE (* IF NOT b*)
    CAL tpDown(pt=>apt;et=>aet); (*здесь выдаёт ошибку: "Expecting END_IF before 'CAL'"*)
    IF aet=apt THEN
    mode:=1;
    tpDown(in:=FALSE);
    END_IF(* IF aet=apt*)
    END_IF(* IF NOT b*)

    END_IF(* IF mode=2*)

    END_IF (*IF di0*)

  2. #2

    По умолчанию

    Не мешало бы и область объявления переменных описать или проект выложить. Будем гадать на кофейной гуще .

    Из справки:

    CAL
    Вызывает функциональный блок или программу.

    Применяется в IL для вызова экземпляра функционального блока, входные переменные помещаются в скобках вслед за его именем.
    Для языка ST надобности в данном операторе нет. Если tpDown - это некий ФБ или программа, то в области описания переменных вы задаете:

    Код:
    tpDown1:tpDown; (*Объявляем экземпляр функционального блока или программы*)
    а в коде пишем:

    Код:
    . . .
    ELSE (* IF NOT b*)
    tpDown1(pt=>apt;et=>aet); 
    IF aet=apt THEN
    . . .
    Если tpDown-это функция, то в коде пишем:

    Код:
    . . .
    ELSE (* IF NOT b*)
    переменная:=tpDown(pt=>apt;et=>aet); 
    IF aet=apt THEN
    . . .
    Попробуйте, думаю поможет.

  3. #3
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    Вроде как настоятельно рекомендует перед вызовом CAL ставить END_IF, чего тут странного, может Вы пишите программу несколько странно

  4. #4

    По умолчанию

    с ошибками разобрался, оказалось не все ошибки видел в окне ошибок
    а требовалось ставить символ ";" после всех END_IF, как ни странно, это влияет на появление этой ошибки

  5. #5
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    Очень интересно, я буквально не больше месяца, как избавился от привычки после ифов и кейсов ставить ; а теперь что же получается надо опять переучиваться

  6. #6
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    Если Вы исходник скопировали из программы, то приглядевшись можно заметить, что там где Вы пишите возникает ошибка между END_IF и ( отсутствует пробел, может в этом была причина

  7. #7

    По умолчанию

    завтра попробую без точек с запятыми и отпишусь

  8. #8

    По умолчанию

    Компилятор точнее понимает где закончилось условие. Сколько у Вас вложенных If может быть...

    Ошибки иногда действительно пропускает, когда их много. Но в итоге если хоть одна ошибка есть - обязательно скажет об этом. Не пугаййте людей - отладчик и компилятор в CoDeSys отличный

  9. #9
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    Для тех кто хочет строго соответствовать стандартам программирования, а так же для тех кто не хочет в будущем выслушивать обидную критику в свой адрес используйте пункт меню "вставить" или волшебную кнопку F2, в этом случае КДС сделает за Вас всю черновую работу

  10. #10
    Пользователь
    Регистрация
    10.05.2011
    Адрес
    Харьков
    Сообщений
    21

    По умолчанию

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    Ошибки иногда действительно пропускает, когда их много. Но в итоге если хоть одна ошибка есть - обязательно скажет об этом.
    Именно это я и говорю.

    Цитата Сообщение от capzap Посмотреть сообщение
    Для тех кто хочет строго соответствовать стандартам программирования, а так же для тех кто не хочет в будущем выслушивать обидную критику в свой адрес используйте пункт меню "вставить" или волшебную кнопку F2, в этом случае КДС сделает за Вас всю черновую работу
    Я не стремлюсь "строго соответствовать" стандартам, просто не вижу смысла делать лишние, бесполезные действия. Ассистентом ввода (F2) в некоторых случаях пользуюсь. Удобный инструмент, который обязательно должен присутствовать в среде разработки для ПЛК.

Страница 1 из 2 12 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •