Показано с 1 по 10 из 17

Тема: Запись в файл

Древовидный режим

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

    По умолчанию

    Не могу найти ошибку, хоть тресни.

    Текущий код:
    Код:
    (*IF bd<>0 THEN bd:=0; END_IF;							(*Инициализация*)*)
    tim_strt (IN:=strt_plc , PT:=T#10s);						(*инициализация старта плк*)
    strt_plc:=tim_strt.q;										(*по окончании 10 секунд после старта снимаем флаг включения питания*)
    rtr_a220 (CLK:= avar_220v AND NOT tim_strt.q, Q=> );	(*Фронт пропажи напряжения*)
    rtr_strt (CLK:= strt_plc, Q=>);								(*Фронт старта плк*)
    IF hour=3 THEN period_save:=TRUE; END_IF;			(*Каждые сутки в 3 часа происходит сохранение настроек*)
    rtr_psave (CLK:=period_save, Q=>);						(*Фронт периодического сохранения*)
    (*bl_save(ENABLE:= TRUE, TIMELOW:= T#86399s, TIMEHIGH:= T#1s, OUT=> ); (*Генератор импульсов для сохранения с заданным периодом*)*)
    rtr_bls(CLK:= rtr_psave.Q OR savebut, Q=> );			(*savebut - в конфигурации*)
    
    IF rtr_strt.Q THEN								(*Если плк включился*)
    		bdstatus:=3;							(*Начинаем чтение файла*)
    END_IF;
    
    IF ((*rtr_a220.Q OR *)rtr_bls.Q) AND (bdstatus=0 AND NOT tim_strt.q) THEN	(*Если появился сигнал исчезновения напряжения, а также раз в 24 часа или по нажатию копки сохранения*)
    			bdstatus:=1;						(*Выполняем сохранение*)
    END_IF;
    
    CASE bdstatus OF
    1:	(*Сохраняем текущие значения в структуру базы данных*)
    bdsave.day_ust:=day_ust;
    bdsave.night_ust:=night_ust;
    bdsave.hh_day:=hh_day;
    bdsave.mm_day:=mm_day;
    bdsave.hh_night:=hh_night;
    bdsave.mm_night:=mm_night;
    bdsave.ddvh_off:=ddvh_off;
    bdsave.ddvyh_max:=ddvyh_max;
    bdsave.ddvh_max:=ddvh_max;
    bdsave.Kp:=Kp;
    bdsave.Ti:=Ti;
    bdsave.pid_ust:=pid_ust;
    bdsave.sbros:=sbros;
    bdsave.t_sbros:=t_sbros;
    bdsave.sbros_max:=sbros_max;
    bdsave.sbros_count:=sbros_count;
    bdsave.count_num:=count_num;
    bdsave.ntp_yes:=ntp_yes;
    bdsave.gmt:=gmt;
    bdsave.listNum:=listNum;
    bdstatus:=2;	 (*Сохранение данных в файл*)
    
    2: (*Запись структуры уставок в файл*)
    	file:=SysFileOpen('sets.bin', 'w');											(*Открываем файл для записи, если файла нет, то создается новый*)
    	IF file=0 THEN error_rwfile:=TRUE; 										(*Ошибка открытия/создания файла*)
    	RETURN;																	(*В этом случае пытаемся открыть файл повторно*)
    	ELSE
    	wr_byte:=SysFileWrite(file,ADR(bdsave),SIZEOF(bdsave));				(*Получаем количество записанных байт*)
    		IF wr_byte=SIZEOF(bdsave) THEN									(*Если равно размеру базы данных*)
    		SysFileClose(file);													(*Закрываем файл*)
    		bd.0:=SysFileClose(file);												(*Флаг - Файл успешно записан и закрыт*)
    		ELSE bd.1:=TRUE;													(*Флаг - Файл не сохранен*)
    		END_IF;
    	END_IF;
    	bdstatus:=0;																(*Запись окончена*)
    
    3: (*Чтение*)
    	file:=SysFileOpen('sets.bin', 'r');											(*Открытие файла для чтения*)
    		IF file=0 THEN															(*Ошибка открытия файла (файл не существует)*)
    			bd.2:=TRUE;														(*Флаг - Не найден файл с уставками*)
    			bdstatus:=5;														(*Переход на заводские настройки*)
    		ELSE
    			rd_byte:=SysFileRead(file,ADR(buf_bdsave),SIZEOF(buf_bdsave));	(*Считываем данные из файла в структуру (в буфер)*)
    		IF SIZEOF(buf_bdsave)=rd_byte THEN										(*Если файл считан*)
    			SysFileClose(file);														(*Закрываем файл*)
    (*			IF SysFileClose(file) THEN												(*Файл успешно закрыт*)*)
    				bdstatus:=4;															(*Если файл извлечен - копируем в базу*)
    			ELSE
    				bd.3:=TRUE;															(*Ошибка извлечения файла*)
    				bdstatus:=5;															(*Сброс на заводские параметры*)
    			(*END_IF;*)
    		END_IF;
    		END_IF;
    
    4: (*Сохраняем буфер в текущую структуру*)
    bdsave:=buf_bdsave;
    bd.4:=TRUE;																			(*Настройки успешно сохранены *)
    bdstatus:=0;
    
    5: (*Сброс на заводские параметры*)
    bdsave.day_ust:=4;
    bdsave.night_ust:=4;
    bdsave.hh_day:=5;
    bdsave.mm_day:=0;
    bdsave.hh_night:=1;
    bdsave.mm_night:=0;
    bdsave.ddvh_off:=TRUE;
    bdsave.ddvyh_max:=10;
    bdsave.ddvh_max:=10;
    bdsave.Kp:=0.01;
    bdsave.Ti:=0.3;
    bdsave.pid_ust:=25;
    bdsave.sbros:=TRUE;
    bdsave.t_sbros:=5;
    bdsave.sbros_max:=5;
    bdsave.sbros_count:=0;
    bdsave.count_num:=1;
    bdsave.ntp_yes:=TRUE;
    bdsave.gmt:=2;
    listNum[0]:=111234567;
    listNum[1]:=0;
    listNum[2]:=0;
    listNum[3]:=0;
    listNum[4]:=0;
    bdsave.listNum:=listNum;
    bd.5:=TRUE;						(*Настройки сброшены на заводские*)
    bdstatus:=2;
    END_CASE
    
    IF bdsave.day_ust=0 THEN							(*В случае нулевого значения дневной уставки*)
    bdstatus:=5;									(*Сброс на заводские параметры*)
    END_IF;
    
    IF bd.4 OR bd.5 THEN			(*Если настройки сброшены на заводские или успешно извлечены из файла - выполняем присвоение переменных*)
    day_ust:=bdsave.day_ust;
    night_ust:=bdsave.night_ust;
    hh_day:=bdsave.hh_day;
    mm_day:=bdsave.mm_day;
    hh_night:=bdsave.hh_night;
    mm_night:=bdsave.mm_night;
    ddvh_off:=bdsave.ddvh_off;
    ddvyh_max:=bdsave.ddvyh_max;
    ddvh_max:=bdsave.ddvh_max;
    Kp:=bdsave.Kp;
    Ti:=bdsave.Ti;
    pid_ust:=bdsave.pid_ust;
    sbros:=bdsave.sbros;
    t_sbros:=bdsave.t_sbros;
    sbros_max:=bdsave.sbros_max;
    sbros_count:=bdsave.sbros_count;
    count_num:=bdsave.count_num;
    ntp_yes:=bdsave.ntp_yes;
    gmt:=bdsave.gmt;
    listNum:=bdsave.listNum;
    bd.6:=TRUE;
    END_IF;
    
    IF bd.6 THEN									(*После присвоения значений переменным, отправляем их на панель*)
    		p_hh:=hour;							(*запись в регистры значений уставок и времени из энергонезависимой памяти*)
    		p_mm:=minute;
    		p_ss:=second;
    		p_dd:=day;
    		p_mh:=month;
    		p_yy:=year;
    		p_hh_day:=hh_day;					(*часы начала дневного режима*)
    		p_mm_day:=mm_day;				(*минуты начала дневного времени*)
    		p_hh_night:=hh_night;				(*часы начала ночного времени*)
    		p_mm_night:=mm_night;				(*минуты начала ночного времени*)
    		p_Pin:=Pin;							(*входное давление*)
    		p_Pout:=Pfact;							(*выходное давление*)
    		p_day_ust:=day_ust;					(*дневная уставка давления*)
    		p_night_ust:=night_ust;				(*ночная уставка давления*)
    		p_pid_ust:=pid_ust;					(*выход в вольтах сигнала управления с регулятора при неисправности ДДвых.*)
    		p_ddvh_off:=ddvh_off;					(*исключение входного ДД из аварийного оповещения*)
    		p_ddvyh_max:=ddvyh_max;			(*максимальное значение выходного датчика давления*)
    		p_ddvh_max:=ddvh_max;				(*максимальное значение входного датчика давления*)
    		p_Kp:=Kp;								(*Пропорциональный коэффициент ПИД-регулятора*)
    		p_Ti:=Ti;								(*Интегральный коэффициент ПИД-регулятора*)
    		p_count_num:=BYTE_TO_WORD(count_num);						(*Количество номеров, на которое нужно отправить аварийные сообщения*)
    		p_sbros:=sbros;						(*Сброс аварии ПЧ разрешен*)
    		p_t_sbros:=t_sbros;					(*Задержка времени перед сбросом аварии ПЧ*)
    		p_sbros_max:=sbros_max;			(*Максимальное количество попыток сброса аварии ПЧ*)
    		p_sbros_count:=sbros_count;		(*Количество попыток сброса аварии*)
    		p_ntp_yes:=ntp_yes;					(*Разрешение синхронизации времени по интернет*)
    		p_gmt:=gmt;							(*Часовой пояс*)
    		phone_num1:=listNum[0];			(*Присвоение первого телефонного номера*)
    		phone_num2:=listNum[1];			(*Присвоение второго телефонного номера*)
    		phone_num3:=listNum[2];			(*Присвоение третьего телефонного номера*)
    		phone_num4:=listNum[3];			(*Присвоение четвертого телефонного номера*)
    		phone_num5:=listNum[4];			(*Присвоение пятого телефонного номера*)
    		bd:=0;
    END_IF;
    
    IF NOT pow THEN						(*если произошло отключение питания*)
    	strt_plc:=TRUE;						(*выставляем флаг отключения питания*)
    END_IF;
    siz:=SIZEOF(bdsave);						(*Размер базы данных*)
    siz_buf:=SIZEOF(buf_bdsave);
    Где тут кроется ошибка?
    Последний раз редактировалось energvk; 19.03.2015 в 16:17.

Похожие темы

  1. Скачать файл из ПЛК
    от Smoll в разделе ПЛК1хх
    Ответов: 20
    Последнее сообщение: 11.11.2024, 17:19
  2. Файл Rantaim*
    от mib_z в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 31.10.2011, 16:55
  3. Запись / чтение структуры в файл на ПЛК
    от АлексейШ в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 17.08.2011, 18:39
  4. запись тревог в файл на плк
    от rabitt.exe в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 10.02.2010, 17:54

Ваши права

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