Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: SAVE_CONT.cpp
- Revision:
- 2:71b3736a1bd7
diff -r 4f6bcf445501 -r 71b3736a1bd7 SAVE_CONT.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SAVE_CONT.cpp Fri Oct 21 10:54:03 2022 +0000
@@ -0,0 +1,792 @@
+#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();
+ }
+}