test

Dependencies:  

SAVE_CONT.cpp

Committer:
js
Date:
24 months ago
Revision:
3:8e445135859e
Parent:
2:71b3736a1bd7

File content as of revision 3:8e445135859e:

#include "mbed.h"
#include "main.h"
#include "nextion_lcd.h"
#include "APP.h"
#include "FATFileSystem.h"
#include "SAVE_CONT.h"
#include "WD_CONT.h"
// File system declaration
extern FATFileSystem   fileSystem;

FILE* fd;
double RB1_POINT_RD[32][4];
char RB1_point_wr_data[256];
char RB1_point_rd_data[4096];
char RB1_point_txt[32][64];
unsigned char RB1_POINT_NO_CNT=0;

double RB2_POINT_RD[32][4];
char RB2_point_wr_data[256];
char RB2_point_rd_data[4096];
char RB2_point_txt[32][64];
unsigned char RB2_POINT_NO_CNT=0;

unsigned long wr_size=0;
unsigned long rd_size=0;

//////
char config_dat[64];
char config_save_dat[64];

///ニッケル端子///
unsigned long C1_RD_50MM =0;
unsigned long C1_RD_32MM =0;
unsigned long C1_RD_23MM =0;

unsigned long  C1_WR_50MM =0;
unsigned long  C1_WR_32MM =0;
unsigned long  C1_WR_23MM =0;

double  C1_SET_50MM =0;
double  C1_SET_32MM =0;
double  C1_SET_23MM =0;

unsigned long C2_RD_50MM =0;
unsigned long C2_RD_32MM =0;
unsigned long C2_RD_23MM =0;

unsigned long  C2_WR_50MM =0;
unsigned long  C2_WR_32MM =0;
unsigned long  C2_WR_23MM =0;

double  C2_SET_50MM =0;
double  C2_SET_32MM =0;
double  C2_SET_23MM =0;

unsigned long RB1_p_cnt=0;
unsigned long RB2_p_cnt=0;

char file_name[32];
unsigned char date_chk=0;    
//ファイルサイズを取得////
long GetFileSize(const char *file)
{
   long size=0;
    FILE*   f = fopen(file, "r+");
    if(!f){
        printf("seize get ng\r\n");
        return -1L;
    }else{
        fseek(f, 0, SEEK_END); // seek to end of file
        size = ftell(f);       // get current file pointer
        fseek(f, 0, SEEK_SET); // seek back to beginning of file  
        fclose(f);
        //sprintf(pc_print_buf,"size=%d\r\n",size);
        //pc_printf(pc_print_buf);
        return  size;
    }
}

uint32_t utf_sjis_cnv(uint32_t utf_code){
    unsigned long sjis_add=0;
    unsigned short  sjis_code=0;
    unsigned char rdat[2];
    fd = fopen("/fs/system/utf_sjis.bin", "r");//r:読み込みようとしてファイルを開きます
    if (fd) {
        if(utf_code>=0 && utf_code<=0xF19F){
            sjis_add=utf_code*2;        
            fseek(fd, sjis_add, SEEK_SET);
            fread(rdat, 1,2,fd);
            sjis_code=rdat[0]<<8;
            sjis_code|=rdat[1];
        }else{
            sjis_add=(utf_code-0xE28000)*2+0x20000;     
            fseek(fd, sjis_add, SEEK_SET);
            fread(rdat, 1,2,fd);
            sjis_code=rdat[0]<<8;
            sjis_code|=rdat[1];         
        }
        fclose(fd); 
    }
    //pc.printf("sjis code:%x\r\n",sjis_code);
    return sjis_code;
}


//utfコードに対するsjisコードを返す(文章)
void  utf_to_sjis(char *utf_str ,char *sjis_str){
 
  const char* p = utf_str;
  uint8_t ch0,ch1,ch2;
  uint16_t draw_cnt=0;
  uint16_t draw_cnt_max=strlen(utf_str);
  char sjis_buf[3];
  uint32_t utf_code=0;
  uint16_t buf_cnt=0;
  sjis_buf[0]=0;
  sjis_buf[1]=0;
  sjis_buf[2]=0;
 // pc_printf(utf_str);
 // pc_printf("draw_cnt_max=%d\r\n",draw_cnt_max);
    while(draw_cnt<draw_cnt_max){
        utf_code=0;
        sjis_buf[0]=sjis_buf[1]=sjis_buf[2]=0;
        ch0 = (uint8_t)*p++;
        if(ch0 != 0){ 
            if(ch0 <=0x7E ){
                sjis_str[buf_cnt++]=ch0;
            }else{
                ch1 = (uint8_t)*p++;
                ch2 = (uint8_t)*p++;
                if(ch2>0x7F && ch2 < 0xE2){
                    utf_code = ch0<<16;
                    utf_code |= ch1<<8;
                    utf_code |= ch2;
                    sjis_str[buf_cnt++]=utf_sjis_cnv(utf_code)>>8;
                    sjis_str[buf_cnt++]=utf_sjis_cnv(utf_code);
                }else{
                    (uint8_t)*p--;
                    utf_code = ch0<<8;
                    utf_code |= ch1;
                    sjis_str[buf_cnt++]=utf_sjis_cnv(utf_code)>>8;
                    sjis_str[buf_cnt++]=utf_sjis_cnv(utf_code);
                }
            }
        }else{
          break;
        }
    }
     sjis_str[buf_cnt]=NULL;//null終端
    /*for(unsigned char chk=0 ; chk<buf_cnt ; chk++){
        pc_printf("sjis[%d]=%x\r\n",chk,sjis_str[chk]);   
    }*/
    sjis_str[buf_cnt]=NULL;

}

///ログ記録用csvファイルの先頭に見出しを付ける
void ALM_SAVE_HEAD(void){

    char head_data[256];
    char *Text_Out = "年,月,日,時間,分,秒,ALM要因";
    char head_size=0;
    utf_to_sjis(Text_Out ,head_data);
    head_size=strlen(head_data);//s-jis文字列の長さを調べる
    head_data[head_size]=0x0d;//CR
    head_data[head_size+1]=0x0a;//LF

   ///単セル:日毎のファイル///
    fd = fopen(file_name, "a+");//a+:読み込み/書き込みモードの両方のモードで開きます(ファイルが存在する場合は追加、ない場合は作成します)
    if(!fd){
        printf("savefile open ng!!\r\n");
        ALM_ST= ALM_SD;
        ALM_HOLD_SET();
   }else{
        fwrite(&head_data, 1, head_size+2, fd);
        fclose(fd);
    }
    
}
void ALM_INFO_SAVE(){
    char ALM_INFO_DATA[256];
    char save_data[256];
    char *Text_Out = "";
    unsigned char len=0;//文字の長さを格納
    RTC_GET();
    if(date_chk !=rtc_date){//日付が変わったか確認する。
        date_chk =rtc_date;
        sprintf(file_name,"/fs/ALM_LOG/%04d%02d.csv",rtc_year,rtc_month);
        fd = fopen(file_name, "r");//r:読み込みようとしてファイルを開きます
        if(!fd){//ファイルが開けない場合は新規にヘッダをつけてファイル生成        
            ALM_SAVE_HEAD();
        } 
    }
   
    switch (ALM_ST) {
    
    case ALM_PS1_HM :
                        Text_Out="加圧軸1_原点復帰タイムアウト"; 
                        break; 
    case ALM_PS1_ST :
                        Text_Out="加圧軸1_移動開始タイムアウト"; 
                        break;
    case ALM_PS1_ED :
                        Text_Out="加圧軸1_移動完了タイムアウト";
                        break; 
    case ALM_PS2_HM :
                        Text_Out="加圧軸2_原点復帰タイムアウト"; 
                        break;
    case ALM_PS2_ST :
                        Text_Out="加圧軸2_移動開始タイムアウト"; 
                        break; 
    case ALM_PS2_ED  :
                        Text_Out="加圧軸2_移動完了タイムアウト";
                        break;
    case ALM_NISP1_HM:
                        Text_Out="ニッケル搬送軸1_原点復帰タイムアウト"; 
                        break; 
    case ALM_NISP1_ST:
                        Text_Out="ニッケル搬送軸1_移動開始タイムアウト"; 
                        break;   
    case ALM_NISP1_ED:
                        Text_Out="ニッケル搬送軸1_移動完了タイムアウト";
                        break; 
    case ALM_NISP2_HM:
                        Text_Out="ニッケル搬送軸2_原点復帰タイムアウト"; 
                        break;
    case ALM_NISP2_ST:
                        Text_Out="ニッケル搬送軸2_移動開始タイムアウト"; 
                        break; 
    case ALM_NISP2_ED:
                        Text_Out="ニッケル搬送軸2_移動完了タイムアウト";
                        break;
    case ALM_DISP_HM :
                        Text_Out="ダイオード搬送軸_原点復帰タイムアウト"; 
                        break; 
    case ALM_DISP_ST :
                        Text_Out="ダイオード搬送軸_移動開始タイムアウト"; 
                        break;
    case ALM_DISP_ED :
                        Text_Out="ダイオード搬送軸_移動完了タイムアウト";
                        break; 
    case ALM_DOBOT1 :
                        Text_Out="ロボット1_ステータス異常検出"; 
                        break; 
    case ALM_DOBOT1_ST:
                        Text_Out="ロボット1_移動開始タイムアウト"; 
                        break;
    case ALM_DOBOT1_ED:
                        Text_Out="ロボット1_移動完了タイムアウト";
                        break; 
    case ALM_DOBOT1_CM:
                        Text_Out="ロボット1_コマンド送信失敗";
                        break;
    case ALM_DOBOT2 :
                        Text_Out="ロボット2_ステータス異常検出"; 
                        break; 
    case ALM_DOBOT2_ST:
                        Text_Out="ロボット2_移動開始タイムアウト"; 
                        break;
    case ALM_DOBOT2_ED:
                        Text_Out="ロボット2_移動完了タイムアウト";
                        break; 
    case ALM_DOBOT2_CM:
                        Text_Out="ロボット2_コマンド送信失敗";
                        break;
    case ALM_DOBOT12:
                        Text_Out="ロボット1、2_ステータス異常検出";//同時検出の場合
                        break;   
    case ALM_DOBOT12_ST:
                        Text_Out="ロボット1、2_移動開始タイムアウト";//同時検出の場合
                        break; 
    case ALM_DOBOT12_ED:
                        Text_Out="ロボット1、2_移動完了タイムアウト";//同時検出の場合
                        break;
    case ALM_WDENG_1:
                        Text_Out="溶接機1エンド信号受信タイムアウト"; 
                        break; 
    case ALM_WDENG_2 :
                        Text_Out="溶接機2エンド信号受信タイムアウト"; 
                        break;
    case ALM_WDENG_12  :
                        Text_Out="溶接機1、2エンド信号受信タイムアウト";//同時検出の場合 
                        break; 
    case ALM_SD :
                        Text_Out="SDカードアクセス異常";///保存できないと思うが.. 
                        break;


    }
  ///UTF8の日本語をS-JISに変換する/////
    utf_to_sjis(Text_Out ,ALM_INFO_DATA);
    sprintf(save_data,"%04d,%02d,%02d,%02d,%02d,%02d,%s\r\n",rtc_year,rtc_month,rtc_date,rtc_hour,rtc_min,rtc_sec,ALM_INFO_DATA);
    len=strlen(save_data);//文字列の長さを確認  

    
   fd = fopen(file_name, "r+");//r+:既存ファイルを対象に、読み込み/書き込みの両方のモードで開きます
   if(!fd){
        printf("savefile open ng!!\r\n");
        ALM_ST= ALM_SD;
        ALM_HOLD_SET();
   }else{
        fseek(fd, 0, SEEK_END);
        fwrite(&save_data, 1, len, fd);   
        fclose(fd);
        
    }       
  
    /////画面表示///////////////////
    lcd_print("t0",Text_Out);
      /////生産数表示////////////////////
    sprintf(lcd_print_buf,"%03d",PD_CNT_A);
    lcd_print("t2",lcd_print_buf);
    sprintf(lcd_print_buf,"%03d",PD_CNT_C);
    lcd_print("t3",lcd_print_buf);
    
     /////////////極棒交換打点数表示///////////
    sprintf(lcd_print_buf,"%04d",WD1H_CHG_CNT);//左4mm
    lcd_print("t4",lcd_print_buf);
    sprintf(lcd_print_buf,"%04d",WD2H_CHG_CNT);
    lcd_print("t5",lcd_print_buf);
    sprintf(lcd_print_buf,"%04d",WD2R_CHG_CNT);
    lcd_print("t6",lcd_print_buf);
    
    ////////音声鳴動///
    if(ALM_ST>=ALM_DOBOT1 && ALM_ST<=ALM_DOBOT12_ED){
         //ロボットトラブル発生音声
        lcd_audio_play(AU_ROBO_ALM,0,80);     
    }else{
        ///その他 異常が発生しました音声///
        lcd_audio_play(AU_ALM,0,80); 
        ///ロボット異常以外で停止の場合、ロボット強制停止///
       // RB1_EMG_STOP();
       // RB2_EMG_STOP();
    }
              
        
}

void RB1_LIST_READ(){
    char r_buf[128];
    unsigned long dat_cnt=0;
    unsigned long cb_txt_cnt=0;
    unsigned char cp_cnt=0;
    unsigned char HEAD_SKIP=1;
    unsigned long OPEN_SIZE=GetFileSize("/fs/system/RB1_PLIST.csv");
    RB1_POINT_NO_CNT=0;
    
    //printf("open size=%d\r\n",OPEN_SIZE);
    fd = fopen("/fs/system/RB1_PLIST.csv","r");//r:既存ファイルを対象に、読み込みモードで開きます
    if(!fd){
        ALM_ST= ALM_SD;
        ALM_HOLD_SET();
    }else{ 
        fread(RB1_point_rd_data, 1,OPEN_SIZE,fd);  
        dat_cnt++; 
        ////最初のポイントNo部を飛ばす/////
        while(dat_cnt<OPEN_SIZE){//
            while(dat_cnt<OPEN_SIZE && RB1_point_rd_data[dat_cnt]!=0x2c){
                  dat_cnt++;
            }
            dat_cnt++;//カンマを飛ばす
            ////////////////////X DATA////////////////////
            cp_cnt=0;
            while(dat_cnt<OPEN_SIZE && RB1_point_rd_data[dat_cnt]!=0x2c){
                r_buf[cp_cnt]=RB1_point_rd_data[dat_cnt];
                dat_cnt++;
                cp_cnt++;
            }
            r_buf[cp_cnt]=NULL;
            dat_cnt++;//カンマを飛ばす
            if(dat_cnt<OPEN_SIZE && HEAD_SKIP==0){
                RB1_POINT_RD[RB1_POINT_NO_CNT][PX] =atof(r_buf);
            } 
            //////////////////Y DATA///////////////////   
            cp_cnt=0;
            while(dat_cnt<OPEN_SIZE && RB1_point_rd_data[dat_cnt]!=0x2c){
                r_buf[cp_cnt]=RB1_point_rd_data[dat_cnt];
                dat_cnt++;
                cp_cnt++;
            }
            r_buf[cp_cnt]=NULL;
            dat_cnt++;//カンマを飛ばす
            if(dat_cnt<OPEN_SIZE && HEAD_SKIP==0){
                RB1_POINT_RD[RB1_POINT_NO_CNT][PY] =atof(r_buf);   
            }
            //printf("PY =%f\r\n",RB1_POINT_RD[RB1_POINT_NO_CNT][PY]);
            //////////////////Z DATA///////////////////   
            cp_cnt=0;
            while(dat_cnt<OPEN_SIZE && RB1_point_rd_data[dat_cnt]!=0x2c){
                r_buf[cp_cnt]=RB1_point_rd_data[dat_cnt];
                dat_cnt++;
                cp_cnt++;
            }
            r_buf[cp_cnt]=NULL;
            dat_cnt++;//カンマを飛ばす
            if(dat_cnt<OPEN_SIZE && HEAD_SKIP==0){
                RB1_POINT_RD[RB1_POINT_NO_CNT][PZ] =atof(r_buf);   
            }
            
            
             //////////////////R DATA///////////////////   
            cp_cnt=0;
            while(dat_cnt<OPEN_SIZE && RB1_point_rd_data[dat_cnt]!=0x2c){
                r_buf[cp_cnt]=RB1_point_rd_data[dat_cnt];
                dat_cnt++;
                cp_cnt++;
            }
            r_buf[cp_cnt]=NULL;
            dat_cnt++;//カンマを飛ばす
            if(dat_cnt<OPEN_SIZE && HEAD_SKIP==0){
                RB1_POINT_RD[RB1_POINT_NO_CNT][PR] =atof(r_buf);   
     
            }
            
           // printf("PZ =%f\r\n",RB1_POINT_RD[RB1_POINT_NO_CNT][PZ]);
             //////////////////txt DATA ////   
            cp_cnt=0;
            while(dat_cnt<OPEN_SIZE && RB1_point_rd_data[dat_cnt]!=0x0a){
                if(HEAD_SKIP==0){
                    RB1_point_txt[RB1_POINT_NO_CNT][cp_cnt]=RB1_point_rd_data[dat_cnt];
                    cp_cnt++;
                }
                dat_cnt++;    
            }

           
            if(dat_cnt<OPEN_SIZE && HEAD_SKIP==0){
                RB1_point_txt[RB1_POINT_NO_CNT][cp_cnt-1]=NULL;
                RB1_point_txt[RB1_POINT_NO_CNT][cp_cnt]=NULL;
                //printf("RB1_POINT[%02d] : X:%f Y:%f Z:%f R:%f :%s\r\n",RB1_POINT_NO_CNT,RB1_POINT_RD[RB1_POINT_NO_CNT][PX],RB1_POINT_RD[RB1_POINT_NO_CNT][PY],RB1_POINT_RD[RB1_POINT_NO_CNT][PZ],RB1_POINT_RD[RB1_POINT_NO_CNT][PR],RB1_point_txt[RB1_POINT_NO_CNT]);  
                RB1_POINT_NO_CNT++;
            }
            HEAD_SKIP=0;            
         
        }
        fclose(fd);
    }  
    //printf("dat_cnt=%d OPEN_SIZE=%d\r\n",dat_cnt,OPEN_SIZE);


}

void RB1_LIST_WRITE(){
    fd = fopen("/fs/system/RB1_PLIST.csv", "w+");//w+:上書きモードでファイルを書き込み(存在しない場合は、ファイル作成)
     if(!fd){
        ALM_ST= ALM_SD;
        ALM_HOLD_SET();
   }else{ 
        ////ヘッダ部保存////
        sprintf(RB1_point_wr_data,"No,X,Y,Z,R,Location Name\r\n");
        wr_size=strlen(RB1_point_wr_data);//文字列の長さを調べる   
        fwrite(&RB1_point_wr_data, 1, wr_size, fd);  
        ///ポイントデータ保存////  
        unsigned char wcnt=0;
        for(wcnt=0; wcnt<RB1_POINT_NO_CNT; wcnt++){ 
            sprintf(RB1_point_wr_data,"%02d,%lf,%lf,%lf,%lf,%s\r\n",wcnt,RB1_POINT_RD[wcnt][PX],RB1_POINT_RD[wcnt][PY],RB1_POINT_RD[wcnt][PZ],RB1_POINT_RD[wcnt][PR],RB1_point_txt[wcnt]);
            wr_size=strlen(RB1_point_wr_data);//文字列の長さを調べる
            //fseek(fd, 0, SEEK_END);
            fwrite(&RB1_point_wr_data, 1, wr_size, fd);
        }
        //printf("WRITE CNT=%d\r\n",wcnt);
        fclose(fd);
   }
}


///////////////////ROBO2////////////////////////////////////

void RB2_LIST_READ(){
    char r_buf[128];
    unsigned long dat_cnt=0;
    unsigned long cb_txt_cnt=0;
    unsigned char cp_cnt=0;
    unsigned char HEAD_SKIP=1;
    unsigned long OPEN_SIZE=GetFileSize("/fs/system/RB2_PLIST.csv");
    RB2_POINT_NO_CNT=0;
    
    //printf("open size=%d\r\n",OPEN_SIZE);
    fd = fopen("/fs/system/RB2_PLIST.csv","r");//r:既存ファイルを対象に、読み込みモードで開きます
    if(!fd){
        ALM_ST= ALM_SD;
        ALM_HOLD_SET();
    }else{ 
        fread(RB2_point_rd_data, 1,OPEN_SIZE,fd);  
        dat_cnt++; 
        ////最初のポイントNo部を飛ばす/////
        while(dat_cnt<OPEN_SIZE){//
            while(dat_cnt<OPEN_SIZE && RB2_point_rd_data[dat_cnt]!=0x2c){
                  dat_cnt++;
            }
            dat_cnt++;//カンマを飛ばす
            ////////////////////X DATA////////////////////
            cp_cnt=0;
            while(dat_cnt<OPEN_SIZE && RB2_point_rd_data[dat_cnt]!=0x2c){
                r_buf[cp_cnt]=RB2_point_rd_data[dat_cnt];
                dat_cnt++;
                cp_cnt++;
            }
            r_buf[cp_cnt]=NULL;
            dat_cnt++;//カンマを飛ばす
            if(dat_cnt<OPEN_SIZE && HEAD_SKIP==0){
                RB2_POINT_RD[RB2_POINT_NO_CNT][PX] =atof(r_buf);
            } 
            //////////////////Y DATA///////////////////   
            cp_cnt=0;
            while(dat_cnt<OPEN_SIZE && RB2_point_rd_data[dat_cnt]!=0x2c){
                r_buf[cp_cnt]=RB2_point_rd_data[dat_cnt];
                dat_cnt++;
                cp_cnt++;
            }
            r_buf[cp_cnt]=NULL;
            dat_cnt++;//カンマを飛ばす
            if(dat_cnt<OPEN_SIZE && HEAD_SKIP==0){
                RB2_POINT_RD[RB2_POINT_NO_CNT][PY] =atof(r_buf);   
            }
            //printf("PY =%f\r\n",RB2_POINT_RD[RB2_POINT_NO_CNT][PY]);
            //////////////////Z DATA///////////////////   
            cp_cnt=0;
            while(dat_cnt<OPEN_SIZE && RB2_point_rd_data[dat_cnt]!=0x2c){
                r_buf[cp_cnt]=RB2_point_rd_data[dat_cnt];
                dat_cnt++;
                cp_cnt++;
            }
            r_buf[cp_cnt]=NULL;
            dat_cnt++;//カンマを飛ばす
            if(dat_cnt<OPEN_SIZE && HEAD_SKIP==0){
                RB2_POINT_RD[RB2_POINT_NO_CNT][PZ] =atof(r_buf);   
            }
            
            
             //////////////////R DATA///////////////////   
            cp_cnt=0;
            while(dat_cnt<OPEN_SIZE && RB2_point_rd_data[dat_cnt]!=0x2c){
                r_buf[cp_cnt]=RB2_point_rd_data[dat_cnt];
                dat_cnt++;
                cp_cnt++;
            }
            r_buf[cp_cnt]=NULL;
            dat_cnt++;//カンマを飛ばす
            if(dat_cnt<OPEN_SIZE && HEAD_SKIP==0){
                RB2_POINT_RD[RB2_POINT_NO_CNT][PR] =atof(r_buf);   
     
            }
            
           // printf("PZ =%f\r\n",RB2_POINT_RD[RB2_POINT_NO_CNT][PZ]);
             //////////////////txt DATA ////   
            cp_cnt=0;
            while(dat_cnt<OPEN_SIZE && RB2_point_rd_data[dat_cnt]!=0x0a){
                if(HEAD_SKIP==0){
                    RB2_point_txt[RB2_POINT_NO_CNT][cp_cnt]=RB2_point_rd_data[dat_cnt];
                    cp_cnt++;
                }
                dat_cnt++;    
            }

           
            if(dat_cnt<OPEN_SIZE && HEAD_SKIP==0){
                RB2_point_txt[RB2_POINT_NO_CNT][cp_cnt-1]=NULL;
                RB2_point_txt[RB2_POINT_NO_CNT][cp_cnt]=NULL;
                //printf("RB2_POINT[%02d] : X:%f Y:%f Z:%f R:%f :%s\r\n",RB2_POINT_NO_CNT,RB2_POINT_RD[RB2_POINT_NO_CNT][PX],RB2_POINT_RD[RB2_POINT_NO_CNT][PY],RB2_POINT_RD[RB2_POINT_NO_CNT][PZ],RB2_POINT_RD[RB2_POINT_NO_CNT][PR],RB2_point_txt[RB2_POINT_NO_CNT]);  
                RB2_POINT_NO_CNT++;
            }
            HEAD_SKIP=0;            
         
        }
        fclose(fd);
    }  
    //printf("dat_cnt=%d OPEN_SIZE=%d\r\n",dat_cnt,OPEN_SIZE);

}


void RB2_LIST_WRITE(){
    fd = fopen("/fs/system/RB2_PLIST.csv", "w+");//w+:上書きモードでファイルを書き込み(存在しない場合は、ファイル作成)
     if(!fd){
        ALM_ST= ALM_SD;
        ALM_HOLD_SET();
   }else{ 
        ////ヘッダ部保存////
        sprintf(RB2_point_wr_data,"No,X,Y,Z,R,Location Name\r\n");
        wr_size=strlen(RB2_point_wr_data);//文字列の長さを調べる   
        fwrite(&RB2_point_wr_data, 1, wr_size, fd);  
        ///ポイントデータ保存////  
        unsigned char wcnt=0;
        for(wcnt=0; wcnt<RB2_POINT_NO_CNT; wcnt++){ 
            sprintf(RB2_point_wr_data,"%02d,%lf,%lf,%lf,%lf,%s\r\n",wcnt,RB2_POINT_RD[wcnt][PX],RB2_POINT_RD[wcnt][PY],RB2_POINT_RD[wcnt][PZ],RB2_POINT_RD[wcnt][PR],RB2_point_txt[wcnt]);
            wr_size=strlen(RB2_point_wr_data);//文字列の長さを調べる
            //fseek(fd, 0, SEEK_END);
            fwrite(&RB2_point_wr_data, 1, wr_size, fd);
        }
        //printf("WRITE CNT=%d\r\n",wcnt);
        fclose(fd);
   }
}

/////////////////////////極棒交換////////////////////////////
//設定の読み込み
void SETUP_DATA_RD()
{
    fd = fopen("/fs/system/config.bin","r");//r:既存ファイルを対象に、読み込みモードで開きます
    rd_size=GetFileSize("/fs/system/config.bin");
    if(!fd){
        lcd_print("t0","SDカード異常の為、起動できません。");
        ALM_HOLD_SET();
   }else{   
        fread(&config_dat,1,rd_size,fd);
        fclose(fd);
        /////////Φ4平/////////
        WD1H_CHG_SET_DAT=config_dat[0]<<8;//上位バイト
        WD1H_CHG_SET_DAT &=0xFF00;
        WD1H_CHG_SET_DAT |=config_dat[1];//下位バイト

        WD1H_CHGDAT_4=WD1H_CHG_SET_DAT/1000;
        WD1H_CHGDAT_3=(WD1H_CHG_SET_DAT-(WD1H_CHGDAT_4*1000))/100;
        WD1H_CHGDAT_2=(WD1H_CHG_SET_DAT-(WD1H_CHGDAT_4*1000+WD1H_CHGDAT_3*100))/10;
        WD1H_CHGDAT_1=(WD1H_CHG_SET_DAT-(WD1H_CHGDAT_4*1000+WD1H_CHGDAT_3*100+WD1H_CHGDAT_2*10));
        
        
       /////////Φ3側平/////////
        WD2H_CHG_SET_DAT=config_dat[2]<<8;//上位バイト
        WD2H_CHG_SET_DAT &=0xFF00;
        WD2H_CHG_SET_DAT |=config_dat[3];//下位バイト

        WD2H_CHGDAT_4=WD2H_CHG_SET_DAT/1000;
        WD2H_CHGDAT_3=(WD2H_CHG_SET_DAT-(WD2H_CHGDAT_4*1000))/100;
        WD2H_CHGDAT_2=(WD2H_CHG_SET_DAT-(WD2H_CHGDAT_4*1000+WD2H_CHGDAT_3*100))/10;
        WD2H_CHGDAT_1=(WD2H_CHG_SET_DAT-(WD2H_CHGDAT_4*1000+WD2H_CHGDAT_3*100+WD2H_CHGDAT_2*10));
        ////Φ3丸//////////////
        WD2R_CHG_SET_DAT=config_dat[4]<<8;//上位バイト
        WD2R_CHG_SET_DAT &=0xFF00;
        WD2R_CHG_SET_DAT |=config_dat[5];//下位バイト

        WD2R_CHGDAT_4=WD2R_CHG_SET_DAT/1000;
        WD2R_CHGDAT_3=(WD2R_CHG_SET_DAT-(WD2R_CHGDAT_4*1000))/100;
        WD2R_CHGDAT_2=(WD2R_CHG_SET_DAT-(WD2R_CHGDAT_4*1000+WD2R_CHGDAT_3*100))/10;
        WD2R_CHGDAT_1=(WD2R_CHG_SET_DAT-(WD2R_CHGDAT_4*1000+WD2R_CHGDAT_3*100+WD2R_CHGDAT_2*10));
        //////////端子供給1側///////////////////
        C1_RD_50MM=config_dat[6]<<24;
        C1_RD_50MM &=0xFF000000;
        C1_RD_50MM |=config_dat[7]<<16;
        C1_RD_50MM &=0xFFFF0000;
        C1_RD_50MM |=config_dat[8]<<8;
        C1_RD_50MM &=0xFFFFFF00;
        C1_RD_50MM |=config_dat[9];
  
        C1_RD_32MM=config_dat[10]<<24;
        C1_RD_32MM &=0xFF000000;
        C1_RD_32MM |=config_dat[11]<<16;
        C1_RD_32MM &=0xFFFF0000;
        C1_RD_32MM |=config_dat[12]<<8;
        C1_RD_32MM &=0xFFFFFF00;
        C1_RD_32MM |=config_dat[13];

        C1_RD_23MM=config_dat[14]<<24;
        C1_RD_23MM &=0xFF000000;
        C1_RD_23MM |=config_dat[15]<<16;
        C1_RD_23MM &=0xFFFF0000;
        C1_RD_23MM |=config_dat[16]<<8;
        C1_RD_23MM &=0xFFFFFF00;
        C1_RD_23MM |=config_dat[17];
        ////////////////////////////////////
        //////////端子供給2側///////////////////
        C2_RD_50MM=config_dat[18]<<24;
        C2_RD_50MM &=0xFF000000;
        C2_RD_50MM |=config_dat[19]<<16;
        C2_RD_50MM &=0xFFFF0000;
        C2_RD_50MM |=config_dat[20]<<8;
        C2_RD_50MM &=0xFFFFFF00;
        C2_RD_50MM |=config_dat[21];
  
        C2_RD_32MM=config_dat[22]<<24;
        C2_RD_32MM &=0xFF000000;
        C2_RD_32MM |=config_dat[23]<<16;
        C2_RD_32MM &=0xFFFF0000;
        C2_RD_32MM |=config_dat[24]<<8;
        C2_RD_32MM &=0xFFFFFF00;
        C2_RD_32MM |=config_dat[25];

        C2_RD_23MM=config_dat[26]<<24;
        C2_RD_23MM &=0xFF000000;
        C2_RD_23MM |=config_dat[27]<<16;
        C2_RD_23MM &=0xFFFF0000;
        C2_RD_23MM |=config_dat[28]<<8;
        C2_RD_23MM &=0xFFFFFF00;
        C2_RD_23MM |=config_dat[29];
        
            ////書き込みデータの初期値を読み込みデータに設定///
            
        wait_us(100);
        C1_WR_50MM = C1_RD_50MM;
        C1_WR_32MM = C1_RD_32MM;
        C1_WR_23MM = C1_RD_23MM;
        
        C2_WR_50MM = C2_RD_50MM;
        C2_WR_32MM = C2_RD_32MM;
        C2_WR_23MM = C2_RD_23MM;
        
        /*
        printf("C1_RD_50MM=%d C1_RD_32MM=%d C1_RD_23MM=%d\r\n",C1_RD_50MM,C1_RD_32MM,C1_RD_23MM);
        printf("C2_RD_50MM=%d C2_RD_32MM=%d C2_RD_23MM=%d\r\n",C2_RD_50MM,C2_RD_32MM,C2_RD_23MM);
        
        printf("C1_WR_50MM=%d C1_WR_32MM=%d C1_WR_23MM=%d\r\n",C1_WR_50MM,C1_WR_32MM,C1_WR_23MM);
        printf("C2_WR_50MM=%d C2_WR_32MM=%d C2_WR_23MM=%d\r\n",C2_WR_50MM,C2_WR_32MM,C2_WR_23MM);
        */
        //////////端子供給1//////////////////////////
        C1_SET_50MM=C1_RD_50MM;
        C1_SET_32MM=C1_RD_32MM;
        C1_SET_23MM=C1_RD_23MM;

        C1_SET_50MM=C1_SET_50MM/10;
        C1_SET_32MM=C1_SET_32MM/10;
        C1_SET_23MM=C1_SET_23MM/10;

        
        //////////端子供給2//////////////////////////
        C2_SET_50MM=C2_RD_50MM;
        C2_SET_32MM=C2_RD_32MM;
        C2_SET_23MM=C2_RD_23MM;
        
        C2_SET_50MM=C2_SET_50MM/10;
        C2_SET_32MM=C2_SET_32MM/10;
        C2_SET_23MM=C2_SET_23MM/10;

   }    
}


////設定の保存//
void SET_UP_SAVE()
{

   fd = fopen("/fs/system/config.bin","w+");//w+:上書きモードでファイルを書き込み(存在しない場合は、ファイル作成)
   if(!fd){
        ALM_ST= ALM_SD;
        ALM_HOLD_SET();
   }else{ 
        /////////極棒交換//////////////////      
        ///Φ4平///
        config_save_dat[0]=WD1H_CHG_SET_DAT>>8;//上位バイト
        config_save_dat[1]=WD1H_CHG_SET_DAT;//下位バイト
        //Φ3平//
        config_save_dat[2]=WD2H_CHG_SET_DAT>>8;//上位バイト
        config_save_dat[3]=WD2H_CHG_SET_DAT;//下位バイト
        //Φ3//
        config_save_dat[4]=WD2R_CHG_SET_DAT>>8;//上位バイト
        config_save_dat[5]=WD2R_CHG_SET_DAT;//下位バイト
        /////////端子供給1////////////////
        config_save_dat[6]=C1_WR_50MM>>24;
        config_save_dat[7]=C1_WR_50MM>>16;
        config_save_dat[8]=C1_WR_50MM>>8;
        config_save_dat[9]=C1_WR_50MM;
        
        config_save_dat[10]=C1_WR_32MM>>24;
        config_save_dat[11]=C1_WR_32MM>>16;
        config_save_dat[12]=C1_WR_32MM>>8;
        config_save_dat[13]=C1_WR_32MM;
        
        config_save_dat[14]=C1_WR_23MM>>24;
        config_save_dat[15]=C1_WR_23MM>>16;
        config_save_dat[16]=C1_WR_23MM>>8;
        config_save_dat[17]=C1_WR_23MM;
        /////////端子供給2////////////////
        config_save_dat[18]=C2_WR_50MM>>24;
        config_save_dat[19]=C2_WR_50MM>>16;
        config_save_dat[20]=C2_WR_50MM>>8;
        config_save_dat[21]=C2_WR_50MM;
        
        config_save_dat[22]=C2_WR_32MM>>24;
        config_save_dat[23]=C2_WR_32MM>>16;
        config_save_dat[24]=C2_WR_32MM>>8;
        config_save_dat[25]=C2_WR_32MM;
        
        config_save_dat[26]=C2_WR_23MM>>24;
        config_save_dat[27]=C2_WR_23MM>>16;
        config_save_dat[28]=C2_WR_23MM>>8;
        config_save_dat[29]=C2_WR_23MM;
        fwrite(&config_save_dat, 1, 30, fd);
        fclose(fd);
        
        C1_SET_50MM=C1_WR_50MM/10;
        C1_SET_32MM=C1_WR_32MM/10;
        C1_SET_23MM=C1_WR_23MM/10;
        
        C2_SET_50MM=C2_WR_50MM/10;
        C2_SET_32MM=C2_WR_32MM/10;
        C2_SET_23MM=C2_WR_23MM/10;
        

        ///保存後の再読み込み///
        SETUP_DATA_RD();        
    }
}