⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cut1024.c

📁 以前做的泰国瓦楞纸板生产线监控系统
💻 C
📖 第 1 页 / 共 3 页
字号:
#include<io.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<graph.h>
#include<time.h>
#include<dos.h>
#include<fcntl.h>
#include<malloc.h>
#include<share.h>
#include<math.h>

#include "svgacc.h"      
#include "pcl4c.h"


char RxBuffer[1024+16];
char TxBuffer[512+16];

int ErrorCheck(int);
int bcccheck(char *str);

#define TRUE 1
#define FALSE 0

#define STX 2
#define ETX 3
#define EOT 4
#define ENQ 5
#define ACK 6
#define BS  8
#define NAK 21

#define ESC 27
#define BACKSPACE 8
#define ENTER 13
#define kbF1 187
#define kbF2 188
#define kbF3 189
#define kbF4 190
#define kbF5 191
#define kbF6 192
#define kbF7 193
#define kbF8 194
#define kbF9 195
#define kbF10 196

#define kbUp 200
#define kbDn 208
#define kbPgUp 201
#define kbPgDn 209
#define kbEND 207
#define kbHOME 199
#define kbINS 210
#define kbDEL 211

#define BLACK 0
#define lBLUE 1
#define lGREEN 2
#define lCYAN 3
#define lRED 4
#define lPINK 5
#define lYELLOW 6
#define lWHITE 7
#define GRAY 8
#define BLUE 9
#define GREEN 10
#define CYAN 11
#define RED 12
#define PINK 13
#define YELLOW 14
#define WHITE 15

static int ispeed,lmtspeed,badnumber;
static long setnumber,prdnumber,totallength,leftnumber;
static int setlength,cutlength,cuterror;
           
static int oldspeed,autoct,leftct;
static long oldprdnumber,adnum;
static int cdnum;

static char newtimebuf[8],oldtimebuf[8];
static char str0[20][10]={"F1","定单输入","F2","强制换单","F3","定单保存","F4","定单浏览","F5","定单上载","F6","生产定单","F8","取消换单","F9","增加数量","+/-","废品计数","ESC","退出系统"};
static char order[300][70];
static int irec,maxrec;

static char ASC16[4096];
static int xorder[8]={75,117,171,552,595,638,681,750};
static int xnorder[8]={115,169,550,593,636,679,748,791};

static int sxorder[10]={1,38,91,430,467,504,541,594,663,732};
static int sxnorder[10]={36,89,428,465,502,539,592,661,730,799};

static char buffer[80],tmpbuf[100],buf1[80],tmp1[20],readbuf[2],buff[80];
static char currentorder[70],oldorder[70],buf2[80],buf3[80],buf4[80];

static int tmcount,FirstChangeOk,rcvcount,tmcounter,orderok;

static char rcvbuf[80];

static long dDAT;
static char rcvchar,autook;
static char ibuf1[150],ibuf2[150],ibuf3[150];

static int Port;
static int iCOM,iSEL,iADD,iSPD,iPOS,iSCA;
static double dCIR,dANG,dSYN,dMAX,dRAT,dACC,dCDR;
static int islitter;

int maxpredrec(void);
void lmtspeedinit(void);
int drwhzstr(char *s,int x,int y,int m,int n,int col,int mode);
void drwstr(char *s,int x,int y,int m,int n,int col,int mode);

int getkey(void);
int readstr(int x,int y,int maxlen,char *str,int cc);
int msgbox(char *msg,int ikey,int hzok);
int inputorder(char *str);
void disporder(int loc,char *str,int icolor,int fcolor);
void dispsorder(int loc,char *str,int icolor,int fcolor);

void appendorder(char *str);
void dispallorder(int startrec,int endrec);
void showtime(void);
void changeorder(void);
void saveorder(void);
void uploadorder(void);
void broworder(void);
void exchangeorder(int i,int j);
void historybrow(void);
void dispbadnumber(void);
void dispspeed(void);
void dispprdnumber(void);
void displeftnumber(void);
int sendorderok(int tmplen,long tmpnumber,int tmpslit);
void waitbox(char *msg,int ikey,int hzok);
int bccstr(char *str);
int lmtspeedcal(int ilen);
void scandata(int istart,int iend);
void initdata(void);
int scanbuf(int istart,char *istr);
void drwbutton(char *phstr,char *str,int x,int y,PixelMode i,int col11);
void scanmem(void);
void dispstore(char *s);
int readcdata(int x,int y,int maxlen,char *str);
int inputnum(int s);

int main(void)
{  int ok,ikeycode,i,k;
   FILE *fpASC,*fpp;
   char far *Ptr;
   int  Seg;
   int sendok,maxtm;
   time_t tmstart,tmend;

   lmtspeedinit();
   initdata();   
   Port=iCOM;
   

   Ptr = (char far *)RxBuffer;
   Seg = FP_SEG(Ptr) + ((FP_OFF(Ptr)+15)>>4);
   ErrorCheck(SioRxBuf(Port,Seg,Size1024));

   Ptr = (char far *)TxBuffer;
   Seg = FP_SEG(Ptr) + ((FP_OFF(Ptr)+15)>>4);
   ErrorCheck( SioTxBuf(Port,Seg,Size512) );
   ErrorCheck( SioParms(Port,NoParity,OneStopBit,WordLength8) );
   ErrorCheck( SioReset(Port,Baud9600) );
   i = SioFIFO(Port,LEVEL_4TH);

   if((fpASC=fopen("asc16","rb"))==0)
     {printf("Error: ASC16 can't open.\n");
      return FALSE;
     }

   if(fgets(ASC16,4096,fpASC)==NULL)
     {printf("ERROR:ASC16 Read Error.\n");
      fclose(fpASC);
      return FALSE;
     }

   fclose(fpASC);

   setlength=935;
   setnumber=0L;
   lmtspeed=184;
   cutlength=0;
   cuterror=0;
   prdnumber=0L;
   ispeed=0;
   badnumber=0;
   oldspeed=0;
   oldprdnumber=0L;
   leftnumber=0L;
   rcvcount=0;
   maxtm=1500;
   autook=FALSE;
   
   FirstChangeOk=TRUE;
   irec=0;
   maxrec=0;
   tmcounter=0;
   adnum=0;
   cdnum=0;
   
   islitter=1;

   _strtime(oldtimebuf);

   whichvga();
   res800();

   ok=TRUE;
   sendok=TRUE;
   orderok=FALSE;
   autoct=0;
   leftct=0;
/*   time(&tminit);*/
   
   strcpy(buf1,"cutoff1.pcx");
   pcxput(SET,0,0,buf1);   
   
   _strdate(buf1);
   drwstr(buf1,400,5,1,2,RED,SET);

  if(iSEL==0)
  {strcpy(buf2,"下");
   dispstore(buf2);
  }
 else if(iSEL==1)
  {
  strcpy(buf3,"上");
  dispstore(buf3);
  }

   while(ok)
    {if((sendok) && (orderok))  
      {buf3[0]='1';
       buf3[1]=ENTER;
       buf3[2]='\0';
       SioRTS(Port,'S');
       SioPuts(Port,buf3,2);
       SioEmpty(Port);
       SioRTS(Port,'C');
       sendok=FALSE;
       tmcounter=0;
       time(&tmstart);
      }
     showtime();
     if(kbhit())
        {ikeycode=getkey();
         switch(ikeycode)
          { case kbF1: /* Input */
             drwbutton(str0[0],str0[1],6,545,SET,lGREEN);
            
             if (inputorder(buf2)!=27)
                {strupr(buf2);
                 appendorder(buf2);
                 dispallorder(irec,maxrec-1);
                }
             
             drwbutton(str0[0],str0[1],6,545,SET,YELLOW);
             
             break;
            case kbF2: /* Change */
             drwbutton(str0[2],str0[3],79,545,SET,lGREEN);
             changeorder();
             dispallorder(irec,maxrec-1);
             drwfillcircle(SET,WHITE,30,50,20);  
             drwbutton(str0[2],str0[3],79,545,SET,YELLOW);
             
             break;
            case kbF3: /* Save */
             drwbutton(str0[4],str0[5],151,545,SET,lGREEN);
             
             saveorder();
             drwbutton(str0[4],str0[5],151,545,SET,YELLOW);
             
             break;
            case kbF4: /* Brow */
             drwbutton(str0[6],str0[7],224,545,SET,lGREEN);
             
             broworder();
             dispallorder(irec,maxrec-1);
             drwbutton(str0[6],str0[7],224,545,SET,YELLOW);
             
             break;
            case kbF5: /* Upload */
             drwbutton(str0[8],str0[9],296,545,SET,lGREEN);
             
             uploadorder();
             dispallorder(irec,maxrec-1);
             drwbutton(str0[8],str0[9],296,545,SET,YELLOW);
             
             break;
            case kbF6: /* History */
             drwbutton(str0[10],str0[11],368,545,SET,lGREEN);
             
             historybrow();
           /*  dispallorder(irec,maxrec-1);*/
             drwbutton(str0[10],str0[11],368,545,SET,YELLOW);
             
             break;
            case kbF7: /* Auto Order Exchange */
             if(autook==TRUE)
                autook=FALSE;
             else 
                autook=TRUE;
             break; 
            case kbF8: /* Cancel Exchange */ 
             drwbutton(str0[12],str0[13],512,545,SET,lGREEN);
             
             strcpy(buf2,"请确认是否需要取消换单?");
             i=msgbox(buf2,1,1);
             if((i=='y') || (i=='Y') || (i==ENTER))
              {strncpy(buf3,currentorder,70);
               appendorder(buf3);
           
               for(k=maxrec-1;k>irec;k--)
                 exchangeorder(k,k-1);
               
               strncpy(buf3,oldorder,70);
               appendorder(buf3);
           
               for(k=maxrec-1;k>irec;k--)
                 exchangeorder(k,k-1);
               
               changeorder();
               dispallorder(irec,maxrec-1);
              }
             drwbutton(str0[12],str0[13],512,545,SET,YELLOW);
              
              break;
             
            case '+':
             drwbutton(str0[16],str0[17],656,545,SET,lGREEN);
             
             badnumber++;
             dispbadnumber();
             drwbutton(str0[16],str0[17],656,545,SET,YELLOW);
             
             break;
            case '-':
             drwbutton(str0[16],str0[17],656,545,SET,lGREEN);
             
             if(badnumber>0)
               {badnumber--;
                dispbadnumber();
               }
             drwbutton(str0[16],str0[17],656,545,SET,YELLOW);
             break;
            case ESC:
             drwbutton(str0[18],str0[19],727,545,SET,lGREEN);
             
             strcpy(buf2,"请确认退出系统?");
             i=msgbox(buf2,1,1);
             if((i=='y') || (i=='Y') || (i==ENTER))
              ok=FALSE;
             drwbutton(str0[18],str0[19],725,545,SET,YELLOW);
             
             break;
            case kbF9:
             drwbutton(str0[14],str0[15],584,545,SET,lGREEN);

             if(inputnum(1))
               {drwfillbox(SET,RED,681,288,748,310);
                for(i=0;i<6;i++)
                 buf3[i]=currentorder[64+i];
                buf3[6]='\0';
                setnumber=atol(buf3)+adnum;
                displeftnumber();
                sprintf(buf1,"%6ld",setnumber);
                for(i=0;i<6;i++)
                  currentorder[64+i]=buf1[i];
                 disporder(1,currentorder,RED,WHITE);

               }
             drwbutton(str0[14],str0[15],584,545,SET,YELLOW);

             break;
          /*  case kbF9: 
             strcpy(buf2,"确认横切机传送定单?");
             i=msgbox(buf2,1,1);
             if((i=='y') || (i=='Y') || (i==ENTER))
             iSCA=1;
             break;
            case kbF10: 
             strcpy(buf2,"取消横切机传送定单?");
             i=msgbox(buf2,1,1);
             if((i=='y')||(i=='Y')||(i==ENTER))
             iSCA=0;
             break;
           */  
          }
         tmcounter=maxtm;
         time(&tmstart);
        
        }
      
      showtime();
      dispspeed();
      dispprdnumber();
      
      rcvchar= (char)SioGetc(Port,0);
      if(rcvchar==STX)
       rcvcount=0;
      else if(rcvchar==ENTER)
        {rcvbuf[rcvcount]='\0';
         if(bcccheck(rcvbuf))
          {for(i=0;i<3;i++)
            buf3[i]=rcvbuf[i];
           buf3[3]='\0';
           ispeed=(int)(atof(buf3)*dCDR/180.0);
           for(i=0;i<6;i++)
            buf3[i]=rcvbuf[3+i];
           buf3[6]='\0';
           prdnumber=atol(buf3);
           
           for(i=0;i<4;i++)
            buf3[i]=rcvbuf[9+i];
           buf3[4]='\0';
           cutlength=atoi(buf3);
           if(setlength != cutlength)
             {strcpy(buf2,"prddata.txt");
              if((fpp=fopen(buf2,"a+")) != NULL)
               {fwrite(currentorder,sizeof(char),70,fpp);
                buf2[0]='\0';
                _strdate(buf3);
                strcat(buf2,buf3);
                _strtime(buf3);
                strcat(buf2,buf3);
                sprintf(buf3,"%6ld%6ld%4d\n",prdnumber,leftnumber,badnumber);
                strcat(buf2,buf3);
                i=strlen(buf2);
                fwrite(buf2,sizeof(char),i,fpp);

                fclose(fpp);
               }
         
            setlength=cutlength;
            setnumber=0;
            islitter=1;
            lmtspeed=lmtspeedcal(setlength);

            prdnumber=0;
            badnumber=0;
             autook=FALSE;
            for(i=0;i<70;i++)
             {oldorder[i]=currentorder[i];
              currentorder[i]=' ';
             }
            sprintf(buf3,"%04d%04d",islitter,cutlength);
            for(i=0;i<4;i++)
             {currentorder[56+i]=buf3[i];
              currentorder[60+i]=buf3[i+4];
             }
            oldorder[70]='\0';
            currentorder[70]='\0';

            orderok=TRUE;

            disporder(0,oldorder,GREEN,BLACK);
            disporder(1,currentorder,RED,WHITE);
            dispprdnumber();
            displeftnumber();
            dispbadnumber();        
           }
          }

         sendok=TRUE;
         tmcounter++;
         tmcounter=maxtm;
         time(&tmstart);
        }
      else if(rcvchar>=' ')
        rcvbuf[rcvcount++]=rcvchar;
      
      if(!sendok)
       {time(&tmend);
        tmcounter++;
        if(fabs(difftime(tmend,tmstart))>=5.0)
          { sendok=TRUE;  
           strcpy(buf2,"通信超时错误!");   
           waitbox(buf2,0,1);
           time(&tmstart);
          } 
        else if(tmcounter>=maxtm)
         { sendok=TRUE;
           tmcounter=0;
           time(&tmstart);
         }
       }

      leftnumber=setnumber-prdnumber+badnumber;
      if(leftnumber<30L)
       {if(leftct==0)
          drwfillcircle(XOR,GREEN,30,50,20);
        leftct++;
        if(leftct>500) leftct=0;
       }
      if((autook) && (leftnumber<1) && (orderok))
        {changeorder();
         dispallorder(irec,maxrec-1);
         drwfillcircle(SET,WHITE,30,50,20); 
        }
  
      if(autook)
       {if(autoct==0)
         drwfillcircle(XOR,CYAN,472,570,5);
        autoct++;
        if(autoct>800) autoct=0;
        if(irec>maxrec-1) autook=FALSE;
       }
      
      else
       drwfillcircle(SET,YELLOW,472,570,5);

      lmtspeed=lmtspeedcal(setlength);
      if((ispeed>lmtspeed) && orderok)
        { strcpy(buf2,"生产速度超过极速!不能保证正常生产!");
          waitbox(buf2,0,1);
        }       
      

    }
    
   restext();
   SioDone(Port);

   return 1;
}

void scanmem(void)
{unsigned char far *p,*p1;
 int i,j; 
 
 if(iADD==0) p=(unsigned char far *)0xD0000000;
 else if(iADD==1) p=(unsigned char far *)0xE0000000;
 else if(iADD==2) p=(unsigned char far *)0xC8000000;

 p1=p;
 if(*p1==0)
{ p1++;
 *p1=(unsigned char)iSEL;
 
 p1++;
 /*
 for(i=0;i<70;i++)
  {*p1=oldorder[i];
   p1++;
  }
 */
 for(i=0;i<70;i++)
  {*p1=currentorder[i];
   p1++;
  }

 for(i=0;i<9;i++)
  for(j=0;j<70;j++)
   {*p1=order[irec+i][j];
    if ((irec+i)>maxrec-1)
       *p1=' ';
    p1++;
   }
 for(i=0;i<70;i++)
  {*p1=' ';
   p1++;
  }
 sprintf(buf3,"%4d%10ld%10ld",cutlength,prdnumber,leftnumber*cutlength/1000L);    
     for(i=0;i<24;i++)
      {
       *p1=buf3[i];
       p1++;
       }
 *p1=13;
 *p=1;
}
}                 

int maxprdrec(void)
{FILE *fp;
 long i;
 
 i=0L;
 if((fp=fopen("prddata.txt","r")) != NULL)
  {i=filelength(fileno(fp));
   fclose(fp);
  }

 return (int)(i/112L);
}


void scandata(int istart,int iend)
{FILE *fp;
 int i,j,k,m;
 long ii,jj;

 i=0;
 j=0;
 k=0;
 if((fp=fopen("prddata.txt","r")) != NULL)
  {ii=filelength(fileno(fp));
   jj=0L;
   
   while(!feof(fp))
    {fgets(ibuf1,130,fp);
     m=strlen(ibuf1);
     jj=jj+m;
     if (jj>ii) break;

     if(i>=istart)
      {k=i-istart;
       if((k>=0) && (k<16))
         {strncpy(ibuf2,ibuf1,92);
          ibuf2[92]='\0';
          dispsorder(k,ibuf2,GREEN,BLACK);
         }
       j++;
      }
     if(j>iend) break;
     i++;
    }
   if(k<16)
    {strncpy(ibuf2,ibuf1,92);
    ibuf2[92]='\0';
    dispsorder(k,ibuf2,GREEN,BLACK);
    }

   memset(ibuf2,' ',92);
   ibuf2[92]='\0';
   for(i=k+1;i<16;i++)
    dispsorder(i,ibuf2,GREEN,BLACK);

   fclose(fp);
  }
}

int scanbuf(int istart,char *istr)
{FILE *fp;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -