📄 comportdll.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 + -