📄 developer.cpp
字号:
#include "stdafx.h"
#include "Developer.h"
#include "XKeyAPI.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define WM_CUR_T_MSG (WM_USER+1)
#define WM_HIS_T_MSG (WM_USER+2)
CString strSpace ="a";
VOID OnCreate(CManager* pManager)
{
CheckLicensed(pManager->GetModuleName());
}
VOID OnBeforeScan(CManager* pManager)
{
pManager->SetDynamicPacket(false); //禁止动态分包
}
//所有点Load完毕后调用(动态分包后也调用)
VOID OnSortItem(CDevice* pDevice,
int& nFirstSortKeyword,
int& nSecondSortKeyword)
{
nFirstSortKeyword = 0;
nSecondSortKeyword =1;
}
//循环多次添加所有的点到各个包中(动态分包后也调用)
VOID OnItemToPacket(CPacket* pPacket, CItem* pItem)
{
if(pPacket->GetItemCount() ==0)
pPacket->AddItem(pItem);
else
if(pPacket->GetItem(0)->GetItemStru()->n[0] ==pItem->GetItemStru()->n[0])
pPacket->AddItem(pItem);
}
//每个包调用一次(动态分包后调用)
int OnCreatePacketLink( CPacket* pPacket, LPTSTR lpszSendString, int& nSendStringLen)
{
return SKIP;
}
//循环调度,形成数据请求命令串
int OnReadData(CPacket* pPacket, LPTSTR lpszSendString, int& nSendStringLen)
{
if (!Licensed())
{
return SKIP;
}
pPacket->GetDevice()->GetChannel()->ClearAcceptBuffer();
int nArray =pPacket->GetDevice()->GetCfgStru()->n[0];
int nVer =pPacket->GetDevice()->GetCfgStru()->n[1] ;// 获得ver
int nAdd =atoi(pPacket->GetDevice()->GetAddr());
//格式 SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM EOI
if(pPacket->GetItem(0)->GetItemStru()->n[0] ==0)
sprintf(lpszSendString,"%c%02X%02X%02X%02X%02X%02X%02X",0x7e,nVer,nAdd,0x46,0x42,0xe0,0x02,0x01);
else
sprintf(lpszSendString,"%c%02X%02X%02X%02X%02X%02X%02X",0x7e,nVer,nAdd,0x46,0x44,0xe0,0x02,0x01);
WORD wCheck =0;
for(int i=0;i<14;i++)
wCheck +=lpszSendString[i+1];
wCheck =(~wCheck) +1;
sprintf(lpszSendString+15,"%04X%c",wCheck,0x0d);
nSendStringLen =20;
return SEND|WAIT;
}
//发生数据下送时调用,形成数据下置命令串
int OnWriteData(CItem* pItem, LPCTSTR lpszWriteDataString, LPTSTR lpszSendString, int& nSendStringLen)
{ if (!Licensed())
{
return SKIP;
}
return 0;
}
//异步方式下判断是否完成数据的接收
BOOL OnIsResponseComplete(CDevice* pDevice, CPacket* pPacket,
CItem* pItem, LPCTSTR lpszResponseString,
INT nResponseStringLen,INT& nDeleteLen)
{
pPacket->SetReady();
int nHead;
int nADD =atoi(pDevice->GetAddr());
int nCount =pDevice->GetCfgStru()->n[0];
char chADD[10];
memset(chADD,0,10);
sprintf(chADD,"%02X",nADD);
for(int i=0; i<nResponseStringLen-1; i++)
{
if(lpszResponseString[i] == '~')
{
nHead = i;
break;
}
}
if(nHead < 0)
return FALSE;
lpszResponseString += nHead;
nResponseStringLen -= nHead;
int nEnd =-1;
for(i=0; i<nResponseStringLen; i++)
{
if(BYTE(lpszResponseString[i]) == 0x0d)
{
nEnd = i;
break;
}
}
if(nEnd < 0)
return FALSE;
lpszResponseString =lpszResponseString+19; // 直接指向数据区
char chTemp[5];
memset(chTemp,0,5);
int nTemp;
double fTemp;
if(pPacket->GetItem(0)->GetItemStru()->n[0] ==0)
{
for(int i=0;i<pPacket->GetItemCount();i++)
{
int nOff =pPacket->GetItem(i)->GetItemStru()->n[1];
CItem *pItem =pPacket->GetItem(i);
if(nOff <nCount)
{
memcpy(chTemp,lpszResponseString+4*nOff,4);
sscanf(chTemp,"%x",&nTemp);
fTemp =nTemp/1000.0;
pItem->SetData(fTemp);
}
else if (nOff>=nCount && nOff <(2*nCount))
{
memcpy(chTemp,lpszResponseString+2+4*nOff,4);
sscanf(chTemp,"%x",&nTemp);
fTemp =nTemp/100.0;
pItem->SetData(fTemp);
}
else if (nOff>=(2*nCount) && nOff <(2*nCount+3))
{
memcpy(chTemp,lpszResponseString+4+4*nOff,4);
sscanf(chTemp,"%x",&nTemp);
fTemp =nTemp/100.0;
pItem->SetData(fTemp);
}
}
}
else
{
for(int i=0;i<pPacket->GetItemCount();i++)
{
int nOff =pPacket->GetItem(i)->GetItemStru()->n[1];
CItem *pItem =pPacket->GetItem(i);
if(nOff <nCount)
{
memcpy(chTemp,lpszResponseString+nOff*2,2);
sscanf(chTemp,"%x",&nTemp);
pItem->SetData(nTemp);
}
else if (nOff>=nCount && nOff <(nCount*2))
{
memcpy(chTemp,lpszResponseString+nOff*2+2,2);
sscanf(chTemp,"%x",&nTemp);
pItem->SetData(nTemp);
}
else if (nOff>=(nCount*2) && nOff <(nCount*2+3))
{
memcpy(chTemp,lpszResponseString+nOff*2+4,2);
sscanf(chTemp,"%x",&nTemp);
pItem->SetData(nTemp);
}
}
}
nDeleteLen =-1;
return TRUE;
}
void OnClose(CManager* pManager)
{
}
//nlen 数组长度,data 要转存的数,nMulity要除的数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -