📄 t0328.c
字号:
#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 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 long leftlength;
static int oldspeed,autoct,leftct;
static long oldprdnumber;
static char newtimebuf[8],oldtimebuf[8];
static char str0[18][10]={"F1","定单输入","F2","强制换单","F3","定单保存","F4","定单浏览","F5","定单上载","F6","生产定单","F8","取消换单","+/-","废品计数","ESC","退出系统"};
static char order[300][70],cutlength1[4],prdnumber1[10],leftlength1[10];
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 char buffer[80],tmpbuf[80],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],pnum[4];
static long dDAT;
static char rcvchar,autook;
static int oirec,omaxrec;
static char ibuf1[150],ibuf2[150],ibuf3[150];
static int Port,itt;
static int iCOM,iSEL,iADD,iSPD;
static double dCIR,dANG,dSYN,dMAX,dRAT,dACC;
static unsigned iSEG,iOFF;
static int stopok,ctok;
static long itotaltm,ototaltm,istoptm,ostoptm,itotallen,ototallen;
static int istopct,ostopct,iavgsp,oavgsp;
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 msgbox(char *msg,int ikey,int hzok);
int inputorder(char *str);
void disporder(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,int tmpnumber);
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);
void dispalldata(void);
int main(void)
{ int ok,ikeycode,i,k;
FILE *fpASC,*fpp;
char far *Ptr;
int Seg;
int sendok,maxtm;
time_t tmstart,tmend;
initdata();
lmtspeedinit();
Port=iCOM;
itt=0;
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;
omaxrec=0;
irec=0;
maxrec=0;
tmcounter=0;
itotaltm=0L;
ototaltm=0L;
istoptm=0L;
ostoptm=0L;
itotallen=0L;
ototallen=0L;
istopct=0;
ostopct=0;
iavgsp=0;
oavgsp=0;
stopok=FALSE;
ctok=FALSE;
_strtime(oldtimebuf);
whichvga();
res800();
strcpy(buf1,"cutoff.pcx");
pcxput(SET,0,0,buf1);
_strdate(buf1);
drwstr(buf1,400,5,1,2,RED,SET);
ok=TRUE;
sendok=TRUE;
orderok=FALSE;
autoct=0;
leftct=0;
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);
}
if((!ctok) && (ispeed>5)) ctok=TRUE;
if(ctok)
{if(ispeed>5)
stopok=FALSE;
else if(!stopok)
{stopok=TRUE;
istopct++;
}
}
if(kbhit())
{ikeycode=getkey();
switch(ikeycode)
{ case kbF1: /* Input */
drwbutton(str0[0],str0[1],8,545,SET,lGREEN);
if (inputorder(buf2)!=9)
{strupr(buf2);
appendorder(buf2);
dispallorder(irec,maxrec-1);
}
drwbutton(str0[0],str0[1],8,545,SET,YELLOW);
break;
case kbF2: /* Change */
drwbutton(str0[2],str0[3],88,545,SET,lGREEN);
changeorder();
dispallorder(irec,maxrec-1);
drwfillcircle(SET,WHITE,30,50,20);
drwbutton(str0[2],str0[3],88,545,SET,YELLOW);
break;
case kbF3: /* Save */
drwbutton(str0[4],str0[5],167,545,SET,lGREEN);
saveorder();
drwbutton(str0[4],str0[5],167,545,SET,YELLOW);
break;
case kbF4: /* Brow */
drwbutton(str0[6],str0[7],247,545,SET,lGREEN);
broworder();
dispallorder(irec,maxrec-1);
drwbutton(str0[6],str0[7],247,545,SET,YELLOW);
break;
case kbF5: /* Upload */
drwbutton(str0[8],str0[9],326,545,SET,lGREEN);
uploadorder();
dispallorder(irec,maxrec-1);
drwbutton(str0[8],str0[9],326,545,SET,YELLOW);
break;
case kbF6: /* History */
drwbutton(str0[10],str0[11],406,545,SET,lGREEN);
historybrow();
dispallorder(irec,maxrec-1);
drwbutton(str0[10],str0[11],406,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],565,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);
/*drwfillcircle(SET,WHITE,730,50,20);*/
}
drwbutton(str0[12],str0[13],565,545,SET,YELLOW);
break;
case '+':
drwbutton(str0[14],str0[15],644,545,SET,lGREEN);
badnumber++;
dispbadnumber();
drwbutton(str0[14],str0[15],644,545,SET,YELLOW);
break;
case '-':
drwbutton(str0[14],str0[15],644,545,SET,lGREEN);
if(badnumber>0)
{badnumber--;
dispbadnumber();
}
drwbutton(str0[14],str0[15],644,545,SET,YELLOW);
break;
case '*':
ispeed++;
break;
case '/':
if(ispeed>0) ispeed--;
break;
case ESC:
drwbutton(str0[16],str0[17],725,545,SET,lGREEN);
strcpy(buf2,"请确认退出系统?");
i=msgbox(buf2,1,1);
if((i=='y') || (i=='Y') || (i==ENTER))
ok=FALSE;
drwbutton(str0[16],str0[17],725,545,SET,YELLOW);
break;
}
tmcounter=maxtm;
time(&tmstart);
}
showtime();
dispspeed();
dispprdnumber();
dispalldata();
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=atoi(buf3);
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,"%10ld%10ld%4d\n",prdnumber,leftnumber,badnumber);
strcat(buf2,buf3);
i=strlen(buf2);
fwrite(buf2,sizeof(char),i,fpp);
fclose(fpp);
}
setlength=cutlength;
setnumber=0;
lmtspeed=lmtspeedcal(setlength);
prdnumber=0;
badnumber=0;
for(i=0;i<70;i++)
{oldorder[i]=currentorder[i];
currentorder[i]=' ';
}
sprintf(buf3,"%04d",cutlength);
for(i=0;i<4;i++)
currentorder[60+i]=buf3[i];
oldorder[70]='\0';
currentorder[70]='\0';
orderok=TRUE;
disporder(0,oldorder,GREEN,BLACK);
disporder(1,currentorder,RED,WHITE);
dispprdnumber();
displeftnumber();
dispbadnumber();
}
for(i=0;i<6;i++)
buf3[i]=rcvbuf[13+i];
buf3[6]='\0';
itotallen=atol(buf3);
}
sendok=TRUE;
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<20L)
{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,515,570,5);
autoct++;
if(autoct>800) autoct=0;
if(irec>maxrec-1) autook=FALSE;
}
else
drwfillcircle(SET,YELLOW,515,570,5);
lmtspeed=lmtspeedcal(setlength);
if((ispeed>lmtspeed) && orderok)
{ strcpy(buf2,"生产速度超过极速!不能保证正常生产!");
waitbox(buf2,0,1);
}
}
restext();
SioDone(Port);
return 1;
}
void dispalldata(void)
{int ihh,imm,iss;
if(itotaltm!=ototaltm)
{ototaltm=itotaltm;
ihh=(int)(itotaltm/3600L);
imm=(int)((itotaltm%3600L)/60L);
iss=(int)(itotaltm%60L);
sprintf(buff,"%02d:%02d:%02d",ihh,imm,iss);
drwfillbox(SET,CYAN,89,516,170,536);
drwstr(buff,98,518,1,1,lPINK,SET);
}
if(istoptm!=ostoptm)
{ostoptm=istoptm;
ihh=(int)(istoptm/3600L);
imm=(int)((istoptm%3600L)/60L);
iss=(int)(istoptm%60L);
sprintf(buff,"%02d:%02d:%02d",ihh,imm,iss);
drwfillbox(SET,CYAN,500,516,580,536);
drwstr(buff,509,518,1,1,lPINK,SET);
}
if(istopct!=ostopct)
{ostopct=istopct;
sprintf(buff,"%4d",istopct);
drwfillbox(SET,CYAN,376,516,418,536);
drwstr(buff,385,518,1,1,lPINK,SET);
}
if(itotallen!=ototallen)
{ototallen=itotallen;
sprintf(buff,"%6d",itotallen);
drwfillbox(SET,CYAN,662,516,792,536);
drwstr(buff,671,518,1,1,lPINK,SET);
}
if(itotaltm!=0)
iavgsp=(int)(itotallen/itotaltm)*60;
if(oavgsp!=iavgsp)
{oavgsp=iavgsp;
sprintf(buff,"%4d",itotallen);
drwfillbox(SET,CYAN,172,516,250,536);
drwstr(buff,181,518,1,1,lPINK,SET);
}
}
void scanmem(void)
{unsigned char far *p,*p1;
int i,j,k;
p=(unsigned char far *)0xD0000000;
if(iADD==1) p=(unsigned char far *)0xE0000000;
p1=p;
p1++;
*p1=(unsigned char)iSEL;
if(iSEL==1)
{ strcpy(buf2,"下");
dispstore(buf2);
}
else if(iSEL==2)
{
strcpy(buf3,"上");
dispstore(buf3);
}
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<7;i++)
for(j=0;j<70;j++)
{*p1=order[irec+i][j];
if ((irec+i)>maxrec-1)
*p1=' ';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -