⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 developer.cpp

📁 组态软件中
💻 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 + -