Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 17 из 17

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

  1. #11
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,842

    По умолчанию

    Цитата Сообщение от energvk Посмотреть сообщение
    Добрый день! Не могу разобраться. Пишу структуру уставок в файл. После перезагрузки плк уставки должны читаться из файла, либо при ошибке чтения сбрасываться на настройки по умолчанию. Всё работает, ошибок не отследил, но при перезагрузке настройки сбрасываются на "по умолчанию", хотя ошибок чтения файла нет. Может где-то что-то не правильно?

    Код:
    Код:
    IF bd<>0 THEN bd:=0; END_IF;            (*&#200;&#237;&#232;&#246;&#232;&#224;&#235;&#232;&#231;&#224;&#246;&#232;&#255;*)
    tim_strt (IN:=strt_plc , PT:=T#10s);                        (*&#232;&#237;&#232;&#246;&#232;&#224;&#235;&#232;&#231;&#224;&#246;&#232;&#255; &#241;&#242;&#224;&#240;&#242;&#224; &#239;&#235;&#234;*)
    strt_plc:=tim_strt.q;                                    (*&#239;&#238; &#238;&#234;&#238;&#237;&#247;&#224;&#237;&#232;&#232; 10 &#241;&#229;&#234;&#243;&#237;&#228; &#239;&#238;&#241;&#235;&#229; &#241;&#242;&#224;&#240;&#242;&#224; &#241;&#237;&#232;&#236;&#224;&#229;&#236; &#244;&#235;&#224;&#227; &#226;&#234;&#235;&#254;&#247;&#229;&#237;&#232;&#255; &#239;&#232;&#242;&#224;&#237;&#232;&#255;*)
    rtr_a220 (CLK:= avar_220v AND NOT tim_strt.q, Q=> );                    (*&#212;&#240;&#238;&#237;&#242; &#239;&#240;&#238;&#239;&#224;&#230;&#232; &#237;&#224;&#239;&#240;&#255;&#230;&#229;&#237;&#232;&#255;*)
    rtr_strt (CLK:= strt_plc, Q=>);                            (*&#212;&#240;&#238;&#237;&#242; &#241;&#242;&#224;&#240;&#242;&#224; &#239;&#235;&#234;*)
    IF hour=3 THEN period_save:=TRUE; END_IF;        (*&#202;&#224;&#230;&#228;&#251;&#229; &#241;&#243;&#242;&#234;&#232; &#226; 3 &#247;&#224;&#241;&#224; &#239;&#240;&#238;&#232;&#241;&#245;&#238;&#228;&#232;&#242; &#241;&#238;&#245;&#240;&#224;&#237;&#229;&#237;&#232;&#229; &#237;&#224;&#241;&#242;&#240;&#238;&#229;&#234;*)
    rtr_psave (CLK:=period_save, Q=>);                    (*&#212;&#240;&#238;&#237;&#242; &#239;&#229;&#240;&#232;&#238;&#228;&#232;&#247;&#229;&#241;&#234;&#238;&#227;&#238; &#241;&#238;&#245;&#240;&#224;&#237;&#229;&#237;&#232;&#255;*)
    (*bl_save(ENABLE:= TRUE, TIMELOW:= T#86399s, TIMEHIGH:= T#1s, OUT=> ); (*&#195;&#229;&#237;&#229;&#240;&#224;&#242;&#238;&#240; &#232;&#236;&#239;&#243;&#235;&#252;&#241;&#238;&#226; &#228;&#235;&#255; &#241;&#238;&#245;&#240;&#224;&#237;&#229;&#237;&#232;&#255; &#241; &#231;&#224;&#228;&#224;&#237;&#237;&#251;&#236; &#239;&#229;&#240;&#232;&#238;&#228;&#238;&#236;*)*)
    rtr_bls(CLK:= rtr_psave.Q OR savebut, Q=> );        (*savebut - &#226; &#234;&#238;&#237;&#244;&#232;&#227;&#243;&#240;&#224;&#246;&#232;&#232;*)
    
    IF rtr_strt.Q THEN                                (*&#197;&#241;&#235;&#232; &#239;&#235;&#234; &#226;&#234;&#235;&#254;&#247;&#232;&#235;&#241;&#255;*)
            bdstatus:=3;                            (*&#205;&#224;&#247;&#232;&#237;&#224;&#229;&#236; &#247;&#242;&#229;&#237;&#232;&#229; &#244;&#224;&#233;&#235;&#224;*)
        ELSIF (rtr_a220.Q OR rtr_bls.Q) AND bdstatus=0 THEN    (*&#197;&#241;&#235;&#232; &#239;&#238;&#255;&#226;&#232;&#235;&#241;&#255; &#241;&#232;&#227;&#237;&#224;&#235; &#232;&#241;&#247;&#229;&#231;&#237;&#238;&#226;&#229;&#237;&#232;&#255; &#237;&#224;&#239;&#240;&#255;&#230;&#229;&#237;&#232;&#255;, &#224; &#242;&#224;&#234;&#230;&#229; &#240;&#224;&#231; &#226; 24 &#247;&#224;&#241;&#224; &#232;&#235;&#232; &#239;&#238; &#237;&#224;&#230;&#224;&#242;&#232;&#254; &#234;&#238;&#239;&#234;&#232; &#241;&#238;&#245;&#240;&#224;&#237;&#229;&#237;&#232;&#255;*)
                bdstatus:=1;                        (*&#194;&#251;&#239;&#238;&#235;&#237;&#255;&#229;&#236; &#241;&#238;&#245;&#240;&#224;&#237;&#229;&#237;&#232;&#229;*)
    END_IF;
    
    CASE bdstatus OF
    1:    (*&#209;&#238;&#245;&#240;&#224;&#237;&#255;&#229;&#236; &#242;&#229;&#234;&#243;&#249;&#232;&#229; &#231;&#237;&#224;&#247;&#229;&#237;&#232;&#255; &#226; &#241;&#242;&#240;&#243;&#234;&#242;&#243;&#240;&#243; &#225;&#224;&#231;&#251; &#228;&#224;&#237;&#237;&#251;&#245;*)
    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;     (*&#209;&#238;&#245;&#240;&#224;&#237;&#229;&#237;&#232;&#229; &#228;&#224;&#237;&#237;&#251;&#245; &#226; &#244;&#224;&#233;&#235;*)
    
    2: (*&#199;&#224;&#239;&#232;&#241;&#252; &#241;&#242;&#240;&#243;&#234;&#242;&#243;&#240;&#251; &#243;&#241;&#242;&#224;&#226;&#238;&#234; &#226; &#244;&#224;&#233;&#235;*)
        file:=SysFileOpen('sets.bin', 'w');                                            (*&#206;&#242;&#234;&#240;&#251;&#226;&#224;&#229;&#236; &#244;&#224;&#233;&#235; &#228;&#235;&#255; &#231;&#224;&#239;&#232;&#241;&#232;, &#229;&#241;&#235;&#232; &#244;&#224;&#233;&#235;&#224; &#237;&#229;&#242;, &#242;&#238; &#241;&#238;&#231;&#228;&#224;&#229;&#242;&#241;&#255; &#237;&#238;&#226;&#251;&#233;*)
        IF file=0 THEN error_rwfile:=TRUE;                                         (*&#206;&#248;&#232;&#225;&#234;&#224; &#238;&#242;&#234;&#240;&#251;&#242;&#232;&#255;/&#241;&#238;&#231;&#228;&#224;&#237;&#232;&#255; &#244;&#224;&#233;&#235;&#224;*)
        RETURN;                                                                    (*&#194; &#253;&#242;&#238;&#236; &#241;&#235;&#243;&#247;&#224;&#229; &#239;&#251;&#242;&#224;&#229;&#236;&#241;&#255; &#238;&#242;&#234;&#240;&#251;&#242;&#252; &#244;&#224;&#233;&#235; &#239;&#238;&#226;&#242;&#238;&#240;&#237;&#238;*)
        ELSE
        wr_byte:=SysFileWrite(file,ADR(bdsave),SIZEOF(bdsave));                (*&#207;&#238;&#235;&#243;&#247;&#224;&#229;&#236; &#234;&#238;&#235;&#232;&#247;&#229;&#241;&#242;&#226;&#238; &#231;&#224;&#239;&#232;&#241;&#224;&#237;&#237;&#251;&#245; &#225;&#224;&#233;&#242;*)
            IF wr_byte=SIZEOF(bdsave) THEN                                    (*&#197;&#241;&#235;&#232; &#240;&#224;&#226;&#237;&#238; &#240;&#224;&#231;&#236;&#229;&#240;&#243; &#225;&#224;&#231;&#251; &#228;&#224;&#237;&#237;&#251;&#245;*)
            SysFileClose(file);                                                    (*&#199;&#224;&#234;&#240;&#251;&#226;&#224;&#229;&#236; &#244;&#224;&#233;&#235;*)
            bd.0:=SysFileClose(file);                                                (*&#212;&#235;&#224;&#227; - &#212;&#224;&#233;&#235; &#243;&#241;&#239;&#229;&#248;&#237;&#238; &#231;&#224;&#239;&#232;&#241;&#224;&#237; &#232; &#231;&#224;&#234;&#240;&#251;&#242;*)
            ELSE bd.1:=TRUE;                                                    (*&#212;&#235;&#224;&#227; - &#212;&#224;&#233;&#235; &#237;&#229; &#241;&#238;&#245;&#240;&#224;&#237;&#229;&#237;*)
            END_IF;
        END_IF;
        bdstatus:=0;                                                                (*&#199;&#224;&#239;&#232;&#241;&#252; &#238;&#234;&#238;&#237;&#247;&#229;&#237;&#224;*)
    
    3: (*&#215;&#242;&#229;&#237;&#232;&#229;*)
        file:=SysFileOpen('sets.bin', 'r');                                            (*&#206;&#242;&#234;&#240;&#251;&#242;&#232;&#229; &#244;&#224;&#233;&#235;&#224; &#228;&#235;&#255; &#247;&#242;&#229;&#237;&#232;&#255;*)
            IF file=0 THEN                                                            (*&#206;&#248;&#232;&#225;&#234;&#224; &#238;&#242;&#234;&#240;&#251;&#242;&#232;&#255; &#244;&#224;&#233;&#235;&#224; (&#244;&#224;&#233;&#235; &#237;&#229; &#241;&#243;&#249;&#229;&#241;&#242;&#226;&#243;&#229;&#242;)*)
                bd.2:=TRUE;                                                        (*&#212;&#235;&#224;&#227; - &#205;&#229; &#237;&#224;&#233;&#228;&#229;&#237; &#244;&#224;&#233;&#235; &#241; &#243;&#241;&#242;&#224;&#226;&#234;&#224;&#236;&#232;*)
                bdstatus:=5;                                                        (*&#207;&#229;&#240;&#229;&#245;&#238;&#228; &#237;&#224; &#231;&#224;&#226;&#238;&#228;&#241;&#234;&#232;&#229; &#237;&#224;&#241;&#242;&#240;&#238;&#233;&#234;&#232;*)
            ELSE
                rd_byte:=SysFileRead(file,ADR(buf_bdsave),SIZEOF(buf_bdsave));    (*&#209;&#247;&#232;&#242;&#251;&#226;&#224;&#229;&#236; &#228;&#224;&#237;&#237;&#251;&#229; &#232;&#231; &#244;&#224;&#233;&#235;&#224; &#226; &#241;&#242;&#240;&#243;&#234;&#242;&#243;&#240;&#243; (&#226; &#225;&#243;&#244;&#229;&#240;)*)
            IF SIZEOF(buf_bdsave)=rd_byte THEN                                        (*&#197;&#241;&#235;&#232; &#244;&#224;&#233;&#235; &#241;&#247;&#232;&#242;&#224;&#237;*)
                SysFileClose(file);                                                        (*&#199;&#224;&#234;&#240;&#251;&#226;&#224;&#229;&#236; &#244;&#224;&#233;&#235;*)
    (*            IF SysFileClose(file) THEN                                                (*&#212;&#224;&#233;&#235; &#243;&#241;&#239;&#229;&#248;&#237;&#238; &#231;&#224;&#234;&#240;&#251;&#242;*)*)
                    bdstatus:=4;                                                            (*&#197;&#241;&#235;&#232; &#244;&#224;&#233;&#235; &#232;&#231;&#226;&#235;&#229;&#247;&#229;&#237; - &#234;&#238;&#239;&#232;&#240;&#243;&#229;&#236; &#226; &#225;&#224;&#231;&#243;*)
                ELSE
                    bd.3:=TRUE;                                                            (*&#206;&#248;&#232;&#225;&#234;&#224; &#232;&#231;&#226;&#235;&#229;&#247;&#229;&#237;&#232;&#255; &#244;&#224;&#233;&#235;&#224;*)
                    bdstatus:=5;                                                            (*&#209;&#225;&#240;&#238;&#241; &#237;&#224; &#231;&#224;&#226;&#238;&#228;&#241;&#234;&#232;&#229; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#251;*)
                (*END_IF;*)
            END_IF;
            END_IF;
    
    4: (*&#209;&#238;&#245;&#240;&#224;&#237;&#255;&#229;&#236; &#225;&#243;&#244;&#229;&#240; &#226; &#242;&#229;&#234;&#243;&#249;&#243;&#254; &#241;&#242;&#240;&#243;&#234;&#242;&#243;&#240;&#243;*)
    bdsave:=buf_bdsave;
    bd.4:=TRUE;                                                                            (*&#205;&#224;&#241;&#242;&#240;&#238;&#233;&#234;&#232; &#243;&#241;&#239;&#229;&#248;&#237;&#238; &#241;&#238;&#245;&#240;&#224;&#237;&#229;&#237;&#251; *)
    bdstatus:=0;
    
    5: (*&#209;&#225;&#240;&#238;&#241; &#237;&#224; &#231;&#224;&#226;&#238;&#228;&#241;&#234;&#232;&#229; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#251;*)
    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]:=114555541;
    listNum[1]:=0;
    listNum[2]:=0;
    listNum[3]:=0;
    listNum[4]:=0;
    bdsave.listNum:=listNum;
    bd.5:=TRUE;                        (*&#205;&#224;&#241;&#242;&#240;&#238;&#233;&#234;&#232; &#241;&#225;&#240;&#238;&#248;&#229;&#237;&#251; &#237;&#224; &#231;&#224;&#226;&#238;&#228;&#241;&#234;&#232;&#229;*)
    bdstatus:=2;
    END_CASE
    
    IF bdsave.day_ust=0 THEN                            (*&#194; &#241;&#235;&#243;&#247;&#224;&#229; &#237;&#243;&#235;&#229;&#226;&#238;&#227;&#238; &#231;&#237;&#224;&#247;&#229;&#237;&#232;&#255; &#228;&#237;&#229;&#226;&#237;&#238;&#233; &#243;&#241;&#242;&#224;&#226;&#234;&#232;*)
    bdstatus:=5;                                    (*&#209;&#225;&#240;&#238;&#241; &#237;&#224; &#231;&#224;&#226;&#238;&#228;&#241;&#234;&#232;&#229; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#251;*)
    END_IF;
    
    IF bd.4 OR bd.5 THEN            (*&#197;&#241;&#235;&#232; &#237;&#224;&#241;&#242;&#240;&#238;&#233;&#234;&#232; &#241;&#225;&#240;&#238;&#248;&#229;&#237;&#251; &#237;&#224; &#231;&#224;&#226;&#238;&#228;&#241;&#234;&#232;&#229; &#232;&#235;&#232; &#243;&#241;&#239;&#229;&#248;&#237;&#238; &#232;&#231;&#226;&#235;&#229;&#247;&#229;&#237;&#251; &#232;&#231; &#244;&#224;&#233;&#235;&#224; - &#226;&#251;&#239;&#238;&#235;&#237;&#255;&#229;&#236; &#239;&#240;&#232;&#241;&#226;&#238;&#229;&#237;&#232;&#229; &#239;&#229;&#240;&#229;&#236;&#229;&#237;&#237;&#251;&#245;*)
    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                                    (*&#207;&#238;&#241;&#235;&#229; &#239;&#240;&#232;&#241;&#226;&#238;&#229;&#237;&#232;&#255; &#231;&#237;&#224;&#247;&#229;&#237;&#232;&#233; &#239;&#229;&#240;&#229;&#236;&#229;&#237;&#237;&#251;&#236;, &#238;&#242;&#239;&#240;&#224;&#226;&#235;&#255;&#229;&#236; &#232;&#245; &#237;&#224; &#239;&#224;&#237;&#229;&#235;&#252;*)
            p_hh:=hour;                            (*&#231;&#224;&#239;&#232;&#241;&#252; &#226; &#240;&#229;&#227;&#232;&#241;&#242;&#240;&#251; &#231;&#237;&#224;&#247;&#229;&#237;&#232;&#233; &#243;&#241;&#242;&#224;&#226;&#238;&#234; &#232; &#226;&#240;&#229;&#236;&#229;&#237;&#232; &#232;&#231; &#253;&#237;&#229;&#240;&#227;&#238;&#237;&#229;&#231;&#224;&#226;&#232;&#241;&#232;&#236;&#238;&#233; &#239;&#224;&#236;&#255;&#242;&#232;*)
            p_mm:=minute;
            p_ss:=second;
            p_dd:=day;
            p_mh:=month;
            p_yy:=year;
            p_hh_day:=hh_day;                    (*&#247;&#224;&#241;&#251; &#237;&#224;&#247;&#224;&#235;&#224; &#228;&#237;&#229;&#226;&#237;&#238;&#227;&#238; &#240;&#229;&#230;&#232;&#236;&#224;*)
            p_mm_day:=mm_day;                (*&#236;&#232;&#237;&#243;&#242;&#251; &#237;&#224;&#247;&#224;&#235;&#224; &#228;&#237;&#229;&#226;&#237;&#238;&#227;&#238; &#226;&#240;&#229;&#236;&#229;&#237;&#232;*)
            p_hh_night:=hh_night;                (*&#247;&#224;&#241;&#251; &#237;&#224;&#247;&#224;&#235;&#224; &#237;&#238;&#247;&#237;&#238;&#227;&#238; &#226;&#240;&#229;&#236;&#229;&#237;&#232;*)
            p_mm_night:=mm_night;                (*&#236;&#232;&#237;&#243;&#242;&#251; &#237;&#224;&#247;&#224;&#235;&#224; &#237;&#238;&#247;&#237;&#238;&#227;&#238; &#226;&#240;&#229;&#236;&#229;&#237;&#232;*)
            p_Pin:=Pin;                            (*&#226;&#245;&#238;&#228;&#237;&#238;&#229; &#228;&#224;&#226;&#235;&#229;&#237;&#232;&#229;*)
            p_Pout:=Pfact;                            (*&#226;&#251;&#245;&#238;&#228;&#237;&#238;&#229; &#228;&#224;&#226;&#235;&#229;&#237;&#232;&#229;*)
            p_day_ust:=day_ust;                    (*&#228;&#237;&#229;&#226;&#237;&#224;&#255; &#243;&#241;&#242;&#224;&#226;&#234;&#224; &#228;&#224;&#226;&#235;&#229;&#237;&#232;&#255;*)
            p_night_ust:=night_ust;                (*&#237;&#238;&#247;&#237;&#224;&#255; &#243;&#241;&#242;&#224;&#226;&#234;&#224; &#228;&#224;&#226;&#235;&#229;&#237;&#232;&#255;*)
            p_pid_ust:=pid_ust;                    (*&#226;&#251;&#245;&#238;&#228; &#226; &#226;&#238;&#235;&#252;&#242;&#224;&#245; &#241;&#232;&#227;&#237;&#224;&#235;&#224; &#243;&#239;&#240;&#224;&#226;&#235;&#229;&#237;&#232;&#255; &#241; &#240;&#229;&#227;&#243;&#235;&#255;&#242;&#238;&#240;&#224; &#239;&#240;&#232; &#237;&#229;&#232;&#241;&#239;&#240;&#224;&#226;&#237;&#238;&#241;&#242;&#232; &#196;&#196;&#226;&#251;&#245;.*)
            p_ddvh_off:=ddvh_off;                    (*&#232;&#241;&#234;&#235;&#254;&#247;&#229;&#237;&#232;&#229; &#226;&#245;&#238;&#228;&#237;&#238;&#227;&#238; &#196;&#196; &#232;&#231; &#224;&#226;&#224;&#240;&#232;&#233;&#237;&#238;&#227;&#238; &#238;&#239;&#238;&#226;&#229;&#249;&#229;&#237;&#232;&#255;*)
            p_ddvyh_max:=ddvyh_max;            (*&#236;&#224;&#234;&#241;&#232;&#236;&#224;&#235;&#252;&#237;&#238;&#229; &#231;&#237;&#224;&#247;&#229;&#237;&#232;&#229; &#226;&#251;&#245;&#238;&#228;&#237;&#238;&#227;&#238; &#228;&#224;&#242;&#247;&#232;&#234;&#224; &#228;&#224;&#226;&#235;&#229;&#237;&#232;&#255;*)
            p_ddvh_max:=ddvh_max;                (*&#236;&#224;&#234;&#241;&#232;&#236;&#224;&#235;&#252;&#237;&#238;&#229; &#231;&#237;&#224;&#247;&#229;&#237;&#232;&#229; &#226;&#245;&#238;&#228;&#237;&#238;&#227;&#238; &#228;&#224;&#242;&#247;&#232;&#234;&#224; &#228;&#224;&#226;&#235;&#229;&#237;&#232;&#255;*)
            p_Kp:=Kp;                                (*&#207;&#240;&#238;&#239;&#238;&#240;&#246;&#232;&#238;&#237;&#224;&#235;&#252;&#237;&#251;&#233; &#234;&#238;&#253;&#244;&#244;&#232;&#246;&#232;&#229;&#237;&#242; &#207;&#200;&#196;-&#240;&#229;&#227;&#243;&#235;&#255;&#242;&#238;&#240;&#224;*)
            p_Ti:=Ti;                                (*&#200;&#237;&#242;&#229;&#227;&#240;&#224;&#235;&#252;&#237;&#251;&#233; &#234;&#238;&#253;&#244;&#244;&#232;&#246;&#232;&#229;&#237;&#242; &#207;&#200;&#196;-&#240;&#229;&#227;&#243;&#235;&#255;&#242;&#238;&#240;&#224;*)
            p_count_num:=BYTE_TO_WORD(count_num);                        (*&#202;&#238;&#235;&#232;&#247;&#229;&#241;&#242;&#226;&#238; &#237;&#238;&#236;&#229;&#240;&#238;&#226;, &#237;&#224; &#234;&#238;&#242;&#238;&#240;&#238;&#229; &#237;&#243;&#230;&#237;&#238; &#238;&#242;&#239;&#240;&#224;&#226;&#232;&#242;&#252; &#224;&#226;&#224;&#240;&#232;&#233;&#237;&#251;&#229; &#241;&#238;&#238;&#225;&#249;&#229;&#237;&#232;&#255;*)
            p_sbros:=sbros;                        (*&#209;&#225;&#240;&#238;&#241; &#224;&#226;&#224;&#240;&#232;&#232; &#207;&#215; &#240;&#224;&#231;&#240;&#229;&#248;&#229;&#237;*)
            p_t_sbros:=t_sbros;                    (*&#199;&#224;&#228;&#229;&#240;&#230;&#234;&#224; &#226;&#240;&#229;&#236;&#229;&#237;&#232; &#239;&#229;&#240;&#229;&#228; &#241;&#225;&#240;&#238;&#241;&#238;&#236; &#224;&#226;&#224;&#240;&#232;&#232; &#207;&#215;*)
            p_sbros_max:=sbros_max;            (*&#204;&#224;&#234;&#241;&#232;&#236;&#224;&#235;&#252;&#237;&#238;&#229; &#234;&#238;&#235;&#232;&#247;&#229;&#241;&#242;&#226;&#238; &#239;&#238;&#239;&#251;&#242;&#238;&#234; &#241;&#225;&#240;&#238;&#241;&#224; &#224;&#226;&#224;&#240;&#232;&#232; &#207;&#215;*)
            p_sbros_count:=sbros_count;        (*&#202;&#238;&#235;&#232;&#247;&#229;&#241;&#242;&#226;&#238; &#239;&#238;&#239;&#251;&#242;&#238;&#234; &#241;&#225;&#240;&#238;&#241;&#224; &#224;&#226;&#224;&#240;&#232;&#232;*)
            p_ntp_yes:=ntp_yes;                    (*&#208;&#224;&#231;&#240;&#229;&#248;&#229;&#237;&#232;&#229; &#241;&#232;&#237;&#245;&#240;&#238;&#237;&#232;&#231;&#224;&#246;&#232;&#232; &#226;&#240;&#229;&#236;&#229;&#237;&#232; &#239;&#238; &#232;&#237;&#242;&#229;&#240;&#237;&#229;&#242;*)
            p_gmt:=gmt;                            (*&#215;&#224;&#241;&#238;&#226;&#238;&#233; &#239;&#238;&#255;&#241;*)
            phone_num1:=listNum[0];            (*&#207;&#240;&#232;&#241;&#226;&#238;&#229;&#237;&#232;&#229; &#239;&#229;&#240;&#226;&#238;&#227;&#238; &#242;&#229;&#235;&#229;&#244;&#238;&#237;&#237;&#238;&#227;&#238; &#237;&#238;&#236;&#229;&#240;&#224;*)
            phone_num2:=listNum[1];            (*&#207;&#240;&#232;&#241;&#226;&#238;&#229;&#237;&#232;&#229; &#226;&#242;&#238;&#240;&#238;&#227;&#238; &#242;&#229;&#235;&#229;&#244;&#238;&#237;&#237;&#238;&#227;&#238; &#237;&#238;&#236;&#229;&#240;&#224;*)
            phone_num3:=listNum[2];            (*&#207;&#240;&#232;&#241;&#226;&#238;&#229;&#237;&#232;&#229; &#242;&#240;&#229;&#242;&#252;&#229;&#227;&#238; &#242;&#229;&#235;&#229;&#244;&#238;&#237;&#237;&#238;&#227;&#238; &#237;&#238;&#236;&#229;&#240;&#224;*)
            phone_num4:=listNum[3];            (*&#207;&#240;&#232;&#241;&#226;&#238;&#229;&#237;&#232;&#229; &#247;&#229;&#242;&#226;&#229;&#240;&#242;&#238;&#227;&#238; &#242;&#229;&#235;&#229;&#244;&#238;&#237;&#237;&#238;&#227;&#238; &#237;&#238;&#236;&#229;&#240;&#224;*)
            phone_num5:=listNum[4];            (*&#207;&#240;&#232;&#241;&#226;&#238;&#229;&#237;&#232;&#229; &#239;&#255;&#242;&#238;&#227;&#238; &#242;&#229;&#235;&#229;&#244;&#238;&#237;&#237;&#238;&#227;&#238; &#237;&#238;&#236;&#229;&#240;&#224;*)
            bd:=0;
    END_IF;
    
    IF NOT pow THEN                        (*&#229;&#241;&#235;&#232; &#239;&#240;&#238;&#232;&#231;&#238;&#248;&#235;&#238; &#238;&#242;&#234;&#235;&#254;&#247;&#229;&#237;&#232;&#229; &#239;&#232;&#242;&#224;&#237;&#232;&#255;*)
        strt_plc:=TRUE;                        (*&#226;&#251;&#241;&#242;&#224;&#226;&#235;&#255;&#229;&#236; &#244;&#235;&#224;&#227; &#238;&#242;&#234;&#235;&#254;&#247;&#229;&#237;&#232;&#255; &#239;&#232;&#242;&#224;&#237;&#232;&#255;*)
    END_IF;
    siz:=SIZEOF(bdsave);                            (*&#208;&#224;&#231;&#236;&#229;&#240; &#225;&#224;&#231;&#251; &#228;&#224;&#237;&#237;&#251;&#245;*)
    siz_buf:=SIZEOF(buf_bdsave);
    Коментарии очень помогли понять Ваш алгоритм
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  2. #12

    По умолчанию

    Да,капец, как раз сижу пытаюсь их сконвертировать

  3. #13

    По умолчанию

    Проще наверное так
    test_arh_avar_2.pro

  4. #14
    Пользователь
    Регистрация
    05.11.2011
    Адрес
    Томск
    Сообщений
    192

    По умолчанию

    http://www.artlebedev.ru/tools/decoder/
    Пользуйтесь на здоровье

  5. #15

    По умолчанию

    Цитата Сообщение от Amko Посмотреть сообщение
    http://www.artlebedev.ru/tools/decoder/
    Пользуйтесь на здоровье
    Супер, спасибо

  6. #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.

  7. #17

    По умолчанию

    Всё, нашел

Страница 2 из 2 ПерваяПервая 12

Похожие темы

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

Ваши права

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