#include #include typedef struct optform { unsigned short tcode; long seqno; unsigned char movemode; float p[3]; long orgfeed; unsigned char pos; float vol; long optfeed; } OPTFORM; void main(int argc,char *argv[]) { int i; char bit[4]; FILE *ifp; OPTFORM cutform; double dis[3],disd; double rapidlen,rapidcutlen,ncutlen,cutlen,cutlena,cutlenu,cutlend,cutlenv; float ps[3]; if( argc < 2 ) { printf("モニタリングデータ名を指定して下さい。\n"); return; } cutform.tcode=0; cutform.movemode=255; cutform.orgfeed=0; cutform.pos=0; cutform.vol=0.0; cutform.optfeed=0; ifp=fopen(argv[1],"rb"); if( ifp == NULL ) { printf("指定されたモニタリングが存在していません。\n"); return; } fread(&cutform.p[0],12,1,ifp); /* 開始処理 */ rapidlen=rapidcutlen=cutlen=ncutlen=cutlena=cutlenu=cutlend=cutlenv=0.0; ps[0]=cutform.p[0]; ps[1]=cutform.p[1]; ps[2]=cutform.p[2]; while(1) { /* 2バイト読み込みと終了の検出 */ if( fread(bit,2,1,ifp) == 0 ) break; /* 工具の変更検出と読み込み */ if( bit[0] & 0x01 ) { if( rapidlen != 0.0 || ncutlen != 0.0 || cutlen != 0.0 ) { printf("早送り 空転=%10.3f\n",rapidlen); printf("早送り 切削=%10.3f\n",rapidcutlen); printf("切削送り 空転=%10.3f\n",ncutlen); printf("切削送り 切削=%10.3f\n",cutlen); printf(" 内訳 ダウンカット=%10.3f\n" ,cutlend); printf(" アップカット=%10.3f\n" ,cutlenu); printf(" 垂直部 =%10.3f\n" ,cutlenv); printf(" 全面/その他 =%10.3f\n\n",cutlena); } rapidlen=rapidcutlen=cutlen=ncutlen=cutlena=cutlenu=cutlend=cutlenv=0.0; ps[0]=cutform.p[0]; ps[1]=cutform.p[1]; ps[2]=cutform.p[2]; fread(&cutform.tcode,2,1,ifp); printf("T%02d\n",cutform.tcode); } if( (bit[0] & 0x02) >> 1 ) fread(&cutform.seqno,4,1,ifp); if( (bit[0] & 0x04) >> 2 ) fread(&cutform.movemode,1,1,ifp); if( (bit[0] & 0x08) >> 3 ) fread(&cutform.p[0],4,1,ifp); if( (bit[0] & 0x10) >> 4 ) fread(&cutform.p[1],4,1,ifp); if( (bit[0] & 0x20) >> 5 ) fread(&cutform.p[2],4,1,ifp); if( (bit[0] & 0x40) >> 6 ) fread(&cutform.orgfeed,4,1,ifp); if( (bit[0] & 0x80) >> 7 ) fread(&cutform.pos,1,1,ifp); if( (bit[1] & 0x01) >> 0 ) fread(&cutform.vol,4,1,ifp); if( (bit[1] & 0x02) >> 1 ) fread(&cutform.optfeed,4,1,ifp); for(i=0;i<3;i++) dis[i]=cutform.p[i]-ps[i]; disd=sqrt(dis[0]*dis[0]+dis[1]*dis[1]+dis[2]*dis[2]); if( cutform.movemode == 0 ) { if( cutform.vol == 0.0 ) { rapidlen+=disd; } else { rapidcutlen+=disd; } } else if( cutform.movemode != 0 ) { if( cutform.vol == 0.0 ) { ncutlen+=disd; } else { cutlen+=disd; if( cutform.pos == 0 ) { cutlena+=disd; } else if( cutform.pos == 1 ) { cutlenv+=disd; } else if( cutform.pos == 2 ) { cutlenu+=disd; } else if( cutform.pos == 3 ) { cutlend+=disd; } } } ps[0]=cutform.p[0]; ps[1]=cutform.p[1]; ps[2]=cutform.p[2]; } printf("早送り 空転=%10.3f\n",rapidlen); printf("早送り 切削=%10.3f\n",rapidcutlen); printf("切削送り 空転=%10.3f\n",ncutlen); printf("切削送り 切削=%10.3f\n",cutlen); printf(" 内訳 ダウンカット=%10.3f\n" ,cutlend); printf(" アップカット=%10.3f\n" ,cutlenu); printf(" 垂直部 =%10.3f\n" ,cutlenv); printf(" 全面/その他 =%10.3f\n\n",cutlena); fclose(ifp); }