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

Тема: Структура+константы (?) введённые через панель, при старте программы

  1. #1

    По умолчанию Структура+константы (?) введённые через панель, при старте программы

    привет
    столкнулся вот с таким вот решением в программе, и не пойму как мне сделать то, что мне надо сделать (каламбурчик)
    есть ПЛК, который Слейв. Есть Панель Мастер.
    Есть два аналоговых датчика-входных сигнала, параметры диапазона каждого канала для которых задаются с панели - начало и конец диапазона.
    есть вот такой код
    Код:
    (*Уставки*)
    	IF	NOT FIRST_SCAN	THEN
    		(*Уставки FLOAT*)
    		MB0000_FLT			:=	PT_Input.Lo_Limit;
    		MB0002_FLT			:=	PT_Input.Hi_Limit;
    		MB0004_FLT			:=	FT_R1.Lo_Limit;
    		MB0006_FLT			:=	FT_R1.Hi_Limit;
    		MB0008_FLT			:=	PT_Input_Min_Pressure;
    		MB0010_FLT			:=	PT_Input_Max_Pressure;
    		MB0012_FLT			:=	FT_R1_Weigth_Pulse;
    .......................................................
    FIRST_SCAN			:= 	TRUE;
    	ELSE
    		(*Уставки FLOAT*)
    		PT_Input.Lo_Limit						:=	MB0000_FLT;
    		PT_Input.Hi_Limit						:=	MB0002_FLT;
    		FT_R1.Lo_Limit							:=	MB0004_FLT;
    		FT_R1.Hi_Limit							:=	MB0006_FLT;
    		PT_Input_Min_Pressure					:=	MB0008_FLT;
    		PT_Input_Max_Pressure					:=	MB0010_FLT;
    		FT_R1_Weigth_Pulse					        :=	MB0012_FLT;
    МВхххх_FLT - это имя переменной и её адрес в слейве.
    нас интересует РТ - давление и Расход FT
    которые "сделаны" через структуру
    Код:
    TYPE AIN :
    STRUCT
    	Hi_Limit:		REAL	:= 50.0;
    	Lo_Limit:		REAL	:= 0.0;
    	Value:			REAL;
    	Status:			REAL;
    	Error:			BOOL;
    END_STRUCT
    END_TYPE
    вот это присвоение значений для Hi и Lo - важно, так как при перезагрузке ПЛК происходит "обнуление" введённых через панель настроек канала Давления и Расхода и установка вот на эти 0 и 50, которые заданы в структуре получается как по-умолчанию.
    при этом, в глобальных переменных всё это объявлено следующим образом
    Код:
    VAR_GLOBAL RETAIN PERSISTENT
    	(*Аналоговые сигналы*)
    	PT_Input:		AIN;	(*Параметры датчика давления*)
    	FT_R1:		AIN;	(*Параметры расходомера*)
    ......................
    	(*Уставки REAL*)
    	PT_Input_Min_Pressure:	REAL := 0.5;	(*Минимальное давление на входе*)
    	PT_Input_Max_Pressure:	REAL := 5.0;	(*Максимальное давление на входе *)
    	FT_R1_Weigth_Pulse:		 REAL := 30.0;	(*Расходомер R1. Вес импульса - имп/л*)
    мне надо, чтобы сохранялась возможность ввести начало - конец диапазона и это осталось в ПЛК до "следующего" ввода инженером.
    То есть, введеённая 1 раз цифра, осталась в памяти, до следующего принудительного изменения через панель и не сбрасывалась на дефолтные, заданные, через структуру, которая в принципе мне только мешает, так как давление и расход конечно же не могут быть вообще одинаковыми по шкале
    с уставками Min_Pressure и Max_Pressure и вес импульса мне понятно, я вбил там то, что мне надо и это останется.
    Но вот, что мне сделать со структурой, я не понимаю.
    и почему вот этот FIRST_SCAN со своим IF.....ELSE мне обнуляет при перезапуске введённые значения
    это место я вообще не могу понять, какое-то кольцо сделано

    Если убрать из структуры присовения значений
    Код:
    Hi_Limit:		REAL;
    Lo_Limit:		REAL;
    то где мне сделать эти присвоения значений своих (!) для КАЖДОГО датчика - для давления отдельно, для расхода отдельно
    ?
    на ходу я попытался заснуть их в VAR_GLOBAL RETAIN PERSISTENT также, как Уставки
    Код:
    FT_R1.Lo_Limit: REAL := 0.0;
    FT_R1.Hi_Limit:	REAL := 100.0;
    но КДС гворит это ошибка

    как решить эту задачку?

    при этом ввод через панель должен остаться, как и структура, чтобы не менять код слишком серьёзно, на это нет ни времени, ни возможности, система не моя, я просто "мимо проходил", но эта шаблонная заготовка неизвестного codemeister-а ему облегчила работу, но в реальной жизни приносит боль и страдания заказчику, вынужденного потом после вынужденных блекаутов восстанавливать настройки каналов

  2. #2

    По умолчанию

    то есть, если FIRST_SCAN := TRUE;
    то мы пишем наши Лимиты, которые взяты из Структуры AIN в адреса, которые улетают в панель для отображения
    PT_Input.Lo_Limit := MB0000_FLT;
    PT_Input.Hi_Limit := MB0002_FLT;
    FT_R1.Lo_Limit := MB0004_FLT;
    FT_R1.Hi_Limit := MB0006_FLT;
    потом FIRST_SCAN обнуляется
    IF NOT FIRST_SCAN THEN
    и идёт уже обратное присвоение Лимитов от Панели, где стоит оператор и вводит их заново и они остаются до следующего отключения питания или ресета ПЛК
    MB0000_FLT := PT_Input.Lo_Limit;
    MB0002_FLT := PT_Input.Hi_Limit;
    MB0004_FLT := FT_R1.Lo_Limit;
    MB0006_FLT := FT_R1.Hi_Limit;

    где мне здесь разорвать это присвоение, но сохранить ввод с панели в дальнейшую "константу"?

  3. #3

    По умолчанию

    Цитата Сообщение от In_Da_Cher_A Посмотреть сообщение

    где мне здесь разорвать это присвоение, но сохранить ввод с панели в дальнейшую "константу"?
    Например, есть структура COMPRESSOR, она входит в массив структур
    compressors :ARRAY [1..7] OF COMPRESSOR; Смотри скрин 1 Присваивание в структуре.jpg
    Чтобы присвоить переменной в структуре число, ставите например compressors[1], ставите точку, выбираете переменную из структуры, например
    compressors[1].P_1st и присваиваете из переменной Var1 в неё число. Саму переменную Var1, можете пометить в RETAIN или VAR_GLOBAL RETAIN PERSISTENT

    Можете менять переменную Var1 с панели, главное, чтобы в неё нигде больше ничего не записывалось ( убираете запись в эту переменную),
    а так же убираете запись в переменную структуры compressors[1].P_1st из других мест.
    Последний раз редактировалось kondor3000; 27.03.2024 в 23:06.

  4. #4

    По умолчанию

    то есть надо сделать вот так?
    Код:
    VAR_GLOBAL RETAIN PERSISTENT
    ......................
    	(*Уставки REAL*)
    	F_Var1:	REAL := 0.0;	(*начало*)
    	F_Var2:	REAL := 100.0;	(*конец *)
    	.........................
    и потом далее в тексте
    Код:
    (*Уставки*)
                    FT_R1.Lo_Limit:= F_Var1;    (*присваиваем Лимитам значения констант*)
    		FT_R1.Hi_Limit:= F_Var2;
    
    	IF	NOT FIRST_SCAN	THEN
    		(*Уставки FLOAT*)
    		.................
    		MB0004_FLT:=	FT_R1.Lo_Limit; (*присваиваем Лимитам новые значения при необходимости*)
    		MB0006_FLT:=	FT_R1.Hi_Limit;
    		................
    .......................................................
    FIRST_SCAN			:= 	TRUE;
    	ELSE
    		(*Уставки FLOAT*)
    		....................
    		F_Var1:=	MB0004_FLT;    (*отправляем в панель константы при рестарте*)
    		F_Var2:=	MB0006_FLT;
    		...............
    и аналогично для давления
    ну и соответственно убрать из описания структуры присвоение значений лимитов по дефолту
    и больше никто не пишет там ничего
    Последний раз редактировалось In_Da_Cher_A; 27.03.2024 в 23:27.

Похожие темы

  1. ПЛК или Панель управляют через OwenCloud другими приборами
    от vovankam в разделе Облачный сервис OwenCloud
    Ответов: 4
    Последнее сообщение: 11.11.2022, 11:30
  2. Пропадает RS-485 при старте программы
    от ZVD_Newton в разделе ПЛК1хх
    Ответов: 0
    Последнее сообщение: 31.10.2020, 17:47
  3. Ответов: 341
    Последнее сообщение: 16.01.2018, 11:27
  4. ввод времени через панель.
    от programmeriv в разделе Панели оператора (HMI)
    Ответов: 8
    Последнее сообщение: 30.07.2010, 09:03
  5. Ответов: 7
    Последнее сообщение: 21.04.2008, 08:33

Ваши права

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