亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dsx01pro.cpp

?? 組態王驅動開發包
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// DSX01Pro.cpp : implementation file
//

#include "stdafx.h"
#include "DSX01.h"
#include "DSX01Pro.h"
#include "reg.h"
#include "math.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//#ifndef   TEST_ShowMessage
//#define  TEST_ShowMessage
//#endif

#ifndef  TEST_ShowMessage 
#define    ShowMessage  TRACE
#endif

#ifdef   TEST_ShowMessage 
void ShowMessage( const char* msg);
void ConVertBufToShowMessage(char * BufBeforeConVert, char * BufAfterConVert, int ConVertlong);
#define WM_MESSAGE_OUTPUT WM_USER+50
#endif

/////////////////////////////////////////////////////////////////////////////
// DSX01Pro

IMPLEMENT_DYNCREATE(DSX01Pro, CCmdTarget)

DSX01Pro::DSX01Pro()
{
	EnableAutomation();
	
	// To keep the application running as long as an OLE automation 
	//	object is active, the constructor calls AfxOleLockApp.

	m_nTimeOut =5000;
	m_nLastErrorCode = -1;
	m_hComm = INVALID_HANDLE_VALUE; 	
	
	AfxOleLockApp();
}

DSX01Pro::~DSX01Pro()
{
	// To terminate the application when all objects created with
	// 	with OLE automation, the destructor calls AfxOleUnlockApp.

	if(m_hComm != INVALID_HANDLE_VALUE)
	{
		CloseHandle(m_hComm);
		m_hComm = INVALID_HANDLE_VALUE;
	}		
	
	AfxOleUnlockApp();
}


void DSX01Pro::OnFinalRelease()
{
	// When the last reference for an automation object is released
	// OnFinalRelease is called.  The base class will automatically
	// deletes the object.  Add additional cleanup required for your
	// object before calling the base class.

	CCmdTarget::OnFinalRelease();
}


BEGIN_MESSAGE_MAP(DSX01Pro, CCmdTarget)
	//{{AFX_MSG_MAP(DSX01Pro)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BEGIN_DISPATCH_MAP(DSX01Pro, CCmdTarget)
	//{{AFX_DISPATCH_MAP(DSX01Pro)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()

// Note: we add support for IID_IDSX01Pro to support typesafe binding
//  from VBA.  This IID must match the GUID that is attached to the 
//  dispinterface in the .ODL file.

// {E2F453A8-11FF-489D-8463-94172D8A334B}
static const IID IID_IDSX01Pro =
{ 0xe2f453a8, 0x11ff, 0x489d, { 0x84, 0x63, 0x94, 0x17, 0x2d, 0x8a, 0x33, 0x4b } };

BEGIN_INTERFACE_MAP(DSX01Pro, CCmdTarget)
	INTERFACE_PART(DSX01Pro, IID_IDSX01Pro, Dispatch)
	INTERFACE_PART(DSX01Pro, IID_ProtocolImp, ProtocolImp)
END_INTERFACE_MAP()

// {DDCDB353-BDFD-4A55-A0DD-8A6308070AA5}
IMPLEMENT_OLECREATE(DSX01Pro, "DSX01.DSX01Pro", 0xddcdb353, 0xbdfd, 0x4a55, 0xa0, 0xdd, 0x8a, 0x63, 0x8, 0x7, 0xa, 0xa5)

/////////////////////////////////////////////////////////////////////////////
// DSX01Pro message handlers
STDMETHODIMP_(ULONG) DSX01Pro::XProtocolImp::AddRef(void)
{
    METHOD_PROLOGUE(DSX01Pro, ProtocolImp);
    return pThis->ExternalAddRef();
}

STDMETHODIMP_(ULONG) DSX01Pro::XProtocolImp::Release(void)
{
    METHOD_PROLOGUE(DSX01Pro, ProtocolImp);
    return pThis->ExternalRelease();
}

STDMETHODIMP DSX01Pro::XProtocolImp::QueryInterface(REFIID iid, void FAR* FAR* ppvObj)
{
    METHOD_PROLOGUE(DSX01Pro, ProtocolImp);
    return pThis->ExternalQueryInterface(&iid, ppvObj);
}

STDMETHODIMP_(BOOL) DSX01Pro::XProtocolImp::TryConnect( char * pDeviceName, int nUnitAddr, LPVOID lpDevAddr )
{
    METHOD_PROLOGUE(DSX01Pro, ProtocolImp);

	PPACKET   pPac = new PACKET;
	IdNo     *pTempIdNo = new IdNo;
	pPac->nPacketType = PT_READ;
	pPac->nRegType = 0;
	pPac->nUnitNo = nUnitAddr;
	pPac->nStartNo = 0;
	pPac->nEndNo = 0;

	pTempIdNo->wNo = pPac->nStartNo;
	pTempIdNo->wDataType = FLOAT_DATATYPE;

	pPac->varList.AddTail(pTempIdNo);
	if(ProcessPacket( pPac ))
	{
		delete   pPac;
		delete   pTempIdNo;
		return   TRUE;
	}
	else
	{
		delete   pPac;
		delete   pTempIdNo;
		return   FALSE;
	}		
}

STDMETHODIMP_(BOOL) DSX01Pro::XProtocolImp::StrToDevAddr( const  char * str,LPVOID lpDevAddr)
{
    METHOD_PROLOGUE(DSX01Pro, ProtocolImp); 
	DEVADDR * pDevAddr =(DEVADDR *) lpDevAddr;

	int len=strlen(str);	
	WORD addr=0;

//	_strupr(str);

	for(int i=0;i<len;i++) 
	{
		if( !isdigit(str[i]) )
		{
			pThis->m_nLastErrorCode = USER_ADDR_SCOPE_ERROR;
			return FALSE;
		}
	}
	addr=(WORD)atoi(str);
	if(addr<128 || addr>255)
	{
		pThis->m_nLastErrorCode = USER_ADDR_SCOPE_ERROR;
		return FALSE;
	}
	
	pDevAddr->nDevAddr = addr;

	return  TRUE;
}

STDMETHODIMP_(char *) DSX01Pro::XProtocolImp::GetLastError()
{
    METHOD_PROLOGUE(DSX01Pro, ProtocolImp);
	
	if(pThis->m_nLastErrorCode != -1)
		return Error_Message_Table[pThis->m_nLastErrorCode];
	else
		return NULL;
}

STDMETHODIMP_(BOOL) DSX01Pro::XProtocolImp::OpenComDevice( int nDeviceType, LPVOID lpInitData)
{
    METHOD_PROLOGUE(DSX01Pro, ProtocolImp); 
	
	ASSERT( nDeviceType == SERIAL_DEV_TYPE );
	
	return pThis->InitialComm( lpInitData );

/*	char szPort[8]; 
	int Flag = 1;
	ComDevice *pcc = (ComDevice *)lpInitData;   
    if(pcc->isRs232 != RS232)
	{
		pcc->isRs232 = RS485;
	    pThis->m_nCommType=RS485;/*XCL  添加*/
//	}
/*	if((pcc->baudRate<9600)||(pcc->baudRate)>57600)
	{ 	
		TRACE( "Error Config for Commounication .\n" );
		pThis->m_nLastErrorCode = COMMUNICATION_CONFIG_ERROR;
		return FALSE;
	}  
	pThis->m_nTimeOut = pcc->timeOut;
	strcpy(szPort, pcc->deviceName);
    HANDLE hComm;
	hComm = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE, 0, 
		NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL , NULL );
	if ( INVALID_HANDLE_VALUE==hComm )
	{
		TRACE( "Error in open COM port.\n" );
		pThis->m_nLastErrorCode = FAILED_OPEN_COM; 
		return FALSE; 
	}
//	SetupComm( hComm, RX_QUEU, TX_QUEU );
	SetupComm( hComm, 512, 512 );
	
	DCB dcb;
	GetCommState( hComm, &dcb );
	dcb.BaudRate = (WORD)pcc->baudRate;
	dcb.ByteSize =  (BYTE)pcc->dataBits;      
	dcb.StopBits =  ONESTOPBIT;      
	dcb.Parity   =  (BYTE)pcc->parity;
	if ( !SetCommState( hComm, &dcb ) )
	{
		CloseHandle( hComm );
		TRACE( "Error in SetCommDcb.\n" );
//        pThis->m_nLastErrorCode = FAILED_INITIALIZED_COM;
		return FALSE;
	}	
    PurgeComm( hComm, PURGE_TXABORT | PURGE_RXABORT |
		PURGE_TXCLEAR | PURGE_RXCLEAR ) ;
	
	COMMTIMEOUTS CommTimeOuts;
    CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF ;
    CommTimeOuts.ReadTotalTimeoutMultiplier = 0 ;
    CommTimeOuts.ReadTotalTimeoutConstant = 0 ;
    CommTimeOuts.WriteTotalTimeoutMultiplier = 5;
    CommTimeOuts.WriteTotalTimeoutConstant = 0 ;
    SetCommTimeouts( hComm, &CommTimeOuts ) ;
	
	pThis->m_hComm = hComm;
	return  TRUE;*/
}

STDMETHODIMP_(BOOL) DSX01Pro::XProtocolImp::CloseComDevice()
{
    METHOD_PROLOGUE(DSX01Pro, ProtocolImp);
	
	if(pThis->m_hComm != INVALID_HANDLE_VALUE)
	{
		CloseHandle( pThis->m_hComm );
		pThis->m_hComm = INVALID_HANDLE_VALUE;
	}
    return TRUE;
}

STDMETHODIMP_(BOOL) DSX01Pro::XProtocolImp::InitialDevice(char *  pDeviceName, int nUnitAddr, LPVOID lpDevAddr)
{
    METHOD_PROLOGUE(DSX01Pro, ProtocolImp);
	return TRUE;
}


BOOL DSX01Pro::PhysicalReceive(char * pReceive, int & nLen)
{
	DWORD  dwError;
	COMSTAT	cs;
	DWORD dwTimeOut=GetTickCount()+m_nTimeOut;
	ULONG   nByteRead = 0;
	int     RecLen = 0;
	char cTemp[1024];
	memset(cTemp,0,sizeof(cTemp));

	while(TRUE)
	{
		if(GetTickCount() > dwTimeOut)
		{
//			m_nLastErrorCode = TIME_OUT_ERROR;
			TRACE("Time Out!\n");
			return FALSE;
		}
		ClearCommError( m_hComm, &dwError, &cs );

//		if(cs.cbInQue > 1024)
//			RecLen = 1024;
//		else 
//			RecLen = cs.cbInQue;

		if ( cs.cbInQue )
		{
			BOOL bReadSuc = ReadFile(m_hComm, cTemp, cs.cbInQue, &nByteRead, NULL);
			if ( bReadSuc  )
			{
				memcpy(pReceive,cTemp,nByteRead);
				nLen = (int) nByteRead;
//				TRACE("receive  %s\n",pReceive);
				
			}
			return  TRUE;
		}			//for(i=0;i<strlen(pReceive)
//		if(pReceive[nLen-1]==0x0A) 
//			return TRUE;
	}
	return FALSE;
}

STDMETHODIMP_(int) DSX01Pro::XProtocolImp::LoadDeviceInfo( const char *sProd, const char *sDevName, int nType )
{
    METHOD_PROLOGUE(DSX01Pro, ProtocolImp);
	
	return  TRUE;
}

STDMETHODIMP_(BOOL) DSX01Pro::XProtocolImp::GetRegisters(char *szDeviceName,LPVOID * ppRegs, int *pRegNum)
{	
    METHOD_PROLOGUE(DSX01Pro, ProtocolImp);
		*ppRegs = (LPVOID)&gsRegInfos;
		*pRegNum = REG_TYPE_NUM;
	
	return TRUE;
}

STDMETHODIMP_(BOOL) DSX01Pro::XProtocolImp:: AddVarToPacket( LPVOID lpVar, int nVarAccessType,LPVOID lpPacket)
{
	METHOD_PROLOGUE(DSX01Pro, ProtocolImp);
	
    PPACKET pPack = (PACKET *)lpPacket;
    PPLCVAR pVar = (PLCVAR *)lpVar;

	int nTotalNo;

	if((nVarAccessType == pPack->nPacketType)&&(pPack->nUnitNo == pVar->nUnitNo)
        && (pPack->nRegType == pVar->nRegType))
	{
		if ( nVarAccessType == PT_WRITE )
		{
			if ( pVar->nNo == pPack->nStartNo )  
				return TRUE;
			else  
				return FALSE;
		}
	  //Read Operate 
		if ( pVar->nNo<pPack->nStartNo )
		{//Graph:		-----no-------Start================End----------
			nTotalNo = pPack->nEndNo - pVar->nNo + 1;
			if ( nTotalNo <= MAX_PACKET_NUM )
			{
				pPack->nStartNo = pVar->nNo;	
				return TRUE;
			}
		}
		else if ( pVar->nNo > pPack->nEndNo )
		{//Graph:		------------Start================End----no------
			nTotalNo = pVar->nNo - pPack->nStartNo + 1;
			if ( nTotalNo <= MAX_PACKET_NUM )
			{
				pPack->nEndNo = pVar->nNo;
				return TRUE;
			}
		}
		else
		{//Graph:		------------Start====no============End----------
			return TRUE;
		}		
	}
	return FALSE;		
}

STDMETHODIMP_(WORD) DSX01Pro::XProtocolImp:: ConvertUserConfigToVar( LPVOID lpDbItem, LPVOID lpVar )
{
	METHOD_PROLOGUE(DSX01Pro, ProtocolImp);
	
	MiniDbItem * pTheDbItem = (MiniDbItem*)lpDbItem;
	CString strRegName;
	
	CString strDevName(pTheDbItem->szDevName);
	strRegName = pTheDbItem->szRegister;      
	
	if(pThis->MyConvert( lpDbItem, lpVar,
		gsRegInfos, REG_TYPE_NUM))
		return 1;
	return 0;
}

STDMETHODIMP_(int) DSX01Pro::XProtocolImp:: ProcessPacket( LPVOID lpPacket )
{
    METHOD_PROLOGUE(DSX01Pro, ProtocolImp);
	

	PPACKET pPac = (PPACKET) lpPacket;

	POSITION position =  pPac->varList.GetHeadPosition();
	ID_NO* idNo = (ID_NO*)pPac->varList.GetNext(position);
	
	char Readbuffer[1024];	
	char SendBuffer[64];
	char pData[1024];
		
	DWORD    dwTimeOutTick = 0;
	BOOL     bTimeOut = FALSE;

    int  nLen=0;
	int  nReceiveLen = 0;
	int  nByteRead = 0;
	int  ret = 0;
	int  bError  = 0;
	int  bPacSuc = 0;	

	memset(Readbuffer,0,sizeof(Readbuffer));	
	memset(SendBuffer,0,sizeof(SendBuffer));	
	memset(pData,0,sizeof(pData));	
	
	if(PT_WRITE == pPac->nPacketType)//寫數據
	{
		pThis->m_nLastErrorCode = DONOT_WRITE; 
		return  FALSE;
	}	
	
	pThis->GetSendString(pPac,SendBuffer, nLen);
	
	ASSERT(nLen > 0);

	pThis->PhysicalSend(SendBuffer, nLen);
	
	TRACE("Send %s\n",SendBuffer+1);

	Sleep(100);

	dwTimeOutTick = GetTickCount() + pThis->m_nTimeOut;
	
	while ( TRUE )
	{					
		if( pThis->PhysicalReceive( Readbuffer, nByteRead ) )
		{					
			memcpy( pData+nReceiveLen, Readbuffer, nByteRead );
			/*	for (int i=0;i<nByteRead;i++)
			{
			TRACE("%x,",Readbuffer[i]);					
			}
			TRACE("\n");*/
			TRACE("receive %s\n",Readbuffer);
			
			nReceiveLen+= nByteRead;
			pData[nReceiveLen] = 0;
			
			ret = pThis->PreProcessData(pPac, pData, nReceiveLen, nByteRead);
			//#ifdef _DEBUG
			//ret = RECEIVE_RECEIVED;//test
			//#endif
			if(ret == RECEIVE_RECEIVED)
			{
				//					receivetime = GetTickCount() - (dwTimeOutTick - pThis->m_nTimeOut);
				break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合成人精品亚洲另类欧美| 亚洲欧美一区二区不卡| 国产精品久久久一本精品| 午夜影院久久久| 91麻豆蜜桃一区二区三区| 欧美电影免费观看高清完整版在线观看 | 91在线播放网址| 精品精品国产高清a毛片牛牛| 欧美视频第二页| 日韩一区二区中文字幕| 亚洲综合色噜噜狠狠| 成人免费三级在线| 精品电影一区二区| 日韩精品久久久久久| 91女神在线视频| 国产精品免费aⅴ片在线观看| 久久99国产精品久久| 正在播放亚洲一区| 一区二区三区四区亚洲| 91在线视频在线| 亚洲国产精品传媒在线观看| 国产一区二区在线免费观看| 日韩三级精品电影久久久 | 欧美中文字幕久久| 中文字幕在线一区免费| 成人国产亚洲欧美成人综合网| 亚洲精品一区二区三区精华液 | 激情亚洲综合在线| 精品免费99久久| 黄页网站大全一区二区| 精品久久久三级丝袜| 精品无人区卡一卡二卡三乱码免费卡| 欧美一区二区三区免费大片| 日本va欧美va精品发布| 91精品国产91久久久久久一区二区| 亚洲高清久久久| 欧美日本一区二区| 奇米精品一区二区三区在线观看一| 欧美日韩中字一区| 日韩在线一二三区| 欧美精品一区二区三区一线天视频| 另类中文字幕网| 久久久www成人免费毛片麻豆| 高清不卡在线观看| 亚洲欧美视频一区| 欧美精品一级二级| 久久精品国产999大香线蕉| 久久久久久**毛片大全| gogogo免费视频观看亚洲一| 亚洲另类色综合网站| 欧美三级电影在线看| 久久精品国产99国产精品| 亚洲国产精品激情在线观看| 日本高清成人免费播放| 偷拍一区二区三区四区| 精品国产sm最大网站免费看| 从欧美一区二区三区| 亚洲一区二区高清| 欧美成人精品1314www| 成人永久免费视频| 亚洲福利视频三区| 精品乱人伦一区二区三区| 成人av片在线观看| 亚洲高清不卡在线观看| 国产亲近乱来精品视频| 日本电影欧美片| 捆绑调教一区二区三区| 中文字幕亚洲视频| 日韩欧美色电影| 99riav久久精品riav| 蜜臀va亚洲va欧美va天堂| 中文无字幕一区二区三区| 欧美日韩国产首页| 不卡欧美aaaaa| 麻豆精品一区二区av白丝在线| 欧美激情一区二区三区在线| 欧美丰满少妇xxxbbb| 成人自拍视频在线| 美女任你摸久久| 一区二区三区久久| 国产女人水真多18毛片18精品视频 | 日韩欧美一二三四区| 91麻豆国产精品久久| 久久99精品久久只有精品| 亚洲日本在线a| 久久女同互慰一区二区三区| 欧美日韩在线三级| 99久久久久久99| 激情久久五月天| 视频一区欧美精品| 亚洲天堂久久久久久久| 久久久久久亚洲综合| 4438x成人网最大色成网站| 91女神在线视频| 成人性生交大片免费看中文网站| 久久精品久久精品| 日韩av一级片| 午夜精品视频一区| 一区二区欧美国产| 亚洲视频精选在线| 亚洲国产成人午夜在线一区| 精品国产一区二区三区四区四 | 91国偷自产一区二区三区成为亚洲经典 | a级精品国产片在线观看| 国模一区二区三区白浆| 美腿丝袜亚洲综合| 五月婷婷欧美视频| 丝袜a∨在线一区二区三区不卡 | 欧美国产欧美综合| 欧美mv和日韩mv国产网站| 欧美一a一片一级一片| 91免费国产视频网站| 一本高清dvd不卡在线观看| 99精品视频一区二区| 成人精品一区二区三区中文字幕| 国产成人在线免费| 国产成人在线视频免费播放| 成人午夜视频网站| 成人av免费在线| 色国产综合视频| 欧美日韩精品欧美日韩精品| 欧美日韩电影在线播放| 国产欧美精品一区二区三区四区 | 91精品国产色综合久久| 3d动漫精品啪啪一区二区竹菊| 欧美日韩国产综合一区二区三区 | 欧美视频在线观看一区二区| 欧美亚洲高清一区| 欧美日本一道本| 日韩免费性生活视频播放| 久久婷婷国产综合国色天香| 欧美韩日一区二区三区| 亚洲婷婷国产精品电影人久久| 亚洲综合一二三区| 日本不卡视频在线| 国产麻豆视频精品| 91色.com| 日韩精品最新网址| 欧美国产日韩在线观看| 一区二区三区在线观看动漫| 午夜一区二区三区视频| 国产综合色视频| 色综合色综合色综合色综合色综合 | 亚洲成人av一区二区| 美女在线一区二区| 国产东北露脸精品视频| 在线观看日韩国产| 日韩欧美一卡二卡| 亚洲图片另类小说| 日韩精品电影在线| 成人一区二区三区视频在线观看| 在线观看日产精品| 久久夜色精品一区| 一区二区三区中文免费| 成人免费视频网站在线观看| 99视频精品全部免费在线| 91福利社在线观看| 精品伦理精品一区| 中文字幕免费不卡| 亚洲一区二区av电影| 久久99深爱久久99精品| 99视频热这里只有精品免费| 欧美一级艳片视频免费观看| 亚洲国产精品v| 免费观看在线色综合| 色呦呦网站一区| 久久久久免费观看| 视频一区二区三区入口| www.成人网.com| 精品理论电影在线| 亚洲一区二区高清| 成人av影院在线| 日韩欧美国产成人一区二区| 一区二区三区在线观看欧美| 国产成人精品1024| 欧美精品一区二区三区高清aⅴ | 国产精品国产三级国产专播品爱网| 图片区日韩欧美亚洲| 色先锋资源久久综合| 国产精品丝袜久久久久久app| 奇米精品一区二区三区四区 | xfplay精品久久| 日本亚洲欧美天堂免费| 欧美中文字幕一二三区视频| 亚洲国产成人一区二区三区| 国产精品亚洲午夜一区二区三区| 777午夜精品视频在线播放| 亚洲影院在线观看| 色综合久久久久综合| 亚洲三级电影网站| 91一区二区三区在线观看| 最新日韩av在线| 福利电影一区二区三区| 欧美videos大乳护士334| 天堂va蜜桃一区二区三区漫画版| 国产不卡视频一区二区三区| 国产视频不卡一区| 久久成人麻豆午夜电影| 欧美日韩精品一区二区三区| 午夜电影一区二区|