📄 comm.cpp
字号:
theApp.yxbuf01=Com1_RxdBuffer[7];
theApp.yxtask.krbuf[0].Value=~theApp.yxbuf00;
theApp.yxtask.krbuf[1].Value=~theApp.yxbuf01;
work.Word=0;
work.B.Low =Com1_RxdBuffer[20];
work.B.High=Com1_RxdBuffer[21];
switch(Com1_RxdBuffer[5])
{
case 0x00: theApp.FreqOut[0]=work.Word;
break;
case 0x01: theApp.FreqOut[1]=work.Word;
break;
case 0x02: theApp.FreqOut[2]=work.Word;
break;
case 0x03: theApp.FreqOut[3]=work.Word;
break;
}
theApp.Warn[0]=Com1_RxdBuffer[10];
theApp.Warn[1]=Com1_RxdBuffer[11];
theApp.Warn[2]=Com1_RxdBuffer[12];
theApp.Warn[3]=Com1_RxdBuffer[13];
theApp.yxtask.krbuf[8].Value =theApp.Warn[0];
// theApp.yxtask.krbuf[9].Value =theApp.Warn[1];
theApp.yxtask.krbuf[10].Value=theApp.Warn[2];
theApp.yxtask.krbuf[11].Value=theApp.Warn[3];
theApp.ComCount++;
break;
case 0x03: // 3 遥控操作
break;
case 0x04: // 4 传送数据
work.Word=0;
work.B.Low =Com1_RxdBuffer[12];
work.B.High=Com1_RxdBuffer[13];
dx=(double)work.Word;
dx=dx*287.0/23.0+0.4;
theApp.BoardLength=dx;
break;
case 0x05: // 5 4018 设置命令
break;
case 0x06: // 6 PID 参数设置
// AfxMessageBox(_T("PID OK"));
break;
case 0x07: // 7 取RAM变量
break;
case 0x08: // 8 复位
break;
case 0x09: // 9 4018 设置命令
break;
case 0x0A: // 10 4012 设置命令
break;
case 0x0B: // 11 4021 设置命令
break;
default: break;
}
}//else AfxMessageBox(_T("sum err"));
Com1_RxdBuffer[0]=0x55;
}
return(nLength);
}
//////////////////////////////////////////////////////////////////////////
// ReceiveFrame
BOOL Ccomm::ReceiveFrame2()
{
int nLength,i,j;
union WDAT work;
OVERLAPPED OverLappedRX;
double dx,dy,dt;
CString string,str;
Com2_dwLengthRX=14;
if(Com2_ErrorFlag)
{
MessageBox(NULL,_T("程序检测到,串口2发生了严重错误,通信工作无法继续进行!"),_T("系统提示"),MB_OK|MB_ICONSTOP);
return (0);
}
nLength=ReadFile(Com2_idComDev,Com2_RxdBuffer,Com2_dwLengthRX,&Com2_dwLengthRX,&OverLappedRX);
if(nLength==0)
{
MessageBox(NULL,_T("ReadFile False!"),_T("MESSAGE..."),MB_OK);
}
j=0;
if((Com2_RxdBuffer[0]!=0x02))
{
j++;
}
if(ReceiveSum2()==false)
{
j++;
}
if(j==0)
{
work.B.Low = Com2_RxdBuffer[3];
work.B.High= Com2_RxdBuffer[4];
theApp.plc_con_ret[0]=work.Word;
//0: 波峰1
//1: 编码
//2: 喷头原点
//3: 喷头终点
//4: 入板检知
theApp.yxtask.krbuf[2].Value=work.B.Low;
theApp.yxtask.krbuf[3].Value=work.B.High;
work.B.Low = Com2_RxdBuffer[5];
work.B.High= Com2_RxdBuffer[6];
theApp.plc_con_ret[1]=work.Word;
work.B.Low = Com2_RxdBuffer[7];
work.B.High= Com2_RxdBuffer[8];
theApp.pw_len_ret=work.Word;
work.B.Low = Com2_RxdBuffer[9];
work.B.High= Com2_RxdBuffer[10];
theApp.pw_with_ret=work.Word;
Com2_RxdBuffer[0]=0x55;
Com2_RxdBuffer[1]=0;
Com2_RxdBuffer[2]=0;
theApp.Com2_Rxd_Flag++;
}
return(nLength);
}
//////////////////////////////////////////////////////////////////////////
// MakeFrame
void Ccomm::MakeFrame1(int idCommand)
{
UINT crcCode;
int i,len,sl_adjust;
union WDAT work;
unsigned char ch;
double dx;
double kk=32.796,dk;
union IWDAT para;
Com1_TxdBuffer[0]=0xaa; //开始标志SOH
switch(idCommand)
{
case 0x00: //召唤温度
/* 00 AAH SYN 召唤温度 */
/* 19H LEN 00*/
/* 00H CMD 01*/
/* XXH CMD_SWITCH 02*/
/* XXH YKOUT0 03*/
/* XXH YKOUT1 04*/
/* XXH YKOUT2 05*/
/* XXH YKOUT3 06*/
/* XXH V0FSET.LOW 07*/
/* XXH V0FSET.HIGH 08*/
/* XXH V0CONTROL 09*/
/* XXH V1FSET.LOW 10*/
/* XXH V1FSET.HIGH 11*/
/* XXH V1CONTROL 12*/
/* XXH V2FSET.LOW 13*/
/* XXH V2FSET.HIGH 14*/
/* XXH V2CONTROL 15*/
/* XXH V3FSET.LOW 16*/
/* XXH V3FSET.HIGH 17*/
/* XXH V3CONTROL 18*/
/* XXH VOUT.LOW 19*/
/* XXH VOUT.HIGH 20*/
/* XXH VIN.LOW 21*/
/* XXH VIN.HIGH 22*/
/* XXH BAK00 23*/
/* XXH BAK01 24*/
/* XXH BAK02 25*/
/* XXH BAK03 26*/
/* XXH SUM 27*/
Com1_TxdBuffer[1]=0x19; //len
Com1_TxdBuffer[2]=0x00; //cmd
ch=0;
if(theApp.pid_switch!=0) ch=ch | 0x01;
else ch=ch & 0xfe;
if(theApp.yxtask.BitTestChar(theApp.yxtask.yxbuf,130)) ch=ch | 0x02;
else ch=ch & 0xfd;
if(theApp.yxtask.BitTestChar(theApp.yxtask.yxbuf,131)) ch=ch | 0x04;
else ch=ch & 0xfb;
if(theApp.yxtask.BitTestChar(theApp.yxtask.yxbuf,132)) ch=ch | 0x08;
else ch=ch & 0xf7;
if(theApp.yxtask.BitTestChar(theApp.yxtask.yxbuf,133)) ch=ch | 0x10;
else ch=ch & 0xef;
if(theApp.WorkMode!=0) ch=ch | 0x20;
else ch=ch & 0xdf;
if(theApp.SelfCheckFlag!=0) ch=ch | 0x80;
else ch=ch & 0x7f;
Com1_TxdBuffer[3]=ch;
Com1_TxdBuffer[4]=theApp.ykout[0];//ykout0
Com1_TxdBuffer[5]=theApp.ykout[1];//ykout1
Com1_TxdBuffer[6]=theApp.ykout[2];//ykout1
Com1_TxdBuffer[7]=theApp.ykout[3];//ykout1
work.Word=theApp.vfds0_Frequency;
if(work.Word>5000)work.Word=5000;
Com1_TxdBuffer[8]=work.B.Low;
Com1_TxdBuffer[9]=work.B.High;
Com1_TxdBuffer[10]=theApp.vfds0_control;
work.Word=theApp.vfds1_Frequency;
if(work.Word>5000)work.Word=5000;
Com1_TxdBuffer[11]=work.B.Low;
Com1_TxdBuffer[12]=work.B.High;
Com1_TxdBuffer[13]=theApp.vfds1_control;
work.Word=theApp.vfds2_Frequency;
if(work.Word>5000)work.Word=5000;
Com1_TxdBuffer[14]=work.B.Low;
Com1_TxdBuffer[15]=work.B.High;
Com1_TxdBuffer[16]=theApp.vfds2_control;
work.Word=theApp.vfds3_Frequency;
if(work.Word>5000)work.Word=5000;
Com1_TxdBuffer[17]=work.B.Low;
Com1_TxdBuffer[18]=work.B.High;
Com1_TxdBuffer[19]=theApp.vfds3_control;
work.Word=theApp.vout;
Com1_TxdBuffer[20]=work.B.Low;
Com1_TxdBuffer[21]=work.B.High;
work.Word=theApp.vin;
Com1_TxdBuffer[22]=work.B.Low;
Com1_TxdBuffer[23]=work.B.High;
Com1_TxdBuffer[24]=0;
Com1_TxdBuffer[25]=0;
Com1_TxdBuffer[26]=0;
Com1_TxdBuffer[27]=0;
EscapeCommFunction(Com1_idComDev,SETRTS);//置发送允许,但是不发送
ch=0;
for (i=1; i<28; i++) ch=ch+Com1_TxdBuffer[i];
Com1_TxdBuffer[28]=ch;
Com1_dwLengthTX=(DWORD)29;
Com1_WorkStatus = NOUSER; //0x4000;
break;
case 0x01: //召唤温度参数
Com1_TxdBuffer[1]=0x19; //len
Com1_TxdBuffer[2]=0x01; //cmd
ch=0;
if(theApp.pid_switch!=0) ch=ch | 0x01;
else ch=ch & 0xfe;
if(theApp.yxtask.BitTestChar(theApp.yxtask.yxbuf,130)) ch=ch | 0x02;
else ch=ch & 0xfd;
if(theApp.yxtask.BitTestChar(theApp.yxtask.yxbuf,131)) ch=ch | 0x04;
else ch=ch & 0xfb;
if(theApp.yxtask.BitTestChar(theApp.yxtask.yxbuf,132)) ch=ch | 0x08;
else ch=ch & 0xf7;
if(theApp.yxtask.BitTestChar(theApp.yxtask.yxbuf,133)) ch=ch | 0x10;
else ch=ch & 0xef;
if(theApp.WorkMode!=0) ch=ch | 0x20;
else ch=ch & 0xdf;
if(theApp.SelfCheckFlag!=0) ch=ch | 0x80;
else ch=ch & 0x7f;
Com1_TxdBuffer[3]=ch;
Com1_TxdBuffer[4]=theApp.ykout[0];//ykout0
Com1_TxdBuffer[5]=theApp.ykout[1];//ykout1
Com1_TxdBuffer[6]=theApp.ykout[2];//ykout1
Com1_TxdBuffer[7]=theApp.ykout[3];//ykout1
work.Word=theApp.vfds0_Frequency;
if(work.Word>5000)work.Word=5000;
Com1_TxdBuffer[8]=work.B.Low;
Com1_TxdBuffer[9]=work.B.High;
Com1_TxdBuffer[10]=theApp.vfds0_control;
work.Word=theApp.vfds1_Frequency;
if(work.Word>5000)work.Word=5000;
Com1_TxdBuffer[11]=work.B.Low;
Com1_TxdBuffer[12]=work.B.High;
Com1_TxdBuffer[13]=theApp.vfds1_control;
work.Word=theApp.vfds2_Frequency;
if(work.Word>5000)work.Word=5000;
Com1_TxdBuffer[14]=work.B.Low;
Com1_TxdBuffer[15]=work.B.High;
Com1_TxdBuffer[16]=theApp.vfds2_control;
work.Word=theApp.vfds3_Frequency;
if(work.Word>5000)work.Word=5000;
Com1_TxdBuffer[17]=work.B.Low;
Com1_TxdBuffer[18]=work.B.High;
Com1_TxdBuffer[19]=theApp.vfds3_control;
work.Word=theApp.vout;
Com1_TxdBuffer[20]=work.B.Low;
Com1_TxdBuffer[21]=work.B.High;
work.Word=theApp.vin;
Com1_TxdBuffer[22]=work.B.Low;
Com1_TxdBuffer[23]=work.B.High;
Com1_TxdBuffer[24]=0;
Com1_TxdBuffer[25]=0;
Com1_TxdBuffer[26]=0;
Com1_TxdBuffer[27]=0;
EscapeCommFunction(Com1_idComDev,SETRTS);//置发送允许,但是不发送
ch=0;
for (i=1; i<28; i++) ch=ch+Com1_TxdBuffer[i];
Com1_TxdBuffer[28]=ch;
Com1_dwLengthTX=(DWORD)29;
Com1_WorkStatus = NOUSER; //0x4000;
break;
case 0x02: //召唤VFDS参数
Com1_TxdBuffer[1]=0x19; //len
Com1_TxdBuffer[2]=0x02; //cmd
ch=0;
if(theApp.pid_switch!=0) ch=ch | 0x01;
else ch=ch & 0xfe;
if(theApp.yxtask.BitTestChar(theApp.yxtask.yxbuf,130)) ch=ch | 0x02;
else ch=ch & 0xfd;
if(theApp.yxtask.BitTestChar(theApp.yxtask.yxbuf,131)) ch=ch | 0x04;
else ch=ch & 0xfb;
if(theApp.yxtask.BitTestChar(theApp.yxtask.yxbuf,132)) ch=ch | 0x08;
else ch=ch & 0xf7;
if(theApp.yxtask.BitTestChar(theApp.yxtask.yxbuf,133)) ch=ch | 0x10;
else ch=ch & 0xef;
if(theApp.WorkMode!=0) ch=ch | 0x20;
else ch=ch & 0xdf;
if(theApp.SelfCheckFlag!=0) ch=ch | 0x80;
else ch=ch & 0x7f;
Com1_TxdBuffer[3]=ch;
Com1_TxdBuffer[4]=theApp.ykout[0];//ykout0
Com1_TxdBuffer[5]=theApp.ykout[1];//ykout1
Com1_TxdBuffer[6]=theApp.ykout[2];//ykout1
Com1_TxdBuffer[7]=theApp.ykout[3];//ykout1
work.Word=theApp.vfds0_Frequency;
if(work.Word>5000)work.Word=5000;
Com1_TxdBuffer[8]=work.B.Low;
Com1_TxdBuffer[9]=work.B.High;
Com1_TxdBuffer[10]=theApp.vfds0_control;
work.Word=theApp.vfds1_Frequency;
if(work.Word>5000)work.Word=5000;
Com1_TxdBuffer[11]=work.B.Low;
Com1_TxdBuffer[12]=work.B.High;
Com1_TxdBuffer[13]=theApp.vfds1_control;
work.Word=theApp.vfds2_Frequency;
if(work.Word>5000)work.Word=5000;
Com1_TxdBuffer[14]=work.B.Low;
Com1_TxdBuffer[15]=work.B.High;
Com1_TxdBuffer[16]=theApp.vfds2_control;
work.Word=theApp.vfds3_Frequency;
if(work.Word>5000)work.Word=5000;
Com1_TxdBuffer[17]=work.B.Low;
Com1_TxdBuffer[18]=work.B.High;
Com1_TxdBuffer[19]=theApp.vfds3_control;
work.Word=theApp.vout;
Com1_TxdBuffer[20]=work.B.Low;
Com1_TxdBuffer[21]=work.B.High;
work.Word=theApp.vin;
Com1_TxdBuffer[22]=work.B.Low;
Com1_TxdBuffer[23]=work.B.High;
Com1_TxdBuffer[24]=0;
Com1_TxdBuffer[25]=0;
Com1_TxdBuffer[26]=0;
Com1_TxdBuffer[27]=0;
EscapeCommFunction(Com1_idComDev,SETRTS);//置发送允许,但是不发送
ch=0;
for (i=1; i<28; i++) ch=ch+Com1_TxdBuffer[i];
Com1_TxdBuffer[28]=ch;
Com1_dwLengthTX=(DWORD)29;
Com1_WorkStatus = NOUSER; //0x4000;
break;
case 0x03: //PID参数下装
if(theApp.Pid_Channel>7) theApp.Pid_Channel=0;
Com1_TxdBuffer[1]=0x39; //len 57字节
Com1_TxdBuffer[2]=0x06; //cmd
Com1_TxdBuffer[3]=theApp.Pid_Channel;
para.integer=0;
para.integer=theApp.p_gain[theApp.Pid_Channel];
Com1_TxdBuffer[4]=para.B.B0;
Com1_TxdBuffer[5]=para.B.B1;
Com1_TxdBuffer[6]=para.B.B2;
Com1_TxdBuffer[7]=para.B.B3;
para.integer=theApp.i_gain[theApp.Pid_Channel];
Com1_TxdBuffer[8] =para.B.B0;
Com1_TxdBuffer[9] =para.B.B1;
Com1_TxdBuffer[10]=para.B.B2;
Com1_TxdBuffer[11]=para.B.B3;
para.integer=theApp.d_gain[theApp.Pid_Channel];
Com1_TxdBuffer[12] =para.B.B0;
Com1_TxdBuffer[13] =para.B.B1;
Com1_TxdBuffer[14]=para.B.B2;
Com1_TxdBuffer[15]=para.B.B3;
para.integer=theApp.acc_ff[theApp.Pid_Channel];
Com1_TxdBuffer[16]=para.B.B0;
Com1_TxdBuffer[17]=para.B.B1;
Com1_TxdBuffer[18]=para.B.B2;
Com1_TxdBuffer[19]=para.B.B3;
para.integer=theApp.fri_ff[theApp.Pid_Channel];
Com1_TxdBuffer[20]=para.B.B0;
Com1_TxdBuffer[21]=para.B.B1;
Com1_TxdBuffer[22]=para.B.B2;
Com1_TxdBuffer[23]=para.B.B3;
para.integer=theApp.vel_ff[theApp.Pid_Channel];
Com1_TxdBuffer[24]=para.B.B0;
Com1_TxdBuffer[25]=para.B.B1;
Com1_TxdBuffer[26]=para.B.B2;
Com1_TxdBuffer[27]=para.B.B3;
para.integer=theApp.hold[theApp.Pid_Channel];
Com1_TxdBuffer[28]=para.B.B0;
Com1_TxdBuffer[29]=para.B.B1;
Com1_TxdBuffer[30]=para.B.B2;
Com1_TxdBuffer[31]=para.B.B3;
para.integer=theApp.bias[theApp.Pid_Channel];
Com1_TxdBuffer[32]=para.B.B0;
Com1_TxdBuffer[33]=para.B.B1;
Com1_TxdBuffer[34]=para.B.B2;
Com1_TxdBuffer[35]=para.B.B3;
para.integer=theApp.accel[theApp.Pid_Channel];
Com1_TxdBuffer[36]=para.B.B0;
Com1_TxdBuffer[37]=para.B.B1;
Com1_TxdBuffer[38]=para.B.B2;
Com1_TxdBuffer[39]=para.B.B3;
switch(theApp.Pid_Channel)
{
case 0x00:theApp.setpt[0]=(int)(theApp.sl_temper_set*10);
break;
case 0x01:theApp.setpt[1]=(int)(theApp.rh1_temper_set*10);
break;
case 0x02:theApp.setpt[2]=(int)(theApp.rh2_temper_set*10);
break;
case 0x03:theApp.setpt[3]=(int)(theApp.rh3_temper_set*10);
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -