void CCO2_NodeView::OnCbnSelchangeComboCo2NodeProtocol()
{
    // TODO: 在此添加控件通知处理程序代码
    CString temp_string;
    int nSel = ((CComboBox *)GetDlgItem(IDC_COMBO_CO2_NODE_PROTOCOL))->GetCurSel();
    ((CComboBox *)GetDlgItem(IDC_COMBO_CO2_NODE_PROTOCOL))->GetLBText(nSel, temp_string);
    int temp_protocol = product_register_value[21];
    for (int i = 0;i<sizeof(CO2_Node_Protocol) / sizeof(CO2_Node_Protocol[0]);i++)
    {
        if (temp_string.CompareNoCase(CO2_Node_Protocol[i]) == 0)
        {
            temp_protocol = i;
            break;
        }
    }

    int nret = write_one(g_tstat_id, 21, temp_protocol);
    if (nret <= 0)
    {
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Change protocol failed!"));
        PostMessage(WM_CO2_NODE_THREAD_READ, NULL, NULL);
    }
    else
    {
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Operation Done!"));
    }
    ((CButton *)GetDlgItem(IDC_BUTTON_OK))->SetFocus();
}
LRESULT  CBacnetTstat::TstatsMessageCallBack(WPARAM wParam, LPARAM lParam)
{
	_MessageInvokeIDInfo *pInvoke =(_MessageInvokeIDInfo *)lParam;
	bool msg_result=WRITE_FAIL;
	msg_result = MKBOOL(wParam);
	CString Show_Results;
	CString temp_cs = pInvoke->task_info;
	if(msg_result)
	{
		Show_Results = temp_cs + _T("Success!");
		SetPaneString(BAC_SHOW_MISSION_RESULTS,Show_Results);
	}
	else
	{
		memcpy_s(&m_Tstat_data.at(pInvoke->mRow),sizeof(Str_TstatInfo_point),&m_temp_tstat_data[pInvoke->mRow],sizeof(Str_TstatInfo_point));//还原没有改对的值;
		PostMessage(WM_REFRESH_BAC_TSTAT_LIST,pInvoke->mRow,REFRESH_ON_ITEM);
		Show_Results = temp_cs + _T("Fail!");
		SetPaneString(BAC_SHOW_MISSION_RESULTS,Show_Results);
	}

	if((pInvoke->mRow%2)==0)	//恢复前景和 背景 颜色;
		m_tstat_list.SetItemBkColor(pInvoke->mRow,pInvoke->mCol,LIST_ITEM_DEFAULT_BKCOLOR,0);
	else
		m_tstat_list.SetItemBkColor(pInvoke->mRow,pInvoke->mCol,LIST_ITEM_DEFAULT_BKCOLOR_GRAY,0);
	m_tstat_list.RedrawItems(pInvoke->mRow,pInvoke->mRow);

	if(pInvoke)
		delete pInvoke;
	return 0;
}
//在删除这个对话框之前 先尝试保存 操作中的 label;
LRESULT BacnetScreen::Screeenedit_close_handle(WPARAM wParam,LPARAM lParam)
{
	Reg_Hotkey();
	if(ScreenEdit_Window)
	{
		bool saving_ret = false;
		SetPaneString(BAC_SHOW_MISSION_RESULTS,_T("Saving data , please wait!"));
		saving_ret = ScreenEdit_Window->UpdateDeviceLabelFlash();
		//if(((debug_item_show == DEBUG_SHOW_ALL) || (debug_item_show == DEBUG_SHOW_SQLITE_INFO)))
		//{
		//	CString temp_info;
		//	temp_info.Format(_T("Close sqlit DB"));
		//	DFTrace(temp_info);
		//}
		if(saving_ret)
			SetPaneString(BAC_SHOW_MISSION_RESULTS,_T("Saving data success!"));
		else
			SetPaneString(BAC_SHOW_MISSION_RESULTS,_T("Saving data failed!"));
		//ScreenEdit_Window->SqliteDBT3000.closedb();
		delete ScreenEdit_Window;
		ScreenEdit_Window = NULL;
		
		
	}
	return 0;
}
LRESULT  CBacnetProgramEdit::ProgramResumeMessageCallBack(WPARAM wParam, LPARAM lParam)
{
	_MessageInvokeIDInfo *pInvoke =(_MessageInvokeIDInfo *)lParam;
	CString temp_cs = pInvoke->task_info;
	bool msg_result=WRITE_FAIL;
	msg_result = MKBOOL(wParam);
	CString Show_Results;
	if(msg_result)
	{
		//CString temp_ok;
		//temp_ok = _T("Bacnet operation success!   Request ID:") +  temp_cs;
		m_Program_data.at(program_list_line).bytes =	program_code_length[program_list_line] - PRIVATE_HEAD_LENGTH;

		Show_Results = temp_cs + _T("Success!");
		SetPaneString(BAC_SHOW_MISSION_RESULTS,Show_Results);

		//SetPaneString(BAC_SHOW_MISSION_RESULTS,temp_ok);
//#ifdef SHOW_MESSAGEBOX
		MessageBox(Show_Results);
//#endif
	}
	else
	{
		Show_Results = temp_cs + _T("Fail!");
		SetPaneString(BAC_SHOW_MISSION_RESULTS,Show_Results);
//#ifdef SHOW_ERROR_MESSAGE
		MessageBox(Show_Results);
//#endif
	}
	if(pInvoke)
		delete pInvoke;
	return 0;
}
Пример #5
0
// CBacnetVariable message handlers
LRESULT  CBacnetVariable::VariableMessageCallBack(WPARAM wParam, LPARAM lParam)
{
	_MessageInvokeIDInfo *pInvoke =(_MessageInvokeIDInfo *)lParam;
	bool msg_result=WRITE_FAIL;
	msg_result = MKBOOL(wParam);
	CString Show_Results;
	CString temp_cs = pInvoke->task_info;
	if(msg_result)
	{
		Show_Results = temp_cs + _T("Success!");
		SetPaneString(BAC_SHOW_MISSION_RESULTS,Show_Results);
		if((pInvoke->mRow < BAC_VARIABLE_ITEM_COUNT) && (pInvoke->mRow >= 0))
		{
			Post_Refresh_One_Message(g_bac_instance,READVARIABLE_T3000,
				pInvoke->mRow,pInvoke->mRow,sizeof(Str_variable_point));
			SetTimer(3,2000,NULL);
		}
	}
	else
	{
		memcpy_s(&m_Variable_data.at(pInvoke->mRow),sizeof(Str_variable_point),&m_temp_variable_data[pInvoke->mRow],sizeof(Str_variable_point));//还原没有改对的值
		PostMessage(WM_REFRESH_BAC_VARIABLE_LIST,pInvoke->mRow,REFRESH_ON_ITEM);
		Show_Results = temp_cs + _T("Fail!");
		SetPaneString(BAC_SHOW_MISSION_RESULTS,Show_Results);
	}
	if((pInvoke->mRow%2)==0)	//恢复前景和 背景 颜色;
		m_variable_list.SetItemBkColor(pInvoke->mRow,pInvoke->mCol,LIST_ITEM_DEFAULT_BKCOLOR,0);
	else
		m_variable_list.SetItemBkColor(pInvoke->mRow,pInvoke->mCol,LIST_ITEM_DEFAULT_BKCOLOR_GRAY,0);
	m_variable_list.RedrawItems(pInvoke->mRow,pInvoke->mRow);

	if(pInvoke)
		delete pInvoke;
	return 0;
}
LRESULT  BacnetController::ControllerMessageCallBack(WPARAM wParam, LPARAM lParam)
{
	_MessageInvokeIDInfo *pInvoke =(_MessageInvokeIDInfo *)lParam;
	bool msg_result=WRITE_FAIL;
	msg_result = MKBOOL(wParam);
	CString Show_Results;
	CString temp_cs = pInvoke->task_info;
	if(msg_result)
	{
		Show_Results = temp_cs + _T("Success!");
		SetPaneString(BAC_SHOW_MISSION_RESULTS,Show_Results);
		//MessageBox(_T("Bacnet operation success!"));
	}
	else
	{
		memcpy_s(&m_controller_data.at(pInvoke->mRow),sizeof(Str_controller_point),&m_temp_controller_data[pInvoke->mRow],sizeof(Str_controller_point));//还原没有改对的值
		PostMessage(WM_REFRESH_BAC_CONTROLLER_LIST,pInvoke->mRow,REFRESH_ON_ITEM);
		Show_Results = temp_cs + _T("Fail!");
		SetPaneString(BAC_SHOW_MISSION_RESULTS,Show_Results);
		//AfxMessageBox(Show_Results);
		//MessageBox(_T("Bacnet operation fail!"));
	}
	if((pInvoke->mRow%2)==0)	//恢复前景和 背景 颜色;
		m_controller_list.SetItemBkColor(pInvoke->mRow,pInvoke->mCol,LIST_ITEM_DEFAULT_BKCOLOR,0);
	else
		m_controller_list.SetItemBkColor(pInvoke->mRow,pInvoke->mCol,LIST_ITEM_DEFAULT_BKCOLOR_GRAY,0);
	m_controller_list.RedrawItems(pInvoke->mRow,pInvoke->mRow);

	if(pInvoke)
		delete pInvoke;
	return 0;
}
void CCO2_NodeView::OnCbnSelchangeComboCo2NodeTemperatureUnit()
{
    // TODO: 在此添加控件通知处理程序代码

    CString temp_cs;
    int nSel = ((CComboBox *)GetDlgItem(IDC_COMBO_CO2_NODE_TEMPERATURE_UNIT))->GetCurSel();
    ((CComboBox *)GetDlgItem(IDC_COMBO_CO2_NODE_TEMPERATURE_UNIT))->GetLBText(nSel, temp_cs);

    int temp_value = product_register_value[125];
    if (temp_cs.CompareNoCase(_T("Deg.C")) == 0)
    {
        temp_value = 0;
    }
    else if (temp_cs.CompareNoCase(_T("Deg.F")) == 0)
    {
        temp_value = 1;
    }

    int nret = write_one(g_tstat_id, 125, temp_value);
    if (nret <= 0)
    {
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Change Deg.C or Deg.F failed!"));
        PostMessage(WM_CO2_NODE_THREAD_READ, NULL, NULL);
    }
    else
    {
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Operation Done!"));
    }

    ((CButton *)GetDlgItem(IDC_BUTTON_OK))->SetFocus();
}
void T38AI8AO::Fresh(){

	 
	if (is_connect())
	{  
		 

		for (int i=0;i<3;i++)
		{
			 
			Read_Multi(g_tstat_id,&product_register_value[i*100],i*100,100);
		}
	 

		InitialRegister();	
		InitialDialog();
		if(hFirstThread != NULL)
			TerminateThread(hFirstThread, 0);
		hFirstThread=NULL;
		if (!hFirstThread)
		{
			hFirstThread = CreateThread(NULL,NULL,_BackFreshing_8IAO,this,NULL,0);
		}
		//AfxBeginThread(_BackFreshing,this);
	}
	else
	{
		SetPaneString(1,_T("Disconnection"));
		AfxMessageBox(_T("Please Connect your device"));
	}


}
void T3000_Default_MainView::OnEnKillfocusEditBacnetDeviceId()
{
    // TODO: 在此添加控件通知处理程序代码
    CString strText;
    GetDlgItemText(IDC_EDIT_BACNET_DEVICE_ID, strText);
    int nValue = _wtoi(strText);
    
    unsigned int temp_device_id = 0;
    temp_device_id = product_register_value[992] * 65536 + product_register_value[991];
    if (temp_device_id == nValue)	//Add this to judge weather this value need to change.
        return;

    unsigned short temp_device_low;
    unsigned short temp_device_high;
    temp_device_low = nValue % 65536;
    temp_device_high = nValue / 65536;

    int nret_1 = write_one(g_tstat_id, 991, temp_device_low, 6);

    int nret_2 = write_one(g_tstat_id, 992, temp_device_high, 6);

    if ((nret_1 >= 0) && (nret_2 >= 0))
    {
        product_register_value[991] = temp_device_low;
        product_register_value[992] = temp_device_high;
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Change bacnet device id success"));
    }
    else
    {
        MessageBox(_T("Change bacnet device id failed!"));
    }

}
void CCO2_NodeView::OnEnKillfocusEditPoorAlarmSetpoint()
{
    // TODO: 在此添加控件通知处理程序代码
    CString temp_cstring;
    GetDlgItem(IDC_EDIT_POOR_ALARM_SETPOINT)->GetWindowTextW(temp_cstring);
    int temp_int;
    temp_int = _wtoi(temp_cstring);
    int nret = write_one(g_tstat_id, 113, temp_int);
    if (nret <= 0)
    {
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Change poor alarm setpoint time failed!"));
        PostMessage(WM_CO2_NODE_THREAD_READ, NULL, NULL);
    }
    else
    {
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Operation Done!"));
    }
    ((CButton *)GetDlgItem(IDC_BUTTON_OK))->SetFocus();
}
void CCO2_NodeView::OnEnKillfocusEditCo2NodeBacklightTime()
{
    // TODO: 在此添加控件通知处理程序代码
    CString temp_cstring;
    GetDlgItem(IDC_EDIT_CO2_NODE_BACKLIGHT_TIME)->GetWindowTextW(temp_cstring);
    int temp_int;
    temp_int = _wtoi(temp_cstring);
    int nret = write_one(g_tstat_id, 158, temp_int);
    if (nret <= 0)
    {
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Change backlight time failed!"));
        PostMessage(WM_CO2_NODE_THREAD_READ, NULL, NULL);
    }
    else
    {
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Operation Done!"));
    }
    ((CButton *)GetDlgItem(IDC_BUTTON_OK))->SetFocus();
}
void CDialogT3::OnTimer(UINT_PTR nIDEvent)
{
    CMainFrame* pMain = (CMainFrame*)AfxGetApp()->m_pMainWnd;
    CView* pNewView = pMain->m_pViews[5];
    CView* pActiveView = pMain->GetActiveView();

    if ( pNewView != pActiveView )    // current is minipanel dialog
    {
        KillTimer(T3_MODEL);
    }

#if 1
    static int nCount = 0,nCount2 = 0;

    nCount++;
    nCount2++;

    if (T3_MODEL == nIDEvent)
    {
        CTime now;
        now = CTime::GetCurrentTime();
        //m_datetime = now.Format(_T("%A,%B %d,%Y  %H:%M:%S"));		// "Saturday, April 12, 2012"

        //UpdateData(FALSE);

        if (nCount% 30 == 0)
        {

            nCount = 0;
            BOOL flag=MiniUpdateData();

            if (flag)
            {
                ShowDialogData();
                SetPaneString(2,_T("Online!"));

            }

        }
        if (nCount2%60*10 == 0)
        {
            nCount2 = 0;
            Updatedatabase();

        }


    }

#endif

    CFormView::OnTimer(nIDEvent);
}
void CAirQuality::OnTimer(UINT_PTR nIDEvent)
{
	CMainFrame* pMain = (CMainFrame*)AfxGetApp()->m_pMainWnd;
	CView* pNewView = pMain->m_pViews[7];
	CView* pActiveView = pMain->GetActiveView();

	if ( pNewView != pActiveView )    // current is minipanel dialog
	{
		KillTimer(AirQualityTimer);
	}

#if 1
	static int nCount = 0,nCount2 = 0,scantime = 30;

	nCount++;
	nCount2++;

	if (AirQualityTimer == nIDEvent)
	{
		CTime now;
		now = CTime::GetCurrentTime();
		m_clock = now.Format(_T("%A,%B %d,%Y  %H:%M:%S"));		// "Saturday, April 12, 2012"		

		UpdateData(FALSE);

		if (nCount%scantime == 0)
		{

			nCount = 0;

			if (prodtopc())
			{
				ShowAirqualityDialog();
				SetPaneString(1,_T("Online!"));

				if (writedb)
				{
					pctodb();
					writedb = FALSE;
					scantime = 60*3;
				}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
			}
			

		}



	}

#endif
CFormView::OnTimer(nIDEvent);
}
bool BacnetScreen::read_screen_label()
{
	//一直读到 下一个全是0 的 无效label;
	for (int i=0;i<BAC_GRPHIC_LABEL_GROUP;i++)
	{
		int end_temp_instance = 0;
		int ret_n;
		end_temp_instance = BAC_READ_GRPHIC_LABEL_REMAINDER + (BAC_READ_GRPHIC_LABEL_GROUP_NUMBER)*i ;
		if(end_temp_instance >= BAC_GRPHIC_LABEL_COUNT)
			end_temp_instance = BAC_GRPHIC_LABEL_COUNT - 1;
		CString n_temp_result;
		ret_n = GetPrivateData_Blocking(g_bac_instance,READ_GRPHIC_LABEL_COMMAND,(BAC_READ_GRPHIC_LABEL_GROUP_NUMBER)*i,end_temp_instance,sizeof(Str_label_point));
		if(ret_n)
		{
			n_temp_result.Format(_T("Read Graphic Label From %d to %d success."),(BAC_READ_GRPHIC_LABEL_GROUP_NUMBER)*i,end_temp_instance);
			SetPaneString(BAC_SHOW_MISSION_RESULTS,n_temp_result);
			Sleep(10);
			if(b_stop_read_grp_label)
			{
				n_temp_result.Format(_T("Reading GRP%d: complete"),screen_list_line + 1);
				SetPaneString(BAC_SHOW_MISSION_RESULTS,n_temp_result);
				Sleep(10);
				break;
			}
		}
		else
		{
			n_temp_result.Format(_T("Read Graphic Label From %d to %d failed."),(BAC_READ_GRPHIC_LABEL_GROUP_NUMBER)*i,end_temp_instance);
			SetPaneString(BAC_SHOW_MISSION_RESULTS,n_temp_result);
			return false;
		}

		
	}


	return true;
}
// CBacnetInput message handlers
LRESULT  CBacnetInput::InputMessageCallBack(WPARAM wParam, LPARAM lParam)
{
    _MessageInvokeIDInfo *pInvoke =(_MessageInvokeIDInfo *)lParam;
    bool msg_result=WRITE_FAIL;
    msg_result = MKBOOL(wParam);
    CString Show_Results;
    CString temp_cs = pInvoke->task_info;
    if(msg_result)
    {
        Show_Results = temp_cs + _T("Success!");
        SetPaneString(BAC_SHOW_MISSION_RESULTS,Show_Results);

        //Post_Refresh_Message(g_bac_instance,READINPUT_T3000,pInvoke->mRow,pInvoke->mRow,sizeof(Str_in_point), BAC_INPUT_GROUP);
        //MessageBox(_T("Bacnet operation success!"));
    }
    else
    {
        memcpy_s(&m_Input_data.at(pInvoke->mRow),sizeof(Str_in_point),&m_temp_Input_data[pInvoke->mRow],sizeof(Str_in_point));//还原没有改对的值
        PostMessage(WM_REFRESH_BAC_INPUT_LIST,pInvoke->mRow,REFRESH_ON_ITEM);//这里调用 刷新线程重新刷新会方便一点;
        Show_Results = temp_cs + _T("Fail!");
        SetPaneString(BAC_SHOW_MISSION_RESULTS,Show_Results);

        //AfxMessageBox(Show_Results);
        //MessageBox(_T("Bacnet operation fail!"));
    }
    if((pInvoke->mRow%2)==0)	//恢复前景和 背景 颜色;
        m_input_list.SetItemBkColor(pInvoke->mRow,pInvoke->mCol,LIST_ITEM_DEFAULT_BKCOLOR,0);
    else
        m_input_list.SetItemBkColor(pInvoke->mRow,pInvoke->mCol,LIST_ITEM_DEFAULT_BKCOLOR_GRAY,0);
    m_input_list.RedrawItems(pInvoke->mRow,pInvoke->mRow);


    if(pInvoke)
        delete pInvoke;
    return 0;
}
void CCO2_View::OnBnClickedBtnCo2ClearCal()
{
	// TODO: Add your control notification handler code here
	int item_count = m_co2_external_sensor_list.GetItemCount();
	for (int i=0;i<item_count;i++)
	{
		if(write_one(g_tstat_id,CO2_485_MODBUS_EXT_CO2_OFFSET_START + i,0,3)<0)
		{
			MessageBox(_T("Write register failure,Please try again!"));
			Fresh_External_List();
			return;
		}
		else
		{
			product_register_value[CO2_485_MODBUS_EXT_CO2_OFFSET_START + i] = 0;
		}
	}
	OnBnClickedBtnCo2Refresh();
	SetPaneString(1,_T("Clear External Calibration Offset Success!! "));
}
void T38AI8AO::Fresh(){

	float progress;
	if (is_connect())
	{  
		CDialog_Progess* pDlg = new CDialog_Progess(this,1,100);
		pDlg->Create(IDD_DIALOG10_Progress, this);
		pDlg->ShowProgress(0,0);
		pDlg->ShowWindow(SW_SHOW);
		RECT RECT_SET1;
		GetClientRect(&RECT_SET1);
		pDlg->MoveWindow(RECT_SET1.left+400,RECT_SET1.bottom-19,RECT_SET1.right/2+20,20);

		for (int i=0;i<3;i++)
		{
			if (pDlg!=NULL)
			{
				progress=float((i+1)*(100/3));
				pDlg->ShowProgress(int(progress),(int)progress);
			} 
			Read_Multi(g_tstat_id,&product_register_value[i*100],i*100,100);
		}
		pDlg->ShowWindow(SW_HIDE);
		if(pDlg!=NULL)
		{delete pDlg;
		pDlg=NULL;}

		InitialRegister();	
		InitialDialog();
		AfxBeginThread(_BackFreshing,this);
	}
	else
	{
		SetPaneString(1,_T("Disconnection"));
		AfxMessageBox(_T("Please Connect your device"));
	}


}
void CCO2_View::OnEnKillfocusEditCo2Passwor()
{
	// TODO: Add your control notification handler code here
	UpdateData();
	if(m_cs_password.GetLength()!=4)
	{
		MessageBox(_T("The password length must be 4 !"));
		return;
	}
	bool bpassword_changed = false;
	CString temp;
	CString temp_password[4];
	unsigned short short_password[4];
	temp = m_cs_password;
	for (int i=0;i<4;i++)
	{
		temp_password[i] = temp.Left(1);
		temp =  temp.Right(3-i);

		short_password[i] = _wtoi(temp_password[i]);
		short_password[i] = short_password[i] + 0x30;
		if(product_register_value[CO2_485_MODBUS_USER_PASSWORD0 + i] != short_password[i])
		{
			if(write_one(g_tstat_id,CO2_485_MODBUS_USER_PASSWORD0 + i,short_password[i])<0)
			{
				MessageBox(_T("Write Password Failure,Please Try Again"));
				Show_PassWord();
				return;
			}
			else
			{
				product_register_value[CO2_485_MODBUS_USER_PASSWORD0 + i] = short_password[i];
				SetPaneString(1,_T("Change Password Success!!"));
			}
		}
	}

}
void CAirQuality::pctodb()
{
	TRACE(_T("Updatedatabase()start!\n"));
	KillTimer(AirQualityTimer);
	//存入数据库中
	CADO saveADO;
	saveADO.OnInitADOConn();
	CString sql = _T("select * from AirQuality");
	saveADO.m_pRecordset = saveADO.OpenRecordset(sql);
	if (!saveADO.m_pRecordset->EndOfFile)
	{
		saveADO.m_pRecordset->MoveFirst();

		for(int i = 0;i<400;i++)
		{
			try 
			{

				saveADO.m_pRecordset->PutCollect("Address",(_bstr_t)vecairquality.at(i).iaddress);
				saveADO.m_pRecordset->PutCollect("Data",(_bstr_t)vecairquality.at(i).CStvalue);


				saveADO.m_pRecordset->Update();
				saveADO.m_pRecordset->MoveNext();
			}


			catch(...)
			{
				SetPaneString(2,_T("Write dababase false!"));
				return ;
			}
		}
	}
	else
	{
		for(int i = 0;i<400;i++)
		{
			try 
			{

				saveADO.m_pRecordset->AddNew();
				saveADO.m_pRecordset->PutCollect("Address",(_bstr_t)vecairquality.at(i).iaddress);
				saveADO.m_pRecordset->PutCollect("Data",(_bstr_t)vecairquality.at(i).CStvalue);

				saveADO.m_pRecordset->Update();

			}


			catch(...)
			{
				SetPaneString(2,_T("Write dababase false!"));
				return;
			}
		}

	}

	saveADO.CloseRecordset();
	saveADO.CloseConn(); 

	SetTimer(AirQualityTimer,1000,NULL);

}
int BacnetScreen::GetPicFileFunction(unsigned char screen_index ,CString temp_image_folder)
{

	//TRACE(_T("Test"));
	//CString ChooseFilePath;
	//CFileDialog dlg(true,_T("*.*"),_T(" "),OFN_HIDEREADONLY ,_T("Pic files (*.*)|*.*||"),NULL,0);
	//if(IDOK!=dlg.DoModal())
	//	return ;
	//ChooseFilePath=dlg.GetPathName();
	//MD5是一个32bit的值 按字符存的;
	pic_sd_struct temp_picture;
	memset(&temp_picture,0,sizeof(pic_sd_struct));
	//char md5_value[33];
	//unsigned int total_packet = 0;
	//unsigned int total_pic_size = 0;
	unsigned int last_packet_size = 0;
	//memset(md5_value,0,33);
	memset(&m_picture_head,0,20);
	memset(picture_data_buffer,0,400);
	char * temp_point = picture_data_buffer;
	int device_obj_instance = g_bac_instance;
	if(GetPictureBlockData_Blocking(device_obj_instance,screen_index,0,0) > 0)
	{
		if((m_picture_head.seg_index != 0) || (m_picture_head.index != screen_list_line)  || (m_picture_head.total_seg != 0))
		{
			SetPaneString(BAC_SHOW_MISSION_RESULTS,_T("Get picture file from SD card failed!"));
			return 0;
		}
		else if(((unsigned char)temp_point[0]!= 0x55) || ((unsigned char)temp_point[1]!= 0xff) || ((unsigned char)temp_point[2]!= 0x55) ||((unsigned char)temp_point[3]!= 0xff))
		{
			SetPaneString(BAC_SHOW_MISSION_RESULTS,_T("Get picture file from SD card failed!CRC error!"));
			return 0;
		}
		temp_point = temp_point + 4;
		temp_picture.total_packet = ((unsigned char)temp_point[3])<<24 | ((unsigned char)temp_point[2]<<16) | ((unsigned char)temp_point[1])<<8 | ((unsigned char)temp_point[0]);
		temp_point = temp_point + 4;
		temp_picture.pic_file_size = ((unsigned char)temp_point[3])<<24 | ((unsigned char)temp_point[2]<<16) | ((unsigned char)temp_point[1])<<8 | ((unsigned char)temp_point[0]);
		temp_point = temp_point + 4;
		memcpy(temp_picture.md5_32byte,temp_point,33);
		temp_point = temp_point + 33;
		memcpy(temp_picture.file_name,temp_point,11);
	}
	else
	{
		AfxMessageBox(_T("Read Data Timeout"));
		return 0;
	}

	//比对MD5 与设备的是否一致;
	CString temp_pic_md5_cs;
	MultiByteToWideChar( CP_ACP, 0, temp_picture.md5_32byte, (int)strlen((char *)temp_picture.md5_32byte)+1, 
		temp_pic_md5_cs.GetBuffer(MAX_PATH), MAX_PATH );
	temp_pic_md5_cs.ReleaseBuffer();

	CString temp_file_name;
	MultiByteToWideChar( CP_ACP, 0, temp_picture.file_name, (int)strlen((char *)temp_picture.file_name)+1, 
		temp_file_name.GetBuffer(MAX_PATH), MAX_PATH );
	temp_file_name.ReleaseBuffer();



	CString Picture_path;
	CString PicFileTips;
	CString temp_image_folde;
	MultiByteToWideChar( CP_ACP, 0, (char *)m_screen_data.at(screen_list_line).picture_file, (int)strlen((char *)m_screen_data.at(screen_list_line).picture_file)+1, 
		PicFileTips.GetBuffer(MAX_PATH), MAX_PATH );
	PicFileTips.ReleaseBuffer();

	CString temp_now_building_name= g_strCurBuildingDatabasefilePath;
	PathRemoveFileSpec(temp_now_building_name.GetBuffer(MAX_PATH));
	temp_now_building_name.ReleaseBuffer();
	temp_image_folde = temp_now_building_name  + _T("\\image");

	Picture_path=temp_image_folde + _T("\\") + PicFileTips ;//_T("sample1.bmp");

	CFileFind temp_find;
	if(temp_find.FindFile(Picture_path))
	{
		string temp_md5 = MD5(ifstream( Picture_path )).toString();
		CString MD5_value;
		MD5_value = temp_md5.c_str();
		if(MD5_value.CompareNoCase(temp_pic_md5_cs) == 0)
		{
			SetPaneString(BAC_SHOW_MISSION_RESULTS,_T("Picture already exsit in image folder!"));
			return 0;
		}
		else
		{
			SetPaneString(BAC_SHOW_MISSION_RESULTS,_T("Picture changed , ready to update!"));
		}
	}
	else
	{
		SetPaneString(BAC_SHOW_MISSION_RESULTS,_T("No picture found in image folder , ready to download!"));
	}
	
	if(temp_picture.pic_file_size % 400 == 0)
	{
		last_packet_size = 400;
	}
	else
	{
		last_packet_size = temp_picture.pic_file_size % 400;
	}


	char *ReadBuff=new char[temp_picture.pic_file_size+1];//给位图文件申请内在空间;
	if(ReadBuff == NULL)
	{
		SetPaneString(BAC_SHOW_MISSION_RESULTS,_T("No enough memory!"));
		return 0;
	}
	memset(ReadBuff,0,temp_picture.pic_file_size+1);



	for (int i=1;i<temp_picture.total_packet;i++)
	{
		memset(picture_data_buffer,0,400);
		if(GetPictureBlockData_Blocking(g_bac_instance,screen_index,i,i) > 0)
		{
			if(i!= (temp_picture.total_packet-1))
				memcpy(ReadBuff + (i-1)*400,picture_data_buffer,400);
			else
				memcpy(ReadBuff + (i-1)*400,picture_data_buffer,last_packet_size);	//最后一包只copy 剩余的 字节;

			CString temp_cs_complet;
			temp_cs_complet.Format(_T("Read picture file %d / %d"), i*400  ,temp_picture.pic_file_size);
			SetPaneString(BAC_SHOW_MISSION_RESULTS,temp_cs_complet);
			g_progress_persent = i * 100 /temp_picture.total_packet;
		}
		else
		{
			SetPaneString(BAC_SHOW_MISSION_RESULTS,_T("Read picture file timeout , please try again"));
		}
	}

	CString temp_cs_finished;
	temp_cs_finished.Format(_T("Read picture file complete"));
	SetPaneString(BAC_SHOW_MISSION_RESULTS,temp_cs_finished);
	g_progress_persent = 100;
#pragma region write_file_buffer22

	HANDLE hFile;
	CString write_file_path;
	write_file_path = temp_image_folder + _T("\\") + temp_file_name;
	
	CFileFind temp_find_pic;
	if(temp_find_pic.FindFile(write_file_path))
	{
		DeleteFile(write_file_path);
	}


	hFile=CreateFile(write_file_path,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
	DWORD dWrites;
	WriteFile(hFile,ReadBuff,temp_picture.pic_file_size,&dWrites,NULL);
	CloseHandle(hFile);  
	if(ReadBuff)
	{
		delete ReadBuff;
		ReadBuff = NULL;
	}

#pragma endregion write_file_buffer22


	



		return 1;
#if 0
#pragma region read file buffer
	CFile Filetxt;//用来读取位图文件
	DWORD FileLen=0;//位图的长度
	char* FileBuff;//用于存放位图信息


	string temp_md5 = MD5(ifstream( ChooseFilePath )).toString();
	CString MD5_value;
	MD5_value = temp_md5.c_str();
	CString temp_show;
	temp_show.Format(_T("The File MD5 is :"));


	if(!Filetxt.Open(ChooseFilePath,CFile::modeRead))//打开文件
	{
		//MessageBox(NULL,"打开文本信息失败!",NULL, MB_OK);
		return false;
	}
	FileLen=Filetxt.GetLength();//得到位图的长度
	FileBuff=new char[FileLen+1];//给位图文件申请内在空间
	DWORD DwPic=Filetxt.GetLength();
	memset(FileBuff,0,FileLen+1);//初始化位图文件的空间
	if(!FileBuff)//判断位图空间是否申请成功
	{
		return false;
	}
	if(Filetxt.Read(FileBuff,FileLen)!=FileLen)//读取文本信息,存入到FileBuff中去
	{
		return false;
	}

	//unsigned int total_packet = 0;
	unsigned int temp_filepack = 0;
	unsigned int last_packet_data_size = 0;
	if(FileLen % 400 == 0)
	{
		temp_filepack = FileLen / 400;
		last_packet_data_size = 400;
	}
	else
	{
		temp_filepack =  FileLen / 400  + 1;
		last_packet_data_size = FileLen % 400;
	}

	total_packet = temp_filepack + 1; //其中 1是 第一包的头 传 MD5值和 文件总包数.;


	char md5_32byte[33];
	memset(md5_32byte,0,33);
	WideCharToMultiByte( CP_ACP, 0, MD5_value.GetBuffer(), -1, md5_32byte, 255, NULL, NULL );

	char send_buffer[400];
	memset(send_buffer,0 , 400);
	CString temp_cs_show;
	for (int z=0;z<total_packet;z++)
	{
		memset(send_buffer,0,400);
		if(z == 0)
		{
			memcpy(send_buffer,&total_packet,4);
			memcpy(send_buffer+4,md5_32byte,32);
		}
		else if(z < total_packet -1)
		{
			memcpy(send_buffer,FileBuff + z*400,400);
		}
		else
		{
			memcpy(send_buffer,FileBuff + z*400,last_packet_data_size);
		}
		if(WriteBacnetPictureData_Blocking(g_bac_instance,screen_index,z,total_packet,(unsigned char *)send_buffer)< 0)
		{
			MessageBox(_T("Write pocture file into SD disk timeout."));
			return false;

		}
		g_progress_persent = z * 100 /total_packet;

		temp_cs_show.Format(_T("Saving picture file into SD disk .(%u/%u)"),z*400,total_packet*400+last_packet_data_size);
		SetPaneString(BAC_SHOW_MISSION_RESULTS,temp_cs_show);

	}
	g_progress_persent = 100;
	temp_cs_show.Format(_T("Saving picture file into SD disk success."));
	SetPaneString(BAC_SHOW_MISSION_RESULTS,temp_cs_show);
	return true;
#pragma endregion read file buffer

#endif
	//#pragma region write_file_buffer22
	//
	//	HANDLE hFile;
	//	hFile=CreateFile(_T("D:\\Test.ico"),GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
	//	DWORD dWrites;
	//	WriteFile(hFile,FileBuff,FileLen,&dWrites,NULL);
	//	CloseHandle(hFile);  
	//	if(FileBuff)
	//		delete FileBuff;
	//
	//#pragma endregion write_file_buffer22


}
void CT3000App::JudgeDB(){
 CADO ado;
 int versionno=0;
 ado.OnInitADOConn();
 if (ado.IsHaveTable(ado,_T("Version")))//有Version表
 {
   CString sql=_T("Select * from Version");
   ado.m_pRecordset=ado.OpenRecordset(sql);
   ado.m_pRecordset->MoveFirst();
   while (!ado.m_pRecordset->EndOfFile)
   {
     versionno=ado.m_pRecordset->GetCollect(_T("VersionNO"));
	 ado.m_pRecordset->MoveNext();
   }
   ado.CloseRecordset();
  
   
 } 
  ado.CloseConn();

 if (g_versionNO>versionno)//版本过低
 {
     SetPaneString(0,_T("The version of DB is lower,Updating....."));
	 _ConnectionPtr srcConTmp;
	 _RecordsetPtr srcRsTemp;
	 srcConTmp.CreateInstance("ADODB.Connection");
	 srcRsTemp.CreateInstance("ADODB.Recordset");
	 srcConTmp->Open(g_strDatabasefilepath.GetString(),"","",adModeUnknown);
	 srcRsTemp->Open(_T("select * from ALL_NODE"),_variant_t((IDispatch *)srcConTmp,true),adOpenStatic,adLockOptimistic,adCmdText);		

	 ALL_NODE temp;
	 while(!srcRsTemp->EndOfFile){
		 temp.MainBuilding_Name=srcRsTemp->GetCollect(_T("MainBuilding_Name"));
		 temp.Building_Name=srcRsTemp->GetCollect(_T("Building_Name"));
		 temp.Serial_ID=srcRsTemp->GetCollect(_T("Serial_ID"));
		 temp.Floor_name=srcRsTemp->GetCollect(_T("Floor_name"));
		 temp.Room_name=srcRsTemp->GetCollect(_T("Room_name"));
		 temp.Product_name=srcRsTemp->GetCollect(_T("Product_name"));
		 temp.Product_class_ID=srcRsTemp->GetCollect(_T("Product_class_ID"));
		 temp.Product_ID=srcRsTemp->GetCollect(_T("Product_ID"));
		 temp.Screen_Name=srcRsTemp->GetCollect(_T("Screen_Name"));
		 temp.Bautrate=srcRsTemp->GetCollect(_T("Bautrate"));
		 temp.Background_imgID=srcRsTemp->GetCollect(_T("Background_imgID"));
		 temp.Hardware_Ver=srcRsTemp->GetCollect(_T("Hardware_Ver"));
		 temp.Software_Ver=srcRsTemp->GetCollect(_T("Software_Ver"));
//		 temp.Com_Port=srcRsTemp->GetCollect(_T("Com_Port"));
		 temp.EPsize=srcRsTemp->GetCollect(_T("EPsize"));
		 // temp.Protocol=srcRsTemp->GetCollect(_T("Protocol"));

		 srcRsTemp->MoveNext();

		 m_AllNodes.push_back(temp);
	 }

	 srcRsTemp->Close();
	 if (srcConTmp->State)
	 {srcConTmp->Close();
	 }
	 
	 

	 
	 CString filePath=g_strExePth+_T("Database\\T3000.mdb");
	 DeleteFile(filePath);



	 HANDLE hFind;//
	 WIN32_FIND_DATA wfd;//
	 hFind = FindFirstFile(filePath, &wfd);//
	 if (hFind==INVALID_HANDLE_VALUE)//说明当前目录下无t3000.mdb
	 {
		 //CopyFile(g_strOrigDatabaseFilePath,g_strDatabasefilepath,FALSE);//
		 //没有找到就创建一个默认的数据库
		 filePath=g_strExePth+_T("Database\\T3000.mdb");
		 HRSRC hrSrc = FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_T3000_DATABASE), _T("DB"));   
		 HGLOBAL hGlobal = LoadResource(AfxGetResourceHandle(), hrSrc);   


		 LPVOID lpExe = LockResource(hGlobal);   
		 CFile file;
		 if(file.Open(filePath, CFile::modeCreate | CFile::modeWrite))    
			 file.Write(lpExe, (UINT)SizeofResource(AfxGetResourceHandle(), hrSrc));    
		 file.Close();    
		 ::UnlockResource(hGlobal);   
		 ::FreeResource(hGlobal);
	 }//
	 CString strsql;
	 srcConTmp->Open(g_strDatabasefilepath.GetString(),"","",adModeUnknown);

	 try
	 {

		 for (int i=0;i<m_AllNodes.size();i++)
		 {
			 strsql.Format(_T("insert into ALL_NODE (MainBuilding_Name,Building_Name,Serial_ID,Floor_name,Room_name,Product_name,Product_class_ID,Product_ID,Screen_Name,Bautrate,Background_imgID,Hardware_Ver,Software_Ver,EPsize) values('"
				 +m_AllNodes[i].MainBuilding_Name+"','"
				 +m_AllNodes[i].Building_Name+"','"
				 +m_AllNodes[i].Serial_ID+"','"
				 +m_AllNodes[i].Floor_name+"','"
				 +m_AllNodes[i].Room_name+"','"
				 +m_AllNodes[i].Product_name+"','"
				 +m_AllNodes[i].Product_class_ID+"','"
				 +m_AllNodes[i].Product_ID+"','"
				 +m_AllNodes[i].Screen_Name+"','"
				 +m_AllNodes[i].Bautrate+"','"
				 +m_AllNodes[i].Background_imgID+"','"
				 +m_AllNodes[i].Hardware_Ver+"','"
				 +m_AllNodes[i].Software_Ver+"','"
				 +m_AllNodes[i].EPsize+"')"));


			 srcConTmp->Execute(strsql.GetString(),NULL,adCmdText);	
		 }
	 }
	 catch(_com_error *e)
	 {
		 AfxMessageBox(e->ErrorMessage());
	 }

	 if (srcConTmp->State)
	 {srcConTmp->Close();
	 }
	 srcConTmp=NULL;

 }



}
void CCO2_NodeView::UpdateRadio_Main()
{
    bitset<16> Temp_bitset(product_register_value[169]);

    if (((CButton *)GetDlgItem(IDC_RADIO1))->GetCheck() == true)
    {
        Temp_bitset[0] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO2))->GetCheck() == true)
    {
        Temp_bitset[0] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO3))->GetCheck() == true)
    {
        Temp_bitset[1] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO4))->GetCheck() == true)
    {
        Temp_bitset[1] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO5))->GetCheck() == true)
    {
        Temp_bitset[2] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO6))->GetCheck() == true)
    {
        Temp_bitset[2] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO7))->GetCheck() == true)
    {
        Temp_bitset[4] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO8))->GetCheck() == true)
    {
        Temp_bitset[4] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO9))->GetCheck() == true)
    {
        Temp_bitset[5] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO10))->GetCheck() == true)
    {
        Temp_bitset[5] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO11))->GetCheck() == true)
    {
        Temp_bitset[6] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO12))->GetCheck() == true)
    {
        Temp_bitset[6] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO13))->GetCheck() == true)
    {
        Temp_bitset[7] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO14))->GetCheck() == true)
    {
        Temp_bitset[7] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO15))->GetCheck() == true)
    {
        Temp_bitset[8] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO16))->GetCheck() == true)
    {
        Temp_bitset[8] = 0;
    }
    product_register_value[169] = (unsigned short)Temp_bitset.to_ulong();
    int nret = write_one(g_tstat_id, 169, product_register_value[169]);
    if (nret <= 0)
    {
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Operation failed!"));
        PostMessage(WM_CO2_NODE_THREAD_READ, NULL, NULL);
    }
    else
    {
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Operation Done!"));
    }

    ((CButton *)GetDlgItem(IDC_BUTTON_OK))->SetFocus();
}
int BacnetScreen::WritePicFileFunction(CString ChooseFilePath,unsigned char screen_index,CString pic_filename)
{

	//TRACE(_T("Test"));
	//CString ChooseFilePath;
	//CFileDialog dlg(true,_T("*.*"),_T(" "),OFN_HIDEREADONLY ,_T("Pic files (*.*)|*.*||"),NULL,0);
	//if(IDOK!=dlg.DoModal())
	//	return ;
	//ChooseFilePath=dlg.GetPathName();
	//MD5是一个32bit的值 按字符存的;




#pragma region read file buffer
	pic_sd_struct temp_pic;
	memset(&temp_pic,0,sizeof(pic_sd_struct));
	CFile Filetxt;//用来读取位图文件
	DWORD FileLen=0;//位图的长度
	char* FileBuff;//用于存放位图信息

	//unsigned int pic_file_size = 0;
	string temp_md5 = MD5(ifstream( ChooseFilePath )).toString();
	CString MD5_value;
	MD5_value = temp_md5.c_str();
	CString temp_show;
	temp_show.Format(_T("The File MD5 is :"));


	if(!Filetxt.Open(ChooseFilePath,CFile::modeRead))//打开文件
	{
		//MessageBox(NULL,"打开文本信息失败!",NULL, MB_OK);
		return false;
	}
	FileLen=Filetxt.GetLength();//得到位图的长度
	FileBuff=new char[FileLen+1];//给位图文件申请内在空间
	DWORD DwPic=Filetxt.GetLength();
	memset(FileBuff,0,FileLen+1);//初始化位图文件的空间
	if(!FileBuff)//判断位图空间是否申请成功
	{
		return false;
	}
	if(Filetxt.Read(FileBuff,FileLen)!=FileLen)//读取文本信息,存入到FileBuff中去
	{
		return false;
	}
	temp_pic.pic_file_size = FileLen;
	//unsigned int total_packet = 0;
	unsigned int temp_filepack = 0;
	unsigned int last_packet_data_size = 0;
	if(FileLen % 400 == 0)
	{
		temp_filepack = FileLen / 400;
		last_packet_data_size = 400;
	}
	else
	{
		temp_filepack =  FileLen / 400  + 1;
		last_packet_data_size = FileLen % 400;
	}

	temp_pic.total_packet = temp_filepack + 1; //其中 1是 第一包的头 传 MD5值和 文件总包数.;

	//char crc_cal[4];
	temp_pic.crc_cal[0] = 0x55 ; temp_pic.crc_cal[1] = 0xff ;temp_pic.crc_cal[2] = 0x55 ;temp_pic.crc_cal[3] = 0xff ; //第一包里面用 前4个字节 0x55ff55ff来 区别旧版本 不回复的信息;
	//char md5_32byte[33];
	memset(temp_pic.md5_32byte,0,33);
	WideCharToMultiByte( CP_ACP, 0, MD5_value.GetBuffer(), -1, temp_pic.md5_32byte, 255, NULL, NULL );

	if(pic_filename.GetLength() >= 11)
		pic_filename = pic_filename.Left(10);
	WideCharToMultiByte( CP_ACP, 0, pic_filename.GetBuffer(), -1, temp_pic.file_name, 255, NULL, NULL );

	char send_buffer[400];
	memset(send_buffer,0 , 400);
	CString temp_cs_show;
	int device_obj_instance = g_bac_instance;
	for (int z=0;z<temp_pic.total_packet;z++)
	{
		memset(send_buffer,0,400);
		if(z == 0)
		{
			memcpy(send_buffer,&temp_pic,sizeof(pic_sd_struct));

			//memcpy(send_buffer,temp_pic.crc_cal,4);
			//memcpy(send_buffer+4,&temp_pic.total_packet,4);
			//memcpy(send_buffer+8,&temp_pic.pic_file_size,4);		
			//memcpy(send_buffer+12,temp_pic.md5_32byte,33);
		}
		else if(z < temp_pic.total_packet - 1)
		{
			memcpy(send_buffer,FileBuff + (z-1)*400,400);
		}
		else
		{
			memcpy(send_buffer,FileBuff + (z-1)*400,last_packet_data_size);
		}
		if(WriteBacnetPictureData_Blocking(device_obj_instance,screen_index,z,temp_pic.total_packet,(unsigned char *)send_buffer)< 0)
		{
			MessageBox(_T("Write picture file into SD disk timeout."));
			return false;

		}
		g_progress_persent = z * 100 /temp_pic.total_packet;
		
		temp_cs_show.Format(_T("Saving picture file into SD disk .(%u/%u)"),z*400,(temp_pic.total_packet)*400+last_packet_data_size);
		SetPaneString(BAC_SHOW_MISSION_RESULTS,temp_cs_show);

	}
	g_progress_persent = 100;
	temp_cs_show.Format(_T("Saving picture file into SD disk success."));
	SetPaneString(BAC_SHOW_MISSION_RESULTS,temp_cs_show);
	return true;
#pragma endregion read file buffer

}
LRESULT CCO2_NodeView::Fresh_CO2_Node_Item(WPARAM wParam, LPARAM lParam)
{
    int cmp_ret;//compare if match it will 0;
    int Changed_Item = (int)wParam;
    int Changed_SubItem = (int)lParam;
    int nret = 0;
    int int_value = 0;
    CString temp_task_info;
    CString New_CString = m_co2_node_list.GetItemText(Changed_Item, Changed_SubItem);
    if (Changed_SubItem == CO2_NODE_TYPE_VALUE)
    {
        int nreg = 0;
        if (Changed_Item == ROW_CO2)
        {
            int_value = _wtoi(New_CString);
            nret = write_one(g_tstat_id, 108, int_value);
        }
        else if (Changed_Item == ROW_TEMPERATURE)
        {
            float nvalue = _wtof(New_CString);
            int nwritevalue = (int)(nvalue * 10);
            //if (product_register_value[124] == 0)
            //{
            //    if (product_register_value[125] == 0)
            //    {
            //        nreg = 121;
            //    }
            //    else
            //    {
            //        nreg = 122;
            //    }
            //}
            //else
            //{
                if (product_register_value[125] == 0)
                {
                    nreg = 119;
                }
                else
                {
                    nreg = 120;
                }
            //}
            nret = write_one(g_tstat_id, nreg, nwritevalue);
        }
        else if (Changed_Item == ROW_HUMIDITY)
        {
            float nvalue = _wtof(New_CString);
            int nwritevalue = (int)(nvalue * 10);
            nret = write_one(g_tstat_id, 116, nwritevalue);
        }
    }
    else if (Changed_SubItem == CO2_NODE_SETPOINT)
    {
        if (Changed_Item == ROW_CO2)
        {
            int_value = _wtoi(New_CString);
            nret = write_one(g_tstat_id, 166, int_value);
        }
        else if (Changed_Item == ROW_TEMPERATURE)
        {
            float nvalue = _wtof(New_CString);
            int nwritevalue = (int)(nvalue * 10);
            nret = write_one(g_tstat_id, 167, nwritevalue);
        }
        else if (Changed_Item == ROW_HUMIDITY)
        {
            float nvalue = _wtof(New_CString);
            int nwritevalue = (int)(nvalue * 10);
            nret = write_one(g_tstat_id, 168, nwritevalue);
        }
    }
    else if (Changed_SubItem == CO2_NODE_MIN_VALUE)
    {
        if (Changed_Item == ROW_CO2)
        {
            int_value = _wtoi(New_CString);
            nret = write_one(g_tstat_id, 132, int_value);
        }
        else if (Changed_Item == ROW_TEMPERATURE)
        {
            int_value = (unsigned short)_wtoi(New_CString);
            nret = write_one(g_tstat_id, 128, int_value);
        }
        else if (Changed_Item == ROW_HUMIDITY)
        {
            int_value = _wtoi(New_CString);
            nret = write_one(g_tstat_id, 130, int_value);
        }
    }
    else if (Changed_SubItem == CO2_NODE_MAX_VALUE)
    {
        if (Changed_Item == ROW_CO2)
        {
            int_value = _wtoi(New_CString);
            nret = write_one(g_tstat_id, 133, int_value);
        }
        else if (Changed_Item == ROW_TEMPERATURE)
        {
            int_value = (unsigned short)_wtoi(New_CString);
            nret = write_one(g_tstat_id, 129, int_value);
        }
        else if (Changed_Item == ROW_HUMIDITY)
        {
            int_value = _wtoi(New_CString);
            nret = write_one(g_tstat_id, 131, int_value);
        }
    }
    else if (Changed_SubItem == CO2_NODE_CALIBRATION)
    {
        if (product_register_value[127] == 1)
        {
            if (Changed_Item == ROW_CO2)
            {
                int_value = _wtoi(New_CString);
                nret = write_one(g_tstat_id, 147, int_value);
            }
            else if (Changed_Item == ROW_TEMPERATURE)
            {
                int_value = _wtoi(New_CString);
                nret = write_one(g_tstat_id, 148, int_value);
            }
            else if (Changed_Item == ROW_HUMIDITY)
            {
                int_value = _wtoi(New_CString);
                nret = write_one(g_tstat_id, 149, int_value);
            }
        }
        else if ((product_register_value[127] == 2) || (product_register_value[127] == 3))
        {
            if (Changed_Item == ROW_CO2)
            {
                int_value = _wtoi(New_CString);
                nret = write_one(g_tstat_id, 144, int_value);
            }
            else if (Changed_Item == ROW_TEMPERATURE)
            {
                int_value = _wtoi(New_CString);
                nret = write_one(g_tstat_id, 145, int_value);
            }
            else if (Changed_Item == ROW_HUMIDITY)
            {
                int_value = _wtoi(New_CString);
                nret = write_one(g_tstat_id, 146, int_value);
            }
        }
    }



    if (nret <= 0)
    {
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Operation failed!"));
        PostMessage(WM_CO2_NODE_THREAD_READ, NULL, NULL);
    }
    else
    {
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Operation Done!"));
    }
    return 1;
}
//Add 20130724  by Fance
LRESULT  CCO2_View::ResumeCO2MessageCallBack(WPARAM wParam, LPARAM lParam)
{
	UINT temp_id;
	_MessageWriteOneInfo *Write_Struct_feedback =(_MessageWriteOneInfo *)lParam;
	bool msg_result=WRITE_FAIL;
	msg_result = MKBOOL(wParam);
	vector <int>::iterator Iter;
	if(msg_result)
	{
		int indexid = -1;
		for (int i=0;i<(int)Change_Color_ID.size();i++)
		{
			if(Change_Color_ID.at(i)!=Write_Struct_feedback->CTRL_ID)
				continue;
			else
				indexid = i;
		}

		if(indexid!=-1)
		{
			Iter = Change_Color_ID.begin()+indexid;
			Change_Color_ID.erase(Iter);
		}

		CString temp;
		temp.Format(_T("Change \"%s\" value from %d to %d success!"),
			Write_Struct_feedback->Changed_Name,
			Write_Struct_feedback->old_value,
			Write_Struct_feedback->new_value);
		temp_id = Write_Struct_feedback->CTRL_ID;
		SetPaneString(1,temp);
		product_register_value[Write_Struct_feedback->address]= Write_Struct_feedback->new_value;
		if(Write_Struct_feedback!=NULL)
			delete Write_Struct_feedback;
		//MessageBox(temp);
	}
	else
	{
		CString temp;
		temp.Format(_T("Change \"%s\" value from %d to %d Fail!"),
			Write_Struct_feedback->Changed_Name,
			Write_Struct_feedback->old_value,
			Write_Struct_feedback->new_value);

		temp_id = Write_Struct_feedback->CTRL_ID;
		SetPaneString(1,temp);
		Beep(10,100);
		product_register_value[Write_Struct_feedback->address]= Write_Struct_feedback->old_value;
		//GetDlgItem(Write_Struct_feedback->CTRL_ID)->SetWindowTextW(_T(""));

		int indexid = -1;
		for (int i=0;i<(int)Change_Color_ID.size();i++)
		{
			if(Change_Color_ID.at(i)!=Write_Struct_feedback->CTRL_ID)
				continue;
			else
				indexid = i;
		}
		Iter = Change_Color_ID.begin()+indexid;
		if(indexid!=-1)
		{
			Iter = Change_Color_ID.begin()+indexid;
			Change_Color_ID.erase(Iter);
		}

		if(Write_Struct_feedback!=NULL)
		{
			delete Write_Struct_feedback;
		}
	}
	Fresh();
	GetDlgItem(temp_id)->Invalidate();

	return 0;
}
LRESULT  CTStatOutputView::OutputMessageCallBack(WPARAM wParam, LPARAM lParam)
{
    
    int msg_result=(int) wParam;

    CString temp_task_info;
    CString Show_Results;
   
    LoadTstat_OutputData();
    if (msg_result==1||msg_result==2)//单写
    {
        _MessageWriteOneInfo_List *pInvoke =(_MessageWriteOneInfo_List *)lParam;
        //pInvoke->list_type=LIST_TYPE_OUTPUT_TSTAT; 
        CString temp_cs = pInvoke->Changed_Name;
        if (msg_result==1)
        {
            Show_Results = temp_cs + _T(" Success!");
            SetPaneString(BAC_SHOW_MISSION_RESULTS,Show_Results); 
        }
        else
        {
            Show_Results = temp_cs + _T("Fail!");
            SetPaneString(BAC_SHOW_MISSION_RESULTS,Show_Results);
        }
        Fresh_One_Item(pInvoke->mRow);

        if((pInvoke->mRow%2)==0)//恢复前景和 背景 颜色;
            m_output_list.SetItemBkColor(pInvoke->mRow,pInvoke->mCol,LIST_ITEM_DEFAULT_BKCOLOR,0);
        else
            m_output_list.SetItemBkColor(pInvoke->mRow,pInvoke->mCol,LIST_ITEM_DEFAULT_BKCOLOR_GRAY,0);

        m_output_list.RedrawItems(pInvoke->mRow,pInvoke->mRow);


        if(pInvoke)
            delete pInvoke;
    }
    if (msg_result==3||msg_result==4)//多写
    { 

        _MessageWriteMultiInfo_List *pInvoke =(_MessageWriteMultiInfo_List *)lParam;

        CString temp_cs = pInvoke->Changed_Name;
        if (msg_result==3){
            Show_Results = temp_cs + _T("Success!");
            SetPaneString(BAC_SHOW_MISSION_RESULTS,Show_Results);   
        }
        else{
            Show_Results = temp_cs + _T("Fail!");
            SetPaneString(BAC_SHOW_MISSION_RESULTS,Show_Results);
        }




        Fresh_One_Item(pInvoke->mRow);

        //  PostMessage(WM_REFRESH_BAC_INPUT_LIST,0,0);


        if((pInvoke->mRow%2)==0)	//恢复前景和 背景 颜色;
            m_output_list.SetItemBkColor(pInvoke->mRow,pInvoke->mCol,LIST_ITEM_DEFAULT_BKCOLOR,0);
        else
            m_output_list.SetItemBkColor(pInvoke->mRow,pInvoke->mCol,LIST_ITEM_DEFAULT_BKCOLOR_GRAY,0);

        m_output_list.RedrawItems(pInvoke->mRow,pInvoke->mRow);


        if(pInvoke)
            delete pInvoke;

    }
    
    return 0;
}
void CCO2_NodeView::UpdateRadio_ScrollDisplay()
{
    bitset<16> Temp_bitset(product_register_value[170]);

    if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL1))->GetCheck() == true)
    {
        Temp_bitset[0] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL2))->GetCheck() == true)
    {
        Temp_bitset[0] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL3))->GetCheck() == true)
    {
        Temp_bitset[1] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL4))->GetCheck() == true)
    {
        Temp_bitset[1] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL5))->GetCheck() == true)
    {
        Temp_bitset[2] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL6))->GetCheck() == true)
    {
        Temp_bitset[2] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL7))->GetCheck() == true)
    {
        Temp_bitset[3] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL8))->GetCheck() == true)
    {
        Temp_bitset[3] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL9))->GetCheck() == true)
    {
        Temp_bitset[4] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL10))->GetCheck() == true)
    {
        Temp_bitset[4] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL11))->GetCheck() == true)
    {
        Temp_bitset[5] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL12))->GetCheck() == true)
    {
        Temp_bitset[5] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL13))->GetCheck() == true)
    {
        Temp_bitset[7] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL14))->GetCheck() == true)
    {
        Temp_bitset[7] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL15))->GetCheck() == true)
    {
        Temp_bitset[8] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL16))->GetCheck() == true)
    {
        Temp_bitset[8] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL17))->GetCheck() == true)
    {
        Temp_bitset[9] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL18))->GetCheck() == true)
    {
        Temp_bitset[9] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL19))->GetCheck() == true)
    {
        Temp_bitset[10] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL20))->GetCheck() == true)
    {
        Temp_bitset[10] = 0;
    }

    if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL21))->GetCheck() == true)
    {
        Temp_bitset[11] = 1;
    }
    else if (((CButton *)GetDlgItem(IDC_RADIO_SCROLL22))->GetCheck() == true)
    {
        Temp_bitset[11] = 0;
    }

    product_register_value[170] = (unsigned short)Temp_bitset.to_ulong();
    int nret = write_one(g_tstat_id, 170, product_register_value[170]);
    if (nret <= 0)
    {
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Operation failed!"));
        PostMessage(WM_CO2_NODE_THREAD_READ, NULL, NULL);
    }
    else
    {
        SetPaneString(BAC_SHOW_MISSION_RESULTS, _T("Operation Done!"));
    }

    ((CButton *)GetDlgItem(IDC_BUTTON_OK))->SetFocus();
}
LRESULT CTStatOutputView::Fresh_Output_Item(WPARAM wParam,LPARAM lParam)
{
    int cmp_ret ;//compare if match it will 0;
    int Changed_Item = (int)wParam;
    int Changed_SubItem = (int)lParam;
    CString strText;
    CString temp_task_info;
    CString New_CString =  m_output_list.GetItemText(Changed_Item,Changed_SubItem);
    strText=New_CString;
    CString cstemp_value;
    int lRow=Changed_Item;
    int lCol=Changed_SubItem;
    if (New_CString.CompareNoCase(NO_APPLICATION)==0)
    {
        return 0 ;
    }
    BOOL IS_SEND=FALSE;
    _MessageWriteOneInfo_List  *pwrite_info = new _MessageWriteOneInfo_List;
    pwrite_info->list_type=LIST_TYPE_OUTPUT_TSTAT;
#if 0
    if(lCol == TStat_OutputName)
    {

        if (New_CString.CompareNoCase(m_tstat_output_data.at(Changed_Item).OutputName.StrValue)==0)
        {
            return 0;
        }
        CBADO bado;
        bado.SetDBPath(g_strCurBuildingDatabasefilePath);
        bado.OnInitADOConn(); 
        CString strSerial;
        strSerial.Format(_T("%d"),g_serialNum);

        CString strsql;
        strsql.Format(_T("select * from IONAME where SERIAL_ID = '%s'"),strSerial);
        bado.m_pRecordset=bado.OpenRecordset(strsql);
        //m_RsTmp->Open((_variant_t)strsql,_variant_t((IDispatch *)m_ConTmp,true),adOpenStatic,adLockOptimistic,adCmdText);
        if(VARIANT_FALSE==bado.m_pRecordset->EndOfFile)//update
        {

            CString strField;
            switch (lRow+1)
            {
            case 1:
                strField=_T("OUTPUT1");
                break;
            case 2:
                strField=_T("OUTPUT2");
                break;
            case 3:
                strField=_T("OUTPUT3");
                break;
            case 4:
                strField=_T("OUTPUT4");
                break;
            case 5:
                strField=_T("OUTPUT5");
                break;
            case 6:
                strField=_T("OUTPUT6");
                break;
            case 7:
                strField=_T("OUTPUT7");
                break;
            }

            try
            {

                CString str_temp;
                str_temp.Format(_T("update IONAME set "+strField+" = '"+strText+"' where SERIAL_ID = '"+strSerial+"'"));
                //AfxMessageBox(str_temp );
                bado.m_pConnection->Execute(str_temp.GetString(),NULL,adCmdText);
            }
            catch(_com_error *e)
            {
                AfxMessageBox(e->ErrorMessage());
            }
            // m_FlexGrid.put_TextMatrix(lRow,lCol,strText);

        }
        else//inerst
        {
            switch (lRow+1)
            {
            case 1:
                g_strOutName1=strText;
                break;
            case 2:
                g_strOutName2=strText;
                break;
            case 3:
                g_strOutName3=strText;
                break;
            case 4:
                g_strOutName4=strText;
                break;
            case 5:
                g_strOutName5=strText;
                break;
            case 6:
                g_strOutName6=strText;
                break;
            case 7:
                g_strOutName7=strText;
                break;
            }

            CString	str_temp;
            str_temp.Format(_T("insert into IONAME values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')"),
                strSerial,
                g_strInName1,
                g_strInName2,
                g_strInName3,
                g_strInName4,
                g_strInName5,
                g_strInName6,
                g_strInName7,
                g_strOutName1,
                g_strOutName2,
                g_strOutName3,
                g_strOutName4,
                g_strOutName5,
                g_strOutName6,
                g_strOutName7,
                g_strInName8,
                g_strInHumName,
                g_strSensorName
                );
            try
            {

                bado.m_pConnection->Execute(str_temp.GetString(),NULL,adCmdText);
            }
            catch(_com_error *e)
            {
                AfxMessageBox(e->ErrorMessage());
            }
            // m_FlexGrid.put_TextMatrix(lRow,lCol,strText);
        }

        switch (lRow+1)
        {
        case 1:
            g_strOutName1=strText;
            break;
        case 2:
            g_strOutName2=strText;
            break;
        case 3:
            g_strOutName3=strText;
            break;
        case 4:
            g_strOutName4=strText;
            break;
        case 5:
            g_strOutName5=strText;
            break;
        case 6:
            g_strOutName6=strText;
            break;
        case 7:
            g_strOutName7=strText;
            break;
        }

        bado.CloseRecordset();
        bado.CloseConn();	

        m_tstat_output_data.at(Changed_Item).OutputName.StrValue=New_CString;

        Fresh_One_Item(Changed_Item);
    }
#endif
    if(lCol == TStat_OutputName)
    {
        if (Changed_Item > 7)
        {
            IS_SEND=FALSE;
            m_output_list.Set_Edit(false);
            return 0;
        }

        CString cs_temp = m_output_list.GetItemText(Changed_Item,Changed_SubItem);
        if(cs_temp.GetLength()> STR_IN_LABEL)	//长度不能大于结构体定义的长度;
        {
            cs_temp.Delete(8,cs_temp.GetLength()-8);
        }

        if (m_tstat_output_data.at(Changed_Item).OutputName.StrValue.CompareNoCase(cs_temp)==0)
        {
            PostMessage(WM_REFRESH_BAC_OUTPUT_LIST,NULL,NULL);
            return 0; 
        }

        char cTemp1[8];
        memset(cTemp1,0,8);
        WideCharToMultiByte( CP_ACP, 0, cs_temp.GetBuffer(), -1, cTemp1, 8, NULL, NULL );

        _MessageWriteMultiInfo_List *pwrite_info = new _MessageWriteMultiInfo_List;
        pwrite_info->device_id=g_tstat_id;
        pwrite_info->Changed_Name.Format(_T("Change outputname%d from %s to %s"),Changed_Item,m_tstat_output_data.at(Changed_Item).OutputName.StrValue,cs_temp);
        pwrite_info->hwnd=g_hwnd_now;
        pwrite_info->mRow=Changed_Item;
        pwrite_info->mCol=Changed_SubItem;
        pwrite_info->Start_Address=m_tstat_output_data.at(Changed_Item).OutputName.regAddress;
        memcpy_s(pwrite_info->RegValue,STR_IN_LABEL-1,cTemp1,STR_IN_LABEL-1);
        m_output_list.SetItemBkColor(Changed_Item,Changed_SubItem,LIST_ITEM_CHANGED_BKCOLOR);
        if(!PostThreadMessage(nThreadID,MY_WRITE_MULTI_LIST,(WPARAM)pwrite_info,NULL))//post thread msg
        {
            return FALSE;
        }
        else
        {
            return TRUE;
        }
    }

    if(lCol == TStat_AM){
        if (product_type==CS3000)
        {
            if (m_tstat_output_data.at(0).Signal_Type.StrValue.CompareNoCase(New_CString)!=0)
            {
                IS_SEND=TRUE;
                pwrite_info->Changed_Name.Format(_T("%s,From %s to %s"),m_tstat_output_data.at(lRow).OutputName.StrValue,m_tstat_output_data.at(lRow).Value.StrValue,New_CString);
                pwrite_info->address=m_tstat_output_data.at(lRow).Signal_Type.regAddress;
                if (New_CString.CompareNoCase(_T("Current"))==0)
                {
                    pwrite_info->new_value=0;
                } 
                else
                {
                    pwrite_info->new_value=1;
                }
            }
        }

    }
    if(lCol == TStat_Unit){
        if (product_type==CS3000)
        {
            if (m_tstat_output_data.at(0).Range.StrValue.CompareNoCase(New_CString)!=0)
            {
                IS_SEND=TRUE;
                pwrite_info->Changed_Name.Format(_T("%s,From %s to %s"),m_tstat_output_data.at(lRow).OutputName.StrValue,m_tstat_output_data.at(lRow).Range.StrValue,New_CString);
                pwrite_info->address=m_tstat_output_data.at(lRow).Range.regAddress; 
                pwrite_info->new_value=_wtoi(New_CString);
            }
        }

    }

    if (lCol == TStat_Value){
        //if (m_tstat_output_data.at(lRow).Value.StrValue.CompareNoCase(New_CString)==0)//选的字符和内存的值相同的话,就返回
        //{
        //	m_output_list.Set_Edit(false);
        //	IS_SEND=FALSE;
        //	return 0;
        //}

        int Output_Value=(int)(_wtof(New_CString)*10);
		if(Output_Value >1000)
		{
			SetPaneString(BAC_SHOW_MISSION_RESULTS,_T("Please input value between 0 - 100 "));
			PostMessage(WM_REFRESH_BAC_OUTPUT_LIST,NULL,NULL);
			return 0;
		}
        if (m_tstat_output_data.at(lRow).Value.RegValue==Output_Value)
        {
            m_output_list.Set_Edit(false);
            IS_SEND=FALSE;
            return 0; 
        }

		IS_SEND=TRUE;
		pwrite_info->Changed_Name.Format(_T("Value,From %u to %s"),m_tstat_output_data.at(lRow).Function.RegValue,New_CString);
		pwrite_info->address=m_tstat_output_data.at(lRow).Value.regAddress;
		pwrite_info->new_value=Output_Value;


    }

    if (lCol == TStat_Range)
    {	
        if (m_tstat_output_data.at(lRow).Range.StrValue.CompareNoCase(New_CString)==0)//选的字符和内存的值相同的话,就返回
        {
            m_output_list.Set_Edit(false);
            IS_SEND=FALSE;
            return 0;
        }
        if (New_CString.CompareNoCase(_T("PWM(0-100%)"))==0)//是PWM
        {
            //检测当前的PWM状态的个数
            int PWMNUMBER =0;
            for (int i=0;i<7;i++)
            {
                if (m_tstat_output_data.at(i).Range.StrValue.CompareNoCase(_T("PWM(0-100%)"))==0)
                {
                    PWMNUMBER++;
                }
            }
            if (PWMNUMBER>=2)
            {
                AfxMessageBox(_T("PWM Mode should be less than two!"));
                m_output_list.Set_Edit(false);
                IS_SEND=FALSE;
                return 0;
            }
        }
        int RangeValue=-1;
        if (product_register_value[7]==1||product_register_value[7]==2||product_register_value[7]==3)
        {
            if (Changed_Item<3)
            {
                for (int i=0;i<3;i++)
                {
                    if (New_CString.CompareNoCase(OUTPUT_RANGE5[i])==0)
                    {
                        RangeValue=i;
                        break;
                    }
                }
            } 
            else if (Changed_Item<5)
            {
                for (int i=0;i<18;i++)
                {
                    if (New_CString.CompareNoCase(OUTPUT_ANRANGE[i])==0)
                    {
                        RangeValue=i;
                        break;
                    }
                }
            }

        }
        else
        {
            if (Changed_Item<5)
            {
                for (int i=0;i<6;i++)
                {
                    if (New_CString.CompareNoCase(OUTPUT_RANGE45[i])==0)
                    {
                        RangeValue=i;
                        break;
                    }
                }
            } 
            else if (Changed_Item<7)
            {
                for (int i=0;i<18;i++)
                {
                    if (New_CString.CompareNoCase(OUTPUT_ANRANGE[i])==0)
                    {
                        RangeValue=i;
                        break;
                    }
                }
            }
        }

        if (RangeValue==-1)
        {
            m_output_list.Set_Edit(false);
            IS_SEND=FALSE;
            return 0;
        }

        IS_SEND=TRUE;
        pwrite_info->Changed_Name.Format(_T("%s,From %s to %s"),m_tstat_output_data.at(lRow).OutputName.StrValue,m_tstat_output_data.at(lRow).Range.StrValue,New_CString);
        pwrite_info->address=m_tstat_output_data.at(lRow).Range.regAddress;
        pwrite_info->new_value=RangeValue;



    }

    if (lCol == TStat_Funcation)
    {
        if (m_tstat_output_data.at(lRow).Function.StrValue.CompareNoCase(New_CString)==0)//选的字符和内存的值相同的话,就返回
        {
            m_output_list.Set_Edit(false);
            IS_SEND=FALSE;
            return 0;
        }
        int RangeValue=-1;
        for (int i=0;i<5;i++)
        {
            if (New_CString.CompareNoCase(ONTPUT_FUNS[i])==0)
            {
                RangeValue=i;
                break;
            }
        }
        if (RangeValue==-1)
        {
            m_output_list.Set_Edit(false);
            IS_SEND=FALSE;
            return 0;
        }
        IS_SEND=TRUE;
        pwrite_info->Changed_Name.Format(_T("%s,From %s to %s"),m_tstat_output_data.at(lRow).OutputName.StrValue,m_tstat_output_data.at(lRow).Function.StrValue,New_CString);
        pwrite_info->address=m_tstat_output_data.at(lRow).Function.regAddress;
        pwrite_info->new_value=RangeValue;
    }
    if (lCol == TStat_Interlock)
    {
        if (m_tstat_output_data.at(lRow).Interlock.StrValue.CompareNoCase(New_CString)==0)//选的字符和内存的值相同的话,就返回
        {
            m_output_list.Set_Edit(false);
            IS_SEND=FALSE;
            return 0;
        }
        int InterlockValue=-1;
        for (int i=0;i<6;i++)
        {
            if (New_CString.CompareNoCase(Interlock[i])==0)
            {
                InterlockValue=i;
                break;
            }
        }
        if (InterlockValue==-1)
        {
            m_output_list.Set_Edit(false);
            IS_SEND=FALSE;
            return 0;
        }
        IS_SEND=TRUE;
        pwrite_info->Changed_Name.Format(_T("%s,From %s to %s"),m_tstat_output_data.at(lRow).OutputName.StrValue,m_tstat_output_data.at(lRow).Interlock.StrValue,New_CString);
        pwrite_info->address=m_tstat_output_data.at(lRow).Interlock.regAddress;
        pwrite_info->new_value=InterlockValue;

    }
    if (lCol == TStat_OFFON_Delay)
    {
        int OFFON_Delay_Value = _wtoi(New_CString);
        if (m_tstat_output_data.at(lRow).OFFON_Delay.RegValue==OFFON_Delay_Value)
        {
            m_output_list.Set_Edit(false);
            IS_SEND=FALSE;
            return 0; 
        }
        IS_SEND=TRUE;
        pwrite_info->Changed_Name.Format(_T("%s,From %s to %s"),m_tstat_output_data.at(lRow).OutputName.StrValue,m_tstat_output_data.at(lRow).OFFON_Delay.StrValue,New_CString);
        pwrite_info->address=m_tstat_output_data.at(lRow).OFFON_Delay.regAddress;
        pwrite_info->new_value=OFFON_Delay_Value;
    }
    if (lCol == TStat_ONOFF_Delay)
    {
        int ONOFF_Delay_Value = _wtoi(New_CString);
        if (m_tstat_output_data.at(lRow).ONOFF_Delay.RegValue==ONOFF_Delay_Value)
        {
            m_output_list.Set_Edit(false);
            IS_SEND=FALSE;
            return 0; 
        }
        IS_SEND=TRUE;
        pwrite_info->Changed_Name.Format(_T("%s,From %s to %s"),m_tstat_output_data.at(lRow).OutputName.StrValue,m_tstat_output_data.at(lRow).ONOFF_Delay.StrValue,New_CString);
        pwrite_info->address=m_tstat_output_data.at(lRow).ONOFF_Delay.regAddress;
        pwrite_info->new_value=ONOFF_Delay_Value;
    }
    if (lCol == TStat_Signal_Type)
    {
        if (m_tstat_output_data.at(lRow).Signal_Type.StrValue.CompareNoCase(New_CString)==0)//选的字符和内存的值相同的话,就返回
        {
            m_output_list.Set_Edit(false);
            IS_SEND=FALSE;
            return 0;
        }
        int RangeValue=-1;
        for (int i=0;i<18;i++)
        {
            if (New_CString.CompareNoCase(OUTPUT_ANRANGE[i])==0)
            {
                RangeValue=i;
                break;
            }
        }
        if (RangeValue==-1)
        {
            m_output_list.Set_Edit(false);
            IS_SEND=FALSE;
            return 0;
        }
        IS_SEND=TRUE;
        pwrite_info->Changed_Name.Format(_T("%s,From %s to %s"),m_tstat_output_data.at(lRow).OutputName.StrValue,m_tstat_output_data.at(lRow).Signal_Type.StrValue,New_CString);
        pwrite_info->address=m_tstat_output_data.at(lRow).Signal_Type.regAddress;
        pwrite_info->new_value=RangeValue;

    } 

    if (IS_SEND)
    {	
        pwrite_info->device_id=g_tstat_id;
        pwrite_info->hwnd=g_hwnd_now;
        pwrite_info->mCol=lCol;
        pwrite_info->mRow=lRow;
        m_output_list.SetItemBkColor(lRow,lCol,LIST_ITEM_CHANGED_BKCOLOR);
        if(!PostThreadMessage(nThreadID,MY_WRITE_ONE_LIST,(WPARAM)pwrite_info,NULL))//post thread msg
        {
            return FALSE ;
        }
        else
        {
            return TRUE ;
        }
    }
    else{
        if (pwrite_info)
        {
            delete pwrite_info;
        }

    }
    return 0;
}
LRESULT BacnetController::Fresh_Controller_Item(WPARAM wParam,LPARAM lParam)
{
	int cmp_ret ;//compare if match it will 0;
	int Changed_Item = (int)wParam;
	int Changed_SubItem = (int)lParam;


	CString temp_task_info;
	CString New_CString =  m_controller_list.GetItemText(Changed_Item,Changed_SubItem);
	CString cstemp_value;

	//先保存 原来的值,等结束的时候来比对,看是否有改变,有改变就进行写动作;
	memcpy_s(&m_temp_controller_data[Changed_Item],sizeof(Str_controller_point),&m_controller_data.at(Changed_Item),sizeof(Str_controller_point));


	if(Changed_SubItem == CONTROLLER_INPUT)
	{
		CString cs_temp = m_controller_list.GetItemText(Changed_Item,Changed_SubItem);
		if(cs_temp.IsEmpty() == false)
		{
			cs_temp.MakeUpper();

			char cTemp1[255];
			char temp_input[250];
			char * tempcs=NULL;
			memset(cTemp1,0,255);
			WideCharToMultiByte( CP_ACP, 0, cs_temp.GetBuffer(), -1, cTemp1, 255, NULL, NULL );
			//Search the input label from the list.

			int temp_number=-1;
			byte temp_value_type = -1;
			byte temp_point_type=-1;
			int temp_panel = -1;
			int temp_net = -1;
			int k=0;
			//int temp1;
			tempcs = ispoint(cTemp1,&temp_number,&temp_value_type,&temp_point_type,&temp_panel,&temp_net,0,Station_NUM,&k);
			if(tempcs!=NULL)
			{
				strcpy(temp_input,tempcs);
				CString temp_des2;
				temp_des2.Empty();

				MultiByteToWideChar( CP_ACP, 0, temp_input, (int)strlen(temp_input)+1, 
					temp_des2.GetBuffer(MAX_PATH), MAX_PATH );
				temp_des2.ReleaseBuffer();		

				m_controller_list.SetItemText(Changed_Item,CONTROLLER_INPUT,temp_des2);

				if(temp_panel != Station_NUM)
				{
					MessageBox(_T("Don't support other panel currently!"),_T("Warning"),MB_OK | MB_ICONINFORMATION);
					m_controller_list.SetItemText(Changed_Item,Changed_SubItem,_T(""));
					return 0;
				}
				if(temp_number > 0);	//因为Input2  的number 是1;
					temp_number = temp_number - 1;
				temp_point_type = temp_point_type + 1;
				if(2 == temp_point_type)
				{
					m_controller_data.at(Changed_Item).input.number = temp_number;
					m_controller_data.at(Changed_Item).input.panel = temp_panel;//bac_gloab_panel;
					m_controller_data.at(Changed_Item).input.point_type = temp_point_type;//1 means input point

					CString temp_des3;
					if(temp_number < BAC_INPUT_ITEM_COUNT)
					{
						//temp_des3.Format(_T("%d"),m_Input_data.at(temp_number - 1).value);

						CString cstemp_value;
						float temp_float_value;
						temp_float_value = ((float)m_Input_data.at(temp_number).value) / 1000;
						temp_des3.Format(_T("%.1f"),temp_float_value);


						m_controller_data.at(Changed_Item).input_value = m_Input_data.at(temp_number).value;	

						m_controller_list.SetItemText(Changed_Item,CONTROLLER_INPUTVALUE,temp_des3);
					}
				}
				else if(3 == temp_point_type)
				{
					m_controller_data.at(Changed_Item).input.number = temp_number;
					m_controller_data.at(Changed_Item).input.panel = temp_panel;//bac_gloab_panel;
					m_controller_data.at(Changed_Item).input.point_type = temp_point_type;//1 means input point

					CString temp_des3;
					if(temp_number < BAC_VARIABLE_ITEM_COUNT)
					{
						//temp_des3.Format(_T("%d"),m_Input_data.at(temp_number - 1).value);

						CString cstemp_value;
						float temp_float_value;
						temp_float_value = ((float)m_Variable_data.at(temp_number).value) / 1000;
						temp_des3.Format(_T("%.1f"),temp_float_value);


						m_controller_data.at(Changed_Item).input_value = m_Variable_data.at(temp_number).value;	

						m_controller_list.SetItemText(Changed_Item,CONTROLLER_INPUTVALUE,temp_des3);
					}
				}
				else
				{
					m_controller_list.SetItemText(Changed_Item,Changed_SubItem,_T(""));
					return 0;
				}


			}
			else
			{
				CString temp_message;
				temp_message.Format(_T("%s character not allowed in labels!"),cs_temp.GetString());
				
				MessageBox(temp_message,_T("Information"),MB_OK |MB_ICONINFORMATION);
				m_controller_list.SetItemText(Changed_Item,Changed_SubItem,_T(""));
				return 0;
			}
		}


	}

	if(Changed_SubItem == CONTROLLER_INPUTVALUE)
	{
		//int temp_value = _wtoi(New_CString);
		int temp_value = (int)(_wtof(New_CString) * 1000);

		if(m_controller_data.at(Changed_Item).input.number == 0 )
			return 0;
		if((m_controller_data.at(Changed_Item).input.number -1 )< BAC_INPUT_ITEM_COUNT)
			m_Input_data.at(m_controller_data.at(Changed_Item).input.number - 1).value = temp_value;
		
		temp_task_info.Format(_T("Write Controllers List Item%d .Changed the input value to \"%s\" "),Changed_Item + 1,New_CString);
		Post_Write_Message(g_bac_instance,WRITEINPUT_T3000,Changed_Item,Changed_Item,sizeof(Str_in_point),BacNet_hwd ,temp_task_info);
		return 0;
	}




	if(Changed_SubItem == CONTROLLER_SETVALUE)
	{
	//	int temp_value = _wtoi(New_CString);
		int temp_value = (int)(_wtof(New_CString) * 1000);
		if(m_controller_data.at(Changed_Item).setpoint.number == 0 )
			return 0;
		if((m_controller_data.at(Changed_Item).setpoint.number -1 )< BAC_VARIABLE_ITEM_COUNT)
			m_Variable_data.at(m_controller_data.at(Changed_Item).setpoint.number - 1).value = temp_value;

		temp_task_info.Format(_T("Write Controllers List Item%d .Changed the variable value to \"%s\" "),Changed_Item + 1,New_CString);
		Post_Write_Message(g_bac_instance,WRITEVARIABLE_T3000,Changed_Item,Changed_Item,sizeof(Str_in_point),BacNet_hwd ,temp_task_info);
		return 0;
	}

	if(Changed_SubItem == CONTROLLER_AUTO_MANUAL)
	{
		CString temp_cs = m_controller_list.GetItemText(Changed_Item,Changed_SubItem);
		if(temp_cs.CompareNoCase(_T("Auto"))==0)
		{
			m_controller_list.SetCellEnabled(Changed_Item,CONTROLLER_OUTPUT,0);
			m_controller_data.at(Changed_Item).auto_manual = BAC_AUTO ;
		}
		else
		{
			m_controller_list.SetCellEnabled(Changed_Item,CONTROLLER_OUTPUT,1);
			m_controller_data.at(Changed_Item).auto_manual = BAC_MANUAL ;
		}
	}

	if(Changed_SubItem == CONTROLLER_OUTPUT)
	{
		CString temp_cs = m_controller_list.GetItemText(Changed_Item,Changed_SubItem);

		int temp_int = (int)(_wtof(temp_cs) * 1000);
		m_controller_data.at(Changed_Item).value = temp_int;
	}

	if(Changed_SubItem == CONTROLLER_SETPOINT)
	{
		CString cs_temp = m_controller_list.GetItemText(Changed_Item,Changed_SubItem);
		char cTemp1[255];
		char temp_setpoint[250];
		char * tempcs=NULL;
		memset(cTemp1,0,255);
		memset(temp_setpoint,0,250);
		WideCharToMultiByte( CP_ACP, 0, cs_temp.GetBuffer(), -1, cTemp1, 255, NULL, NULL );

		int temp_number=-1;
		byte temp_value_type = -1;
		byte temp_point_type=-1;
		int temp_panel = -1;
		int temp_net = -1;
		int k=0;
		//int temp1;
		//Change the lable.ex: Change the
		tempcs = ispoint(cTemp1,&temp_number,&temp_value_type,&temp_point_type,&temp_panel,&temp_net,0,bac_gloab_panel,&k);
		if(tempcs!=NULL)
		{
			memcpy_s(temp_setpoint,250,tempcs,9);
			//strcpy_s(temp_setpoint,tempcs);
			//strcpy(temp_setpoint,tempcs);
			CString temp_des2;
			temp_des2.Empty();

			MultiByteToWideChar( CP_ACP, 0, temp_setpoint, STR_VARIABLE_LABEL+1, 
				temp_des2.GetBuffer(MAX_PATH), MAX_PATH );
			temp_des2.ReleaseBuffer();		
			
			m_controller_list.SetItemText(Changed_Item,CONTROLLER_SETPOINT,temp_des2);


			if(temp_panel != bac_gloab_panel)
			{
				MessageBox(_T("Don't support other panel currently!"),_T("Warning"),MB_OK | MB_ICONINFORMATION);
				m_controller_list.SetItemText(Changed_Item,Changed_SubItem,_T(""));
				return 0;
			}
			if(temp_number > 0)	//Setpoint 也是这样;从0 开始的;
				temp_number = temp_number - 1;
			temp_point_type = temp_point_type + 1; //OUTPUT=1, INPUT, VARIABLE 要错位;
			m_controller_data.at(Changed_Item).setpoint.number = temp_number;
			m_controller_data.at(Changed_Item).setpoint.panel = temp_panel;//bac_gloab_panel;
			m_controller_data.at(Changed_Item).setpoint.point_type = temp_point_type;//1 means input point

			CString temp_des3;
			if(temp_number < BAC_VARIABLE_ITEM_COUNT)
			{
				if(m_Variable_data.at(temp_number).range < VARIABLE_ANALOG_UNITE_COUNT)
					temp_des3 = Variable_Analog_Units_Array[m_Variable_data.at(temp_number).range];
				m_controller_list.SetItemText(Changed_Item,CONTROLLER_SETPOINTUNITS,temp_des3);
			}
			char tempAAAA[250];
			memset(tempAAAA,0,250);
			temp_des3.Empty();
			if(m_Variable_data.at(temp_number).range  == 20 )
			{
				if((m_controller_data.at(Changed_Item).setpoint_value>=0)&&(m_controller_data.at(Changed_Item).setpoint_value<86400))
					intervaltotext( tempAAAA, m_controller_data.at(Changed_Item).setpoint_value ,0 , 0);

				MultiByteToWideChar( CP_ACP, 0, tempAAAA, strlen(tempAAAA) + 1, 
					temp_des3.GetBuffer(MAX_PATH), MAX_PATH );
				temp_des3.ReleaseBuffer();	
			}
			else
			{
				CString cstemp_value;
				float temp_float_value;
				temp_float_value = ((float)m_Variable_data.at(m_controller_data.at(Changed_Item).setpoint.number).value) / 1000;
				temp_des3.Format(_T("%.1f"),temp_float_value);

			}
	
			m_controller_list.SetItemText(Changed_Item,CONTROLLER_SETVALUE,temp_des3);

		}
		else
		{
			CString temp_show_ret;
			temp_show_ret = _T("\"") + cs_temp + _T("\"") + _T(" is a invalid label or keyword .");
			SetPaneString(BAC_SHOW_MISSION_RESULTS,temp_show_ret);
			m_controller_list.SetItemText(Changed_Item,CONTROLLER_SETPOINT,_T(""));
		}
	}

	if(Changed_SubItem == CONTROLLER_PROPORTIONAL)
	{
		int temp_proportional=0;
		CString cs_temp = m_controller_list.GetItemText(Changed_Item,Changed_SubItem);
		if((cs_temp.GetLength()>3) || (_wtoi(cs_temp)>255) )
		{
			MessageBox(_T("Please input a effective value"),_T("Information"),MB_OK |MB_ICONINFORMATION);
			m_controller_list.SetItemText(Changed_Item,Changed_SubItem,_T(""));
		}
		else
		{
			m_controller_data.at(Changed_Item).proportional = _wtoi(cs_temp);
		}
	}
	if(Changed_SubItem == CONTROLLER_RESET)
	{
		int temp_reset=0;
		CString cs_temp = m_controller_list.GetItemText(Changed_Item,Changed_SubItem);
		if((cs_temp.GetLength()>3) || (_wtoi(cs_temp)>255) )
		{
			MessageBox(_T("Please input a effective value"),_T("Information"),MB_OK |MB_ICONINFORMATION);
			m_controller_list.SetItemText(Changed_Item,Changed_SubItem,_T(""));
		}
		else
		{
			m_controller_data.at(Changed_Item).reset = _wtoi(cs_temp);
		}
	}

	if(Changed_SubItem == CONTROLLER_RATE)
	{
		int temp_rate=0;
		CString cs_temp = m_controller_list.GetItemText(Changed_Item,Changed_SubItem);

		int i_value =  (int)(_wtof(cs_temp) * 100) ;

		if((i_value > 200) || (i_value < 0))
		//if((cs_temp.GetLength()>1) || (_wtoi(cs_temp)>2) )
		{
			MessageBox(_T("Please input a effective value  0.00 - 2.00"),_T("Information"),MB_OK |MB_ICONINFORMATION);
			m_controller_list.SetItemText(Changed_Item,Changed_SubItem,_T(""));
		}
		else
		{
			m_controller_data.at(Changed_Item).rate = i_value;
		}
	}

	if(Changed_SubItem == CONTROLLER_BIAS)
	{
		int temp_bias=0;
		CString cs_temp = m_controller_list.GetItemText(Changed_Item,Changed_SubItem);
		if((cs_temp.GetLength()>3) || (_wtoi(cs_temp)>100) )
		{
			MessageBox(_T("Please input a effective value"),_T("Information"),MB_OK |MB_ICONINFORMATION);
			m_controller_list.SetItemText(Changed_Item,Changed_SubItem,_T(""));
		}
		else
		{
			m_controller_data.at(Changed_Item).bias = _wtoi(cs_temp);
		}
	}



	cmp_ret = memcmp(&m_temp_controller_data[Changed_Item],&m_controller_data.at(Changed_Item),sizeof(Str_controller_point));
	if(cmp_ret!=0)
	{
		m_controller_list.SetItemBkColor(Changed_Item,Changed_SubItem,LIST_ITEM_CHANGED_BKCOLOR);
		temp_task_info.Format(_T("Write Controllers List Item%d .Changed to \"%s\" "),Changed_Item + 1,New_CString);
		Post_Write_Message(g_bac_instance,WRITEPID_T3000,Changed_Item,Changed_Item,sizeof(Str_controller_point),m_controller_dlg_hwnd ,temp_task_info,Changed_Item,Changed_SubItem);

	}


	
	return 0;
}
void CDialogT3::Updatedatabase()
{
    TRACE(_T("Updatedatabase()start!\n"));
    KillTimer(T3_MODEL);
    //存入数据库中
    CADO saveADO;
    saveADO.OnInitADOConn();
    CString sql = _T("select * from T3_4AO");
    saveADO.m_pRecordset = saveADO.OpenRecordset(sql);
    if (!saveADO.m_pRecordset->EndOfFile)
    {
        saveADO.m_pRecordset->MoveFirst();

        for(int i = 0; i<230; i++)
        {
            try
            {

                //saveADO.m_pRecordset->AddNew();
                //saveADO.m_pRecordset->Move(pos,vtMissing);
                // 			cstnum.Format(_T("%d"),i+1);
                // 			saveADO.m_pRecordset->PutCollect("Address",(_bstr_t)cstnum);
                // 			saveADO.m_pRecordset->PutCollect("Name",(_bstr_t)_T("output"));

                saveADO.m_pRecordset->PutCollect("Address",(_bstr_t)(i+1));
                saveADO.m_pRecordset->PutCollect("Name",(_bstr_t)vect3model.at(i).CStName);
                saveADO.m_pRecordset->PutCollect("Data",(_bstr_t)shmPRegister[i]);
                saveADO.m_pRecordset->PutCollect("Range",(_bstr_t)vect3model.at(i).CStrange);


                if (i>=124&&i<=147)
                {
                    switch ((int)(_variant_t)shmPRegister[i])
                    {
                    case 0:   //0- off 1 - mannel 2 - auto
                        saveADO.m_pRecordset->PutCollect("AutoManual",(_bstr_t)"OFF");
                        break;
                    case 1:
                        saveADO.m_pRecordset->PutCollect("AutoManual",(_bstr_t)"Manual");
                        break;
                    case 2:
                        saveADO.m_pRecordset->PutCollect("AutoManual",(_bstr_t)"Auto");
                        break;
                    default:
                        break;

                    }
                }


                //  		saveADO.m_pRecordset->PutCollect("Auto/Manual",(_bstr_t)"auto");
                //  		saveADO.m_pRecordset->PutCollect("Range",(_bstr_t)"10%-100%");
                saveADO.m_pRecordset->Update();
                saveADO.m_pRecordset->MoveNext();
            }


            catch(...)
            {


                SetPaneString(2,_T("Write dababase false!"));
                return ;
            }
        }
    }
    else
    {
        for(int i = 0; i<230; i++)
        {
            try
            {

                //saveADO.m_pRecordset->AddNew();
                //saveADO.m_pRecordset->Move(pos,vtMissing);
                // 			cstnum.Format(_T("%d"),i+1);
                // 			saveADO.m_pRecordset->PutCollect("Address",(_bstr_t)cstnum);
                // 			saveADO.m_pRecordset->PutCollect("Name",(_bstr_t)_T("output"));
                saveADO.m_pRecordset->AddNew();
                saveADO.m_pRecordset->PutCollect("Address",(_bstr_t)(i+1));
                saveADO.m_pRecordset->PutCollect("Name",(_bstr_t)vect3model.at(i).CStName);
                saveADO.m_pRecordset->PutCollect("Data",(_bstr_t)shmPRegister[i]);
                saveADO.m_pRecordset->PutCollect("Range",(_bstr_t)vect3model.at(i).CStrange);


                if (i>=124&&i<=147)
                {
                    switch ((int)(_variant_t)shmPRegister[i])
                    {
                    case 0:   //0- off 1 - mannel 2 - auto
                        saveADO.m_pRecordset->PutCollect("AutoManual",(_bstr_t)"OFF");
                        break;
                    case 1:
                        saveADO.m_pRecordset->PutCollect("AutoManual",(_bstr_t)"Manual");
                        break;
                    case 2:
                        saveADO.m_pRecordset->PutCollect("AutoManual",(_bstr_t)"Auto");
                        break;
                    default:
                        break;

                    }
                }


                //  		saveADO.m_pRecordset->PutCollect("Auto/Manual",(_bstr_t)"auto");
                //  		saveADO.m_pRecordset->PutCollect("Range",(_bstr_t)"10%-100%");

                saveADO.m_pRecordset->Update();

            }


            catch(...)
            {
                //MessageBox(_T("Write dababase false!"));

                SetPaneString(2,_T("Write dababase false!"));
                return ;
            }
        }

    }

    saveADO.CloseRecordset();
    saveADO.CloseConn();

    SetTimer(T3_MODEL,1000,NULL);

}