📄 qssreadbotdlg.cpp
字号:
//
// ODBC 连接数据库
LRESULT WINAPI OnThreadProc7( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
int nRet = -1 ;
HRESULT hr ;
hWnd7 = hWnd ;
switch( message )
{
case WM_CREATE:
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); /// COINIT_APARTMENTTHREADED
if ( S_OK != hr )
AfxMessageBox("线程七组件库初始化错误!") ;
break ;
case WM_TIMER:
switch( wParam )
{
case ID_TIMER7:
//MessageBox( NULL, "WM_TIMER","",MB_OK) ;
nRet = QSSReadWrite( 7, strQSS[6] ) ;
break ;
}
break ;
case WM_DESTROY:
if ( KillTimer( hWnd, ID_TIMER7 ) == 0 )
AfxMessageBox("关闭定时器 7 错误") ;
CoUninitialize() ;
PostQuitMessage( 0 ) ;
break ;
default:
return DefWindowProc( hWnd, message, wParam, lParam ) ;
}
return 0 ;
}
//================================================================================
//
// 线程处理函数 8 处理 QSS 8 连接的数据
//
// ODBC 连接数据库
LRESULT WINAPI OnThreadProc8( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
int nRet = -1 ;
HRESULT hr ;
hWnd8 = hWnd ;
switch( message )
{
case WM_CREATE:
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); /// COINIT_APARTMENTTHREADED
if ( S_OK != hr )
AfxMessageBox("线程八组件库初始化错误!") ;
break ;
case WM_TIMER:
switch( wParam )
{
case ID_TIMER8:
//MessageBox( NULL, "WM_TIMER","",MB_OK) ;
nRet = QSSReadWrite( 8, strQSS[7] ) ;
break ;
}
break ;
case WM_DESTROY:
if ( KillTimer( hWnd, ID_TIMER8 ) == 0 )
AfxMessageBox("关闭定时器 8 错误") ;
CoUninitialize() ;
PostQuitMessage( 0 ) ;
break ;
default:
return DefWindowProc( hWnd, message, wParam, lParam ) ;
}
return 0 ;
}
//================================================================================
//
// 线程处理函数 9 处理 QSS 9 连接的数据
//
// ODBC 连接数据库
LRESULT WINAPI OnThreadProc9( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
int nRet = -1 ;
HRESULT hr ;
hWnd9 = hWnd ;
switch( message )
{
case WM_CREATE:
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); /// COINIT_APARTMENTTHREADED
if ( S_OK != hr )
AfxMessageBox("线程九组件库初始化错误!") ;
break ;
case WM_TIMER:
switch( wParam )
{
case ID_TIMER9:
//MessageBox( NULL, "WM_TIMER","",MB_OK) ;
nRet = QSSReadWrite( 9, strQSS[8] ) ;
break ;
}
break ;
case WM_DESTROY:
if ( KillTimer( hWnd, ID_TIMER9 ) == 0 )
AfxMessageBox("关闭定时器 9 错误") ;
CoUninitialize() ;
PostQuitMessage( 0 ) ;
break ;
default:
return DefWindowProc( hWnd, message, wParam, lParam ) ;
}
return 0 ;
}
//================================================================================
//
// 线程处理函数 10 处理 QSS 10 连接的数据
//
// ODBC 连接数据库
LRESULT WINAPI OnThreadProc10( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
int nRet = -1 ;
HRESULT hr ;
hWnd10 = hWnd ;
switch( message )
{
case WM_CREATE:
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); /// COINIT_APARTMENTTHREADED
if ( S_OK != hr )
AfxMessageBox("线程十组件库初始化错误!") ;
break ;
case WM_TIMER:
switch( wParam )
{
case ID_TIMER10:
//MessageBox( NULL, "WM_TIMER","",MB_OK) ;
nRet = QSSReadWrite( 10, strQSS[9] ) ;
break ;
}
break ;
case WM_DESTROY:
KillTimer( hWnd, ID_TIMER10 ) ;
PostQuitMessage( 0 ) ;
break ;
default:
return DefWindowProc( hWnd, message, wParam, lParam ) ;
}
return 0 ;
}
////////////////////////////////////////////////////////////////////////////////////
// 读取QSS数据,并插入数据到数据库中
DWORD QSSReadWrite( __int32 n32QssNumber, CString strComNumber )
{
char szYear[5], szMonth[5], szDay[5], szHour[5], szMinute[5], szSecond[5], szTemp[5] ;
CString strDateTime ;
CString strAirConditonID ;
CString strAirConSwitch_ID, strLX_datetime ;
CString strRunStatus, strWD, strSNWD, strPZFKD, strYXFS, strEquipeID ;
CString strErrorCode ;
CString strSql ;
CString strDBConnection ;
CString strQssNumber, strBh, strName ;
/// 取得当前系统本地时间
SYSTEMTIME stSystemDateTime ;
memset( &stSystemDateTime, 0, sizeof(SYSTEMTIME)) ;
GetLocalTime( & stSystemDateTime ) ;
itoa( stSystemDateTime.wYear, szYear, 10 ) ; // 年
if ( stSystemDateTime.wMonth < 10 ) // 月份
{
itoa( stSystemDateTime.wMonth, szTemp, 10 ) ;
strcpy( szMonth, "0" ) ;
strcat( szMonth, szTemp ) ;
}
else
{
itoa( stSystemDateTime.wMonth, szMonth, 10 ) ;
}
if ( stSystemDateTime.wDay < 10 ) // 日
{
itoa( stSystemDateTime.wDay, szTemp, 10 ) ;
strcpy( szDay, "0" ) ;
strcat( szDay, szTemp ) ;
}
else
{
itoa( stSystemDateTime.wDay, szDay, 10 ) ;
}
if ( stSystemDateTime.wHour < 10 ) // 小时
{
itoa( stSystemDateTime.wHour, szTemp, 10 ) ;
strcpy( szHour, "0" ) ;
strcat( szHour, szTemp ) ;
}
else
{
itoa( stSystemDateTime.wHour, szHour, 10 ) ;
}
if ( stSystemDateTime.wMinute < 10 ) // 分钟
{
itoa( stSystemDateTime.wMinute, szTemp, 10 ) ;
strcpy( szMinute, "0" ) ;
strcat( szMinute, szTemp ) ;
}
else
{
itoa( stSystemDateTime.wMinute, szMinute, 10 ) ;
}
if ( stSystemDateTime.wSecond < 10 ) // 秒
{
itoa( stSystemDateTime.wSecond, szSecond, 10 ) ;
strcpy( szSecond, "0" ) ;
strcat( szSecond, szTemp ) ;
}
else
{
itoa( stSystemDateTime.wSecond, szSecond, 10 ) ;
}
strDateTime = szYear ;
strDateTime += "-" ;
strDateTime += szMonth ;
strDateTime += "-";
strDateTime += szDay ;
strDateTime += " " ;
strDateTime += szHour ;
strDateTime += ":" ;
strDateTime += szMinute ;
strDateTime += ":" ;
strDateTime += szSecond ;
strAirConditonID = szYear ;
strAirConditonID += szMonth ;
strAirConditonID += szDay ;
strAirConditonID += szHour ;
strAirConditonID += szMinute ;
strLX_datetime = strDateTime ;
// strComNumber = "com1" ;
/// 取得通过QSS采集到的空调运行数据, 动态链接库名称 ( PMBHair.dll )
int nRet = -1 ;
AirCondState struAirCondState ;
ZeroMemory( &struAirCondState, sizeof(AirCondState)) ;
HANDLE hCom = NULL ; // 打开串口资源
HMODULE hAirCModule = LoadLibrary( "PMBHair.dll" ) ; // 装载动态链接库
if ( FAILED(hAirCModule) )
return -11 ;
GetOpenDevice getOpenDevice ;
GetAirCondState getAirCondState ;
/// 得到动态链接库中的函数的地址指针
getOpenDevice = ( GetOpenDevice )GetProcAddress( hAirCModule , "OpenDevice" ) ;
getAirCondState = ( GetAirCondState )GetProcAddress( hAirCModule , "GetIndoorStatus" ) ;
/// 打开串口句柄
hCom = getOpenDevice( strComNumber.GetBuffer(strComNumber.GetLength()), 1000 ) ;
if ( hCom <= 0 )
return (long)hCom;
long lgret = GetLastError() ;
/// 取得数据库中的空调内机信息
/// 转换QSS编号从 int 到 CString 类型
char szQssNumber[4] , szIndoorNumber[4];
itoa( n32QssNumber, szQssNumber, 10 ) ;
strQssNumber = szQssNumber ;
//_ConnectionPtr m_pConnection ; /// _CommandPtr m_pCommand ;
//_RecordsetPtr m_pRecordset ;
int i = 0;
HRESULT hr = 0 ;
/// 调用函数取得( QSS )空调运行数据, 共 48 个内机
int nIndoorNumber ;
CString strIndoor ;
/// char szIndoor[4] ;
for ( i = 0 ; i < nEquipementCount[n32QssNumber-1] ; i ++ )
{
strIndoor = strEquipementID[n32QssNumber-1][i].Mid( 4, 2 ) ;
nIndoorNumber = atoi( strIndoor.GetBuffer( strIndoor.GetLength() ));
if ( nIndoorNumber < 0 || nIndoorNumber > 48 )
AfxMessageBox("空调内机编号错误!") ;
// 数据采集函数调用
nRet = getAirCondState( hCom, nIndoorNumber , &struAirCondState ) ;
if ( nRet <= 0 )
{
Sleep(1000) ;
continue ;
}
else
Sleep(1000) ;
//#####
/* strcpy( struAirCondState.status , "run" ) ;
strcpy( struAirCondState.EEVOpening , "45" ) ;
strcpy( struAirCondState.intakeairTemp , "20" ) ;
strcpy( struAirCondState.operationMode , "heating" ) ;
strcpy( struAirCondState.setPoint , "25" ) ;
*/
// 如果取出成功,保存数据到SQL SERVER 2000 数据库中
itoa( i, szIndoorNumber, 10 ) ;
if ( strncmp( struAirCondState.status, "run", 3 ) == 0 )
strRunStatus = "0" ;
else
strRunStatus = "1" ;
strWD = struAirCondState.setPoint ;
strSNWD = struAirCondState.intakeairTemp ;
strPZFKD = struAirCondState.EEVOpening ;
strErrorCode = struAirCondState.ErrorMode ;
// heating 1 cooling 0 blowing 2 automatic 3 drying 4
if ( strncmp( struAirCondState.operationMode, "cooling", 7 ) == 0 )
strYXFS = "0" ;
if ( strncmp( struAirCondState.operationMode, "heating", 7 ) == 0 )
strYXFS = "1" ;
if ( strncmp( struAirCondState.operationMode, "blowing", 7 ) == 0 )
strYXFS = "2" ;
if ( strncmp( struAirCondState.operationMode, "automatic", 9 ) == 0 )
strYXFS = "3" ;
if ( strncmp( struAirCondState.operationMode, "drying", 6 ) == 0 )
strYXFS = "4" ;
strAirConSwitch_ID = strAirConditonID + strEquipementID[n32QssNumber-1][i].Mid(1, 5 ) ;
strSql = "INSERT INTO T_TEST1([AirConSwitch_ID], [LX_Datetime], [Equipment_ID], [Run_Status], [WD], [SNWD], [PZFKD], [YXFS],[CWM] ) VALUES( '" ;
strSql += strAirConSwitch_ID + "' ,'"+ strLX_datetime+ "' ,'" ;
strSql += strEquipementID[n32QssNumber-1][i] + "' ,'"+ strRunStatus+ "' ,'" ;
strSql += strWD + "' ,'"+ strSNWD + "' ,'" ;
strSql += strPZFKD + "' ,'" + strYXFS +"' ,'"+ strErrorCode + "')" ;
_variant_t RecordsAffected ;
try
{
if(m_pConnection->State)
{
EnterCriticalSection( &criticalSection ) ; // 进入临界区
if(m_pConnection->State)
{
hr = m_pConnection->Execute( (_bstr_t)strSql, &RecordsAffected, adCmdText ) ;
//Sleep(200) ;
if ( RecordsAffected.intVal != 1 )
{
AfxMessageBox("插入内机运行数据错误!") ;
}
}
else
AfxMessageBox("数据库没有连接,请重新运行程序!") ;
LeaveCriticalSection( &criticalSection ) ; // 退出临界区
}
}
catch(_com_error e) /// 捕捉异常
{
CString errormessage;
errormessage.Format("数据库插入数据失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage); /// 显示错误信息
//AfxMessageBox(e.Description()) ;
//e.WCode ;
}
}
//m_pRecordset->Close() ;
if ( hCom != NULL )
lgret = CloseHandle( hCom ) ;
if ( hAirCModule != NULL )
lgret = FreeLibrary( hAirCModule ) ; // 释放动态链接库
// AfxMessageBox( "QSS编号:"+ strQssNumber +"操作成功!") ;
return 1 ;
}
void CQssReadBotDlg::OnSetqsssave()
{
// TODO: Add your control notification handler code here
// 保存 QSS 通讯 COM 端口设置
LPCTSTR hFileName = "C:\\QSS.ini" ;
int i = 0 ;
int nCheckRet[10] ;
CString strCom[10] ;
CIni ini ;
ini.SetPathName( hFileName ) ;
GetDlgItemText(IDC_COMBO1, strQSS[0] ) ;
GetDlgItemText(IDC_COMBO2, strQSS[1] ) ;
GetDlgItemText(IDC_COMBO3, strQSS[2] ) ;
GetDlgItemText(IDC_COMBO4, strQSS[3] ) ;
GetDlgItemText(IDC_COMBO5, strQSS[4] ) ;
GetDlgItemText(IDC_COMBO6, strQSS[5] ) ;
GetDlgItemText(IDC_COMBO7, strQSS[6] ) ;
GetDlgItemText(IDC_COMBO8, strQSS[7] ) ;
GetDlgItemText(IDC_COMBO9, strQSS[8] ) ;
GetDlgItemText(IDC_COMBO10, strQSS[9] ) ;
ini.WriteString( "QSS", "QSS1", strQSS[0] ) ;
ini.WriteString( "QSS", "QSS2", strQSS[1] ) ;
ini.WriteString( "QSS", "QSS3", strQSS[2] ) ;
ini.WriteString( "QSS", "QSS4", strQSS[3] ) ;
ini.WriteString( "QSS", "QSS5", strQSS[4] ) ;
ini.WriteString( "QSS", "QSS6", strQSS[5] ) ;
ini.WriteString( "QSS", "QSS7", strQSS[6] ) ;
ini.WriteString( "QSS", "QSS8", strQSS[7] ) ;
ini.WriteString( "QSS", "QSS9", strQSS[8] ) ;
ini.WriteString( "QSS", "QSS10", strQSS[9] ) ;
nCheckRet[0] = m_Check1.GetCheck() ;
nCheckRet[1] = m_Check2.GetCheck() ;
nCheckRet[2] = m_Check3.GetCheck() ;
nCheckRet[3] = m_Check4.GetCheck() ;
nCheckRet[4] = m_Check5.GetCheck() ;
nCheckRet[5] = m_Check6.GetCheck() ;
nCheckRet[6] = m_Check7.GetCheck() ;
nCheckRet[7] = m_Check8.GetCheck() ;
nCheckRet[8] = m_Check9.GetCheck() ;
nCheckRet[9] = m_Check10.GetCheck() ;
ini.WriteInt( "THREAD", "THREAD1", nCheckRet[0], BASE_DECIMAL ) ;
ini.WriteInt( "THREAD", "THREAD2", nCheckRet[1] , BASE_DECIMAL ) ;
ini.WriteInt( "THREAD", "THREAD3", nCheckRet[2] , BASE_DECIMAL) ;
ini.WriteInt( "THREAD", "THREAD4", nCheckRet[3] , BASE_DECIMAL) ;
ini.WriteInt( "THREAD", "THREAD5", nCheckRet[4] , BASE_DECIMAL) ;
ini.WriteInt(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -