Показано с 1 по 5 из 5

Тема: Изменение переменной не изменяет привязанное изображение

  1. #1

    По умолчанию Изменение переменной не изменяет привязанное изображение

    Добрый день, написал код который работает он дискретной переменной ready. Переменная ready - это подключённый контакт к выносному клеммному модулю. Пока переменная в false,по задумке, картинка должна окрашиваться в красный показывая что двигатель не готов к работе из-за отпавшего контакта ready. Раньше всё работало исправно, но после временного перерыва, снова подключили контакт ready и был написан следующий код:
    Код:
     IF inputs.ready=TRUE
    	THEN
    	sCurrentFrame:=CONCAT(sPictureMainName,sFrame2);
    	sCurrentNagrName:=CONCAT(sPictureNagrName,sFrame2Nagr);
    	ELSIF inputs.ready=FALSE
    		THEN
    		sCurrentFrame:=CONCAT(sPictureMainName,sFrame4);
    		sCurrentNagrName:=CONCAT(sPictureNagrName,sFrame4Nagr);
    		startMain.startall:=FALSE;
    	END_IF
    мало того что контакт начал сам по себе периодически переходить кратковременно в false, так и изображение с "alarm" после того как ready становится true не переходит в "normal". Помогите понять что сделал не так, дело в коде или всё же в чём-то другом?
    Ниже привожу список объявленных переменных и скрин работы на самом плк.
    Код:
    PROGRAM idImage
    VAR
    	sPictureMainName:STRING :='right_engine_';
    sCurrentFrame:STRING:='right_engine_default';
    	sFrame1:STRING:='default';
        sFrame2:STRING:='normal';
    	sFrame3:STRING:='warning';
    	sFrame4:STRING:='alarm';
    	sPictureNagrName:STRING:='engine_';
    	sCurrentNagrName:STRING:='engine_default';
    	sFrame1Nagr:STRING:='default';
        sFrame2Nagr:STRING:='normal';
    	sFrame3Nagr:STRING:='warning';
    	sFrame4Nagr:STRING:='alarm';
    END_VAR
    forforum.PNG

  2. #2

    По умолчанию

    Добрый день.
    По фрагменту кода сложно что-то сказать.
    Выложите, пожалуйста, небольшой проект, в котором можно увидеть эту проблему (изображение с "alarm" после того как ready становится true не переходит в "normal").

    По поводу "мало того что контакт начал сам по себе периодически переходить кратковременно в false" - для начала стоит проверить монтаж сигнальных линий.

  3. #3
    Пользователь
    Регистрация
    31.07.2013
    Адрес
    Аркаим
    Сообщений
    600

    По умолчанию

    Код:
    ELSIF inputs.ready=FALSE
    		THEN
    Непонятно почему используется ELSIF для операции ветвления из двух возможных состояний. Вполне достаточно указанный фрагмент заметить одним оператором ELSE.
    Если проект пишется для СПК1хх, то изменение цвет элемента по переменной можно назначать в визуализации не нагромождая тонны кода.

  4. #4

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.
    По фрагменту кода сложно что-то сказать.
    Выложите, пожалуйста, небольшой проект, в котором можно увидеть эту проблему (изображение с "alarm" после того как ready становится true не переходит в "normal").

    По поводу "мало того что контакт начал сам по себе периодически переходить кратковременно в false" - для начала стоит проверить монтаж сигнальных линий.
    В общем я разобрался в чём дело когда начал переписывать для Вас проект. В чистом проекте всё работало нормально и контакт не мигал. Я потом догадался проверить с помощью обзора перекрёстных ссылок. Всё дело было в этом участке кода
    IF inputs.ready:=FALSE THEN
    PLC_PRG.uilastErrCode := 22;
    Plc_PRG.alarms_array := array_manager (
    code := 22, //"Стенд не готов",
    arr :=PLC_PRG.alarms_array
    );
    END_IF
    Как Вы уже, я думаю, поняли, дело в этом двоеточии вначале "IF inputs.ready:=false". Я не заметил когда его ставил что здесь нужно просто = и из-за этого переменная в данном участке из чтения превратилась в запись. Контакт мигал потому что не мог определиться ведь контакт подключен и стоит на true, а в журнале ошибок он записывается на false. Не смотря на это всё равно спасибо Вам большое за помощь, если бы я сделал чистый вариант программы только с этой функцией, я бы не догадался "где собака зарыта"
    Последний раз редактировалось xTeAmParkerx; 02.08.2019 в 09:37.

  5. #5

    По умолчанию

    Цитата Сообщение от Sulfur Посмотреть сообщение
    Код:
    ELSIF inputs.ready=FALSE
    		THEN
    Непонятно почему используется ELSIF для операции ветвления из двух возможных состояний. Вполне достаточно указанный фрагмент заметить одним оператором ELSE.
    Если проект пишется для СПК1хх, то изменение цвет элемента по переменной можно назначать в визуализации не нагромождая тонны кода.
    Да, изначально у меня стоял просто else. Это уже когда я перепробовал почти всё, от безысходности поставил elseif чтобы совсем точно указать что я хочу от программы
    Последний раз редактировалось xTeAmParkerx; 02.08.2019 в 09:29.

Похожие темы

  1. Ответов: 3
    Последнее сообщение: 08.12.2017, 09:11
  2. Изображение в CoDeSys V3
    от Пьер в разделе СПК1хх
    Ответов: 2
    Последнее сообщение: 28.07.2017, 11:21
  3. Ответов: 5
    Последнее сообщение: 03.06.2015, 13:27
  4. Отображение и изменение переменной в ИП320
    от paveliv68 в разделе Панели оператора (HMI)
    Ответов: 14
    Последнее сообщение: 04.04.2013, 21:15
  5. Изображение в теме
    от Мухин Сергей в разделе Трёп (Курилка)
    Ответов: 10
    Последнее сообщение: 24.03.2008, 09:39

Метки этой темы

Ваши права

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