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

📄 comportdll.cpp

📁 EVC(嵌入式VC++)发的用于串口通信的程序
💻 CPP
字号:
// ComPortDLL.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "ComPortDLL.h"
#include "ComPort.h"

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

//CIniFile m_iniFile;
CComPort m_comPort;

bool m_bStart=false;
static void Mid(WCHAR* string,int nStart,int nLength,WCHAR *strDesc)
  {
    int sLen=wcslen(string);
    WCHAR sTemp[BUFFLINE]=L"\0";
    wcsncpy(sTemp,string+nStart,nLength);
    wcscpy(strDesc,sTemp);
  }

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH: //进程被创建
		case DLL_THREAD_ATTACH:  //线程被创建
		case DLL_THREAD_DETACH:  //进程被停止
		case DLL_PROCESS_DETACH: //线程被停止
			break;
    }
//	m_comport.OpenCommPort();

//////////////////////测试ini文件////////////
	WCHAR sVal[256];
	//CiniFile iniFile;
	m_iniFile.LoadIniFile(_T("\\ComConfig.ini"));

////////////////////////////////////////////////////////	
/*	m_iniFile.WriteKeyString(_T("COMM"),_T("ComPort"),_T("COM4"));
	m_iniFile.WriteKeyString(_T("COMM"),_T("BaudRate"),_T("38400"));
	m_iniFile.WriteKeyString(_T("COMM"),_T("ByteSize"),_T("8"));//可以直接写8
	m_iniFile.WriteKeyString(_T("COMM"),_T("StopBits"),_T("1"));
	m_iniFile.WriteKeyString(_T("COMM"),_T("Parity"),_T("0")); //NOPARITY

	m_iniFile.WriteKeyString(_T("CARD"),_T("TotalCount"),3);

	m_iniFile.WriteKeyString(_T("CARD"),_T("Add1"),2);//0x02
	m_iniFile.WriteKeyString(_T("CARD"),_T("Types1"),_T("AI8MA"));	
	m_iniFile.WriteKeyString(_T("CARD"),_T("CHANNEL1"),8);
	m_iniFile.WriteKeyString(_T("CARD"),_T("RegCount1"),17);//0x11
	m_iniFile.WriteKeyString(_T("CARD"),_T("byType1"),_T("float"));
	
	m_iniFile.WriteKeyString(_T("CARD"),_T("Add2"),_T("0x3"));
	m_iniFile.WriteKeyString(_T("CARD"),_T("Types2"),_T("AI8MA"));	
	m_iniFile.WriteKeyString(_T("CARD"),_T("CHANNEL2"),_T("8"));
	m_iniFile.WriteKeyString(_T("CARD"),_T("RegCount2"),_T("0x11"));
	m_iniFile.WriteKeyString(_T("CARD"),_T("byType2"),_T("float"));
	
	m_iniFile.WriteKeyString(_T("CARD"),_T("Add3"),4);
	m_iniFile.WriteKeyString(_T("CARD"),_T("Types3"),_T("AI8RTD"));	
	m_iniFile.WriteKeyString(_T("CARD"),_T("CHANNEL3"),8);
	m_iniFile.WriteKeyString(_T("CARD"),_T("RegCount3"),9);
	m_iniFile.WriteKeyString(_T("CARD"),_T("byType3"),_T("word"));*/
 //   m_comport.OpenCommPort();

////////////////////////////////////////////////////////////////////////////
/*	iniFile.GetKeyString(_T("COMM"),_T("ComPort"),_T("COM4"),sVal);
	iniFile.GetKeyString(_T("COMM"),_T("BaudRate"),_T("38400"),sVal);
	iniFile.GetKeyString(_T("COMM"),_T("ByteSize"),_T("8"),sVal);
	iniFile.GetKeyString(_T("COMM"),_T("StopBits"),_T("1"),sVal);
	iniFile.GetKeyString(_T("COMM"),_T("Parity"),_T("0"),sVal);
    printf("%s",sVal);
	iniFile.GetKeyString(_T("CARD"),_T("AddRess"),"2",sVal);
	iniFile.GetKeyString(_T("CARD"),_T("Type"),_T("AI8MA"),sVal);	
	iniFile.GetKeyString(_T("CARD"),_T("CHANNELS"),"8",sVal);
	iniFile.GetKeyString(_T("CARD"),_T("RegCounts"),"17",sVal);//0x11
	iniFile.GetKeyString(_T("CARD"),_T("byType"),_T("float"),sVal);
	
	iniFile.GetKeyString(_T("CARD"),_T("AddRess"),_T("0x03"),sVal);
	iniFile.GetKeyString(_T("CARD"),_T("Type"),_T("AI8MA"),sVal);	
	iniFile.GetKeyString(_T("CARD"),_T("CHANNELS"),"8",sVal);
	iniFile.GetKeyString(_T("CARD"),_T("RegCounts"),_T("0x11"),sVal);
	iniFile.GetKeyString(_T("CARD"),_T("byType"),_T("float"),sVal);

	iniFile.GetKeyString(_T("CARD"),_T("AddRess"),"4",sVal);
	iniFile.GetKeyString(_T("CARD"),_T("Type"),_T("AI8RTD"),sVal);	
	iniFile.GetKeyString(_T("CARD"),_T("CHANNELS"),"8",sVal);
	iniFile.GetKeyString(_T("CARD"),_T("RegCounts"),"9",sVal);
	iniFile.GetKeyString(_T("CARD"),_T("byType"),_T("word"),sVal);*/



//////////////////////测试ini文件////////////

    return TRUE;
}

// This is an example of an exported variable
COMPORTDLL_API int nComPortDLL=0;

// This is an example of an exported function.
COMPORTDLL_API int fnComPortDLL(void)
{
	return 42;
}

// This is the constructor of a class that has been exported.
// see ComPortDLL.h for the class definition
CComPortDLL::CComPortDLL()
{ 
	return; 
}



void DrvStart()//启动扫描
{
    m_bStart=true;
    if(!m_comport.OpenCommPort())
		{  
		 m_bStart=false;
        	
		}
//	m_comport.OpenCommPort();
   // m_comport.LoadIni();
//	DrvGetMsg();//获取驱动程序内部消息
}
						
void DrvStop()//终止扫描
{
//	if(m_pDrvStop)
//		((void(*)())m_pDrvStop)();
	m_bStart=false;
	//关闭串口
	m_comPort.CloseComm();
    Sleep(100);
    m_comport.CloseComm();
    m_comport.m_nRec=0;
}

bool IsNumber(WCHAR *str)
{
	int nLen=wcslen(str);
	WCHAR *buf=NULL;
	buf=new WCHAR[nLen];
	memcpy(buf,str,nLen);
	int n=0,nDot=0;
	for(int i=0;i<nLen;i++)
	{
		if(!(buf[i]>=48 && buf[i]<=57))  // 0~9
		{
		//	if(m_comport.m_byType==2) //WORD
		//	{
				if(!(buf[i]==42 || buf[i]==46))  // "*"  "."
				{
					return false;
				}
				else
				{
					if(buf[i]==42)
						n+=1;
					else
						nDot+=1;
					if(n>1 || nDot>1)
						return false;
				}
		//	}
		//	else
			//	return false;
		}
	}
	return true;
}
//地址,类型,通道号   "1,AI8MA,1"  csv文件存取格式
//no
WCHAR*	DrvAddFmt()//驱动程序地址格式
{


	return _T("");
}
//no
void DrvConfig()//驱动程序配置
{
//	if(m_pDrvConfig)
//		((void(*)())m_pDrvConfig)();
//	else if(m_hDrvLib)
//		::AfxMessageBox(IDS_DRV_NOPROP,MB_ICONEXCLAMATION);//该驱动程序无配置属性!
}

BOOL DrvChkFmt(LPCTSTR sAdd)
{
	TCHAR sNewAdd[128];
	wcscpy(sNewAdd,sAdd);


	return FALSE;
}
//no
BOOL DrvEnuTag(unsigned char* sAdd)
{
	return FALSE;
};

BOOL DrvDelTag(DWORD hKey,DWORD dwCyc)	//删除一个扫描地址
{


	return FALSE;
}

//地址,类型,通道号   "1,AI8MA,1"
DWORD DrvAddTag(LPCTSTR sAdd,DWORD dwCyc)	//增加一个扫描地址
{

	int i=0;
	WCHAR sAddr[256];
	WCHAR sTemp[256];
	Mod *pMod=NULL;
	if(wcslen(sAdd)>256)
		return FALSE;
	wcscpy(sAddr,sAdd);
	int nAddr=0,nRegAddr=0,nDataType=D_FLOAT;
	int nPos=0;
	nPos=m_iniFile.Find(sAddr,_T(":"),0);  
	if(nPos<0)
		return  FALSE;
	Mid(sAddr,0,nPos,sTemp);
	nAddr=_wtoi(sTemp);//卡件地址

	Mid(sAddr,nPos+1,wcslen(sAddr)-nPos,sAddr);
	nPos=m_iniFile.Find(sAddr,_T(":"),0);
	if(nPos<0)
		return  FALSE;
	Mid(sAddr,0,nPos,sTemp);
	nRegAddr=_wtoi(sTemp)-1; //寄存器地址 

	Mid(sAddr,nPos+1,wcslen(sAddr)-nPos,sTemp);
	if(m_iniFile.CompareNoCase(sTemp,_T("FLOAT"))==0)
		nDataType=D_FLOAT;
	else
		nDataType=D_LONG;  //数据类型
	for(i=0;i<m_comPort.counts;i++)  
  
	{
		//pMod=m_arMod[i];
    //   pMod=MEMDATA[i];
		if(pMod)
		{
		//	if(pMod->address==address)
		//		break;
		//	else
			//	pMod=NULL;
		}
	}
	
	Tag *pTag=NULL;
	pTag=new Tag;
	if(pTag)
	{
		pTag->nAddr=nRegAddr;
		pTag->nDataType=nDataType;
		pTag->pMod=pMod; //卡件地址
		return (DWORD)pTag;
	}
	else
		return FALSE;
	return NULL;
}

void DrvClear()//清除所有扫描地址
{

}

int DrvGetVal(DWORD hKey,double &dbVal)//读数据,返回读状态
{
	Tag *pTag=(Tag*)hKey;
	Mod *pMod=pTag->pMod;
	float fVal=0;
	if(pMod)
	{
	//	memcpy(&MEMDATA[i].fValue,&getValue[l],sizeof(float));
	//	pMod->GetVal(pTag->nAddr,pTag->nDataType,fVal);//根据测点的起始地址恶化数据类型取值到fVal
	//	*dbVal=(double)m_iniFile.MEMDATA[0].fValue;
	}
	else
		return 5;
	return 0;

}

WCHAR*	DrvGetDesc(DWORD hKey)		//获取测点的描述
{


	return _T("");
}
//no
int DrvSetVal(DWORD hKey,double &dbVal)//写数据,返回写状态
{ 


	return 5;
}
//no
void DrvGetMsg()//获取驱动程序内部消息
{

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -