📄 plcdlg.cpp
字号:
return Result;
}
//拷贝字符
int CPLCDlg::CopyData(unsigned char Des[], unsigned char Src[], int Pos, int length)
{
int Result=0;
for(int i=0;i<length;i++)
Des[i]=Src[Pos+i];
return Result;
}
//处理接收到的数据。非常关键
//按照帧处理
//防错的处理?
//目标:如果出现错误,不会影响下一帧。已实现
//及时显示警告信息等
int CPLCDlg::DisposeData(unsigned char Org_Data[],int length,CString str_Command,unsigned char Flag)
{
int Rslt=0;
{
int iFlag=Flag; //判断标志
unsigned char tmp[256];
memset(tmp,0,256);
CopyData(tmp,Org_Data,0,length); //当前收到的数据
switch(iFlag)
{
case 9: //运行plc
{
int Result=DetectPlcRun(tmp,length);
if(Result==0)//如果出现错误
{
ErrorNum_PlcRun++;
Status_Plc=false;
}
if(Result==1)
{
Status_Plc=true;
ErrorNum_PlcRun=0;
}
break;
}
case 10://停止plc
{
int Result=GetPlc_Data(tmp,length);
if(Result==0)//如果出现错误
{
//报警
ErrorNum_PlcStp++;
Status_Plc=false;
// CString Name;
// if(ErrorNum_PlcStp>1)
// Name.Format("停止命令错误,连续错误%d次",ErrorNum_PlcStp);
}
else
{
Status_Plc=true;
ErrorNum_PlcStp=0;
}
break;
}
case 11: //Y输出
{
char tm[2];
tm[0]=str_Command.GetAt(11);
tm[1]=str_Command.GetAt(12);
unsigned short Num=atoi(tm);
unsigned short Num_Dis=Num;
if(Num>=10)
Num-=2;
int Result=GetPlc_Data(tmp,length);
if(Result==0)//如果出现错误
{
//报警
ErrorNum_YOpen[Num]++;
Status_Plc=false;
}
else
{
Status_Plc=true;
ErrorNum_YOpen[Num]=0;
}
break;
}
case 12: //Y关闭
{
char tm[2];
tm[0]=str_Command.GetAt(11);
tm[1]=str_Command.GetAt(12);
unsigned short Num=atoi(tm);
unsigned short Num_Dis=Num;
if(Num>=10)
Num-=2;
int Result=GetPlc_Data(tmp,length);
if(Result==0)//如果出现错误
{
ErrorNum_YClose[Num]++;
Status_Plc=false;
}
else
{
Status_Plc=true;
ErrorNum_YClose[Num]=0;
}
break;
}
case 14://测试plc通信是否正常
{
int Result=TestPlc(tmp,length);
if(Result==0)
{
Status_Plc=false;
ErrorNum_PlcTT++;
}
else
{
ErrorNum_PlcTT=0;
Status_Plc=true;
}
break;
}
case 15://获取X的状态
{
int Result=GetPlc_Status_X(tmp,length);
if(Result==0)
{
Status_Plc=false;
ErrorNum_Status_X++;
}
else
{
Status_Plc=true;
ErrorNum_Status_X=0;//重新归零
}
break;
}
case 16://获取Y的状态
{
int Result=GetPlc_Status_Y(tmp,length);
if(Result==0)
{
Status_Plc=false;
ErrorNum_Status_Y++;
}
else
{
Status_Plc=true;
ErrorNum_Status_Y=0;
}
break;
}
default:
break;
}
}
return Rslt;
}
//得到Plc的值
int CPLCDlg::GetPlc_Data(unsigned char data[],int length)
{
int Result=0;
unsigned char RecStdData[5]={0X06,0X30,0X31,0X46,0X46};
if(length!=5)
return Result;
for(int i=0;i<length;i++)
{
unsigned char a=data[i];
unsigned char b=RecStdData[i];
if(a!=b)
return Result;
}
Result=1;
return Result;
}
//监测plc是否运行
//0-------没有成功运行
//1-------成功执行了运行命令
//2-------plc已经在运行了.
int CPLCDlg::DetectPlcRun(unsigned char data[], int length)
{
int Result=0;
unsigned char RecStdData[5]={0X06,0X30,0X31,0X46,0X46};
if(length<5)
return Result;
if(length==7)
{
Result=2;//已经运行了.
return Result;
}
for(int i=0;i<length;i++)
{
unsigned char a=data[i];
unsigned char b=RecStdData[i];
if(a!=b)
return Result;//没有运行
}
Result=1;//执行了运行命令
return Result;
}
int CPLCDlg::TestPlc(unsigned char data[],int length)
{
int Result=0;
for(int i=0;i<6;i++)
{
unsigned char RecD=data[7+i];
unsigned char StdD=Plc_TT[10+i];
if(RecD!=StdD)
{
return Result;
break;
}
}
Result=1;
return Result;
}
int CPLCDlg::GetPlc_Status_X(unsigned char data[], int length)
{
int Result=0;
if(length!=42)
return Result;
/*
好像没有多大必要逐位判断
unsigned char RecStdData[5]={0X02,0X30,0X31,0X46,0X46};
for(int i=0;i<5;i++)
{
unsigned char RecD=data[i];
unsigned char StdD=RecStdData[i];
if(RecD!=StdD)
{
return Result;
break;
}
}
*/
for(int i=0;i<24;i++)
Status_Plc_X[i]=data[i+5]-0X30;
Result=1;
return Result;
}
int CPLCDlg::GetPlc_Status_Y(unsigned char data[], int length)
{
int Result=0;
unsigned char RecStdData[5]={0X02,0X30,0X31,0X46,0X46};
for(int i=0;i<5;i++)
{
unsigned char RecD=data[i];
unsigned char StdD=RecStdData[i];
if(RecD!=StdD)
{
return Result;
break;
}
}
for(i=0;i<32;i++)
{
Status_Plc_Y[i]=data[i+5]-0X30;
Status_PLCY.Insert(i,Status_Plc_Y[i]);
}
Result=1;
return Result;
}
/*
以下为按钮事件
*/
//运行
void CPLCDlg::OnRun()
{
iRun = !iRun;
if(iRun == FALSE)
{
// m_Run.SetIcon(IDI_DOBYMAN);
SetDlgItemText(IDC_RUN,_T("运行"));
AddCommand(Plc_Run,8,5,9,1,0);//plc运行
}
else
{
SetDlgItemText(IDC_RUN,_T("停止"));
// m_AutoRun.SetIcon(IDI_AUTO);
AddCommand(Plc_Stp,8,5,10,1,0);
}
}
//顺序执行,先开后关
void CPLCDlg::OnShunxu()
{
/* for(int No=0;No<16;No++)
{
AddCommand(YOpen[No],16,5,11,1,0);
AddCommand(YClose[No],16,5,12,1,0);
}
*/
InitCommand();
}
//全关
void CPLCDlg::OnCloseall()
{
AddCommand(Command_CloseAll,31,5,18,1,0);
}
//全开
void CPLCDlg::OnOpenall()
{
AddCommand(Command_OpenAll,31,5,17,1,0);
}
void CPLCDlg::OnBtnY00()
{
if(Status_Plc_Y[0]==0)
AddCommand(YOpen[0],16,5,11,1,0);
else
AddCommand(YClose[0],16,5,12,1,0);
}
void CPLCDlg::OnBtnY01()
{
if(Status_Plc_Y[1]==0)
AddCommand(YOpen[1],16,5,11,1,0);
else
AddCommand(YClose[1],16,5,12,1,0);
}
void CPLCDlg::OnBtnY02()
{
if(Status_Plc_Y[2]==0)
AddCommand(YOpen[2],16,5,11,1,0);
else
AddCommand(YClose[2],16,5,12,1,0);
}
void CPLCDlg::OnBtnY03()
{
if(Status_Plc_Y[3]==0)
AddCommand(YOpen[3],16,5,11,1,0);
else
AddCommand(YClose[3],16,5,12,1,0);
}
void CPLCDlg::OnBtnY04()
{
if(Status_Plc_Y[4]==0)
AddCommand(YOpen[4],16,5,11,1,0);
else
AddCommand(YClose[4],16,5,12,1,0);
}
void CPLCDlg::OnBtnY05()
{
if(Status_Plc_Y[5]==0)
AddCommand(YOpen[5],16,5,11,1,0);
else
AddCommand(YClose[5],16,5,12,1,0);
}
void CPLCDlg::OnBtnY06()
{
if(Status_Plc_Y[6]==0)
AddCommand(YOpen[6],16,5,11,1,0);
else
AddCommand(YClose[6],16,5,12,1,0);
}
void CPLCDlg::OnBtnY07()
{
if(Status_Plc_Y[7]==0)
AddCommand(YOpen[7],16,5,11,1,0);
else
AddCommand(YClose[7],16,5,12,1,0);
}
void CPLCDlg::OnBtnY10()
{
if(Status_Plc_Y[8]==0)
AddCommand(YOpen[8],16,5,11,1,0);
else
AddCommand(YClose[8],16,5,12,1,0);
}
void CPLCDlg::OnBtnY11()
{
if(Status_Plc_Y[9]==0)
AddCommand(YOpen[9],16,5,11,1,0);
else
AddCommand(YClose[9],16,5,12,1,0);
}
void CPLCDlg::OnBtnY12()
{
if(Status_Plc_Y[10]==0)
AddCommand(YOpen[10],16,5,11,1,0);
else
AddCommand(YClose[10],16,5,12,1,0);
}
void CPLCDlg::OnBtnY13()
{
if(Status_Plc_Y[11]==0)
AddCommand(YOpen[11],16,5,11,1,0);
else
AddCommand(YClose[11],16,5,12,1,0);
}
void CPLCDlg::OnBtnY14()
{
if(Status_Plc_Y[12]==0)
AddCommand(YOpen[12],16,5,11,1,0);
else
AddCommand(YClose[12],16,5,12,1,0);
}
void CPLCDlg::OnBtnY15()
{
if(Status_Plc_Y[13]==0)
AddCommand(YOpen[13],16,5,11,1,0);
else
AddCommand(YClose[13],16,5,12,1,0);
}
void CPLCDlg::OnBtnY16()
{
if(Status_Plc_Y[14]==0)
AddCommand(YOpen[14],16,5,11,1,0);
else
AddCommand(YClose[14],16,5,12,1,0);
}
void CPLCDlg::OnBtnY17()
{
if(Status_Plc_Y[15]==0)
AddCommand(YOpen[15],16,5,11,1,0);
else
AddCommand(YClose[15],16,5,12,1,0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -