📄 plc2.cpp
字号:
// Plc.cpp: implementation of the CPlc class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "PLC.h"
#include "Plc2.h"
//#include "Mainfrm.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//extern CPLCConctView* m_GpView;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CPlc2::CPlc2()
{
m_RcvPress=0;
flag=FALSE;
m_datapr.SetSize(11);
FunNo=0;
Syn_Steps_Count=0;
}
CPlc2::~CPlc2()
{
}
/*//////////////////////////////////////////////////////////////////////////////////
BYTE bFunc是输入的功能号信息
char dData是相对应的数据串
/////////////////////////////////////////////////////////////////////////////////*/
void CPlc2::PLCSend(unsigned char lpFunc,char *pData)
{
unsigned char checksum=0, buf[11]={0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe}; // 内部用的缓冲区
buf[3]=lpFunc;
for(int i=0;i<9;i++)
checksum+=buf[i];
if (checksum==0xfe)
checksum=0x7d;
buf[9]=checksum;
// memcpy(m_datapr,buf,11);///////?????????????
for(int ii=0;ii<11;ii++)
m_datapr[ii]=buf[ii];
}
bool CPlc2::PLCRcv(BYTE *bData,int count)
{
WORD tmpword=0;
int ii=0,iget=0;
BYTE bread[15];
while( !(bData[ii]==0x2d&& bData[ii+1]==0x00&& bData[ii+2]==0x00) && ii<count-9)////寻找数据包头
ii++;
if(ii<count-9)
{
for(;ii<count;ii++)
{
bread[iget]=bData[ii];
iget++;
if(iget>14)
break;
}
}
else return FALSE;
/////再找数据包尾
if(bread[10]!=0xfe)
return FALSE;
///////正确性检查
if(!Check(bread))
return FALSE;
///////若正确性检查通过,则可以取出数据包中的数据
///////
//读取压力
m_RcvPress=bread[3];
return TRUE;
}
///////正确性检查
BOOL CPlc2::Check(BYTE *lpBuf)
{
BYTE ch=0,crc_char=lpBuf[9];
int ii=0;
while(ii<9)
{
ch+=lpBuf[ii];
ii++;
}
if(ch==crc_char || (ch==0xfe && crc_char==0x7d))
return TRUE;
else
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -