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; }
LRESULT BacnetController::Fresh_Controller_List(WPARAM wParam,LPARAM lParam) { CString temp_des2; CString temp_des3; CString temp_in_unit; CString temp_set_unit; int Fresh_Item; int isFreshOne = (int)lParam; if(isFreshOne == REFRESH_ON_ITEM) { Fresh_Item = (int)wParam; } else { #if 1 if(m_controller_list.IsDataNewer((char *)&m_controller_data.at(0),sizeof(Str_controller_point) * BAC_PID_COUNT)) { //避免list 刷新时闪烁;在没有数据变动的情况下不刷新List; m_controller_list.SetListData((char *)&m_controller_data.at(0),sizeof(Str_controller_point) * BAC_PID_COUNT); } else { //return 0; } #endif } for (int i=0;i<(int)m_controller_data.size();i++) { if(i>=controller_item_limit_count) break; if(isFreshOne) { i = Fresh_Item; } temp_des2.Empty(); if(2 == m_controller_data.at(i).input.point_type) { if(m_controller_data.at(i).input.number< BAC_INPUT_ITEM_COUNT) { MultiByteToWideChar( CP_ACP, 0, (char *)m_Input_data.at(m_controller_data.at(i).input.number ).label, (int)strlen((char *)m_Input_data.at(m_controller_data.at(i).input.number ).label)+1, temp_des2.GetBuffer(MAX_PATH), MAX_PATH ); temp_des2.ReleaseBuffer(); if(temp_des2.GetLength()>9) temp_des2.Format(_T("%d-IN%d"),m_controller_data.at(i).input.panel,m_controller_data.at(i).input.number); if(temp_des2.IsEmpty()) temp_des2.Format(_T("%d-IN%d"),m_controller_data.at(i).input.panel,m_controller_data.at(i).input.number); //temp_des3.Format(_T("%d"),m_Input_data.at(m_controller_data.at(i).input.number - 1).value); CString cstemp_value; float temp_float_value; temp_float_value = ((float)m_controller_data.at(i).input_value) / 1000; cstemp_value.Format(_T("%.1f"),temp_float_value); m_controller_list.SetItemText(i,CONTROLLER_INPUTVALUE,cstemp_value); //******************************************************************************************************** // bind the the input units. int x = m_controller_data.at(i).input.number; if(m_Input_data.at(x).digital_analog == BAC_UNITS_ANALOG) { m_controller_list.SetItemText(i,CONTROLLER_INPUTUNITS,Input_List_Analog_Units[m_Input_data.at(x).range]); } } } else if(3 == m_controller_data.at(i).input.point_type) { if(m_controller_data.at(i).input.number< BAC_VARIABLE_ITEM_COUNT) { MultiByteToWideChar( CP_ACP, 0, (char *)m_Variable_data.at(m_controller_data.at(i).input.number ).label, (int)strlen((char *)m_Variable_data.at(m_controller_data.at(i).input.number ).label)+1, temp_des2.GetBuffer(MAX_PATH), MAX_PATH ); temp_des2.ReleaseBuffer(); if(temp_des2.GetLength()>9) temp_des2.Format(_T("%d-VAR%d"),m_controller_data.at(i).input.panel,m_controller_data.at(i).input.number); if(temp_des2.IsEmpty()) temp_des2.Format(_T("%d-VAR%d"),m_controller_data.at(i).input.panel,m_controller_data.at(i).input.number); //temp_des3.Format(_T("%d"),m_Input_data.at(m_controller_data.at(i).input.number - 1).value); CString cstemp_value; float temp_float_value; temp_float_value = ((float)m_controller_data.at(i).input_value) / 1000; cstemp_value.Format(_T("%.1f"),temp_float_value); m_controller_list.SetItemText(i,CONTROLLER_INPUTVALUE,cstemp_value); //******************************************************************************************************** // bind the the input units. int x = m_controller_data.at(i).input.number; if(m_Variable_data.at(x).digital_analog == BAC_UNITS_ANALOG) { if(m_Variable_data.at(x).range <= sizeof(Variable_Analog_Units_Array)/sizeof(Variable_Analog_Units_Array[0])) m_controller_list.SetItemText(i,CONTROLLER_INPUTUNITS,Variable_Analog_Units_Array[m_Variable_data.at(x).range]); } } } else { m_controller_list.SetItemText(i,CONTROLLER_INPUTVALUE,_T("")); m_controller_list.SetItemText(i,CONTROLLER_INPUTUNITS,_T("")); } m_controller_list.SetItemText(i,CONTROLLER_INPUT,temp_des2); float persend_data; persend_data = ((float)m_controller_data.at(i).value)/ 1000; CString temp_output_value; temp_output_value.Format(_T("%.1f%%"),persend_data); m_controller_list.SetItemText(i,CONTROLLER_OUTPUT,temp_output_value); //CString temp_sample_time; //temp_sample_time.Format(_T("%u"),m_controller_data.at(i).sample_time); //m_controller_list.SetItemText(i,CONTROLLER_SAMPLE_TIME,temp_sample_time); //temp_des2.Format(_T("%d"),m_controller_data.at(i).input_value); //m_controller_list.SetItemText(i,CONTROLLER_INPUTVALUE,temp_des2); //if(m_controller_data.at(i).input.number < BAC_INPUT_ITEM_COUNT) //{ // if(m_Input_data.at(m_controller_data.at(i).input.number).range < INPUT_ANOLAG_UNITE_COUNT) // m_controller_list.SetItemText(i,CONTROLLER_INPUTUNITS,Input_List_Analog_Units[m_Input_data.at(m_controller_data.at(i).input.number).range]); // else // m_controller_list.SetItemText(i,CONTROLLER_INPUTUNITS,_T("")); //} temp_des2.Empty(); temp_des3.Empty(); temp_set_unit.Empty(); if(m_controller_data.at(i).setpoint.point_type == 1) { if(m_controller_data.at(i).setpoint.number< BAC_OUTPUT_ITEM_COUNT) { } } else if(m_controller_data.at(i).setpoint.point_type == 2) { if(m_controller_data.at(i).setpoint.number< BAC_INPUT_ITEM_COUNT) { int num_point,num_panel,num_net,k; Point_T3000 point; point.number = m_controller_data.at(i).setpoint.number; point.number = point.number + 1; //input setpoint 是从 0 开始计数的 ,但是要去找point label 要从1开始; point.panel = m_controller_data.at(i).setpoint.panel; point.point_type = m_controller_data.at(i).setpoint.point_type - 1; //调用 ispoint的时候要减一; byte point_type,var_type; int temp_network = 0; char buf[255]; char q[17]; pointtotext_for_controller(q, &point); char * temp1 = ispoint(q,&num_point,&var_type, &point_type, &num_panel, &num_net, temp_network, point.panel, &k); if(temp1!=NULL) { if(strlen(temp1) < 255) { strcpy(buf,temp1); MultiByteToWideChar( CP_ACP, 0, (char *)buf,(int)strlen((char *)buf)+1, temp_des2.GetBuffer(MAX_PATH), MAX_PATH ); temp_des2.ReleaseBuffer(); float temp_float_value; temp_float_value = ((float)m_controller_data.at(i).setpoint_value) / 1000; temp_des3.Format(_T("%.1f"),temp_float_value); int x = m_controller_data.at(i).setpoint.number; if(m_Input_data.at(x).digital_analog == BAC_UNITS_ANALOG) { if(m_Input_data.at(x).range < (sizeof(Input_List_Analog_Units)/sizeof(Input_List_Analog_Units[0]))) temp_set_unit = Input_List_Analog_Units[m_Input_data.at(x).range]; } } } } } else if(m_controller_data.at(i).setpoint.point_type == 3) //Variable { if(m_controller_data.at(i).setpoint.number< BAC_VARIABLE_ITEM_COUNT) { int num_point,num_panel,num_net,k; Point_T3000 point; point.number = m_controller_data.at(i).setpoint.number; point.number = point.number + 1; //input setpoint 是从 0 开始计数的 ,但是要去找point label 要从1开始; point.panel = m_controller_data.at(i).setpoint.panel; point.point_type = m_controller_data.at(i).setpoint.point_type - 1; //调用 ispoint的时候要减一; byte point_type,var_type; int temp_network = 0; char buf[255]; char q[17]; pointtotext_for_controller(q, &point); char * temp1 = ispoint(q,&num_point,&var_type, &point_type, &num_panel, &num_net, temp_network, point.panel, &k); if(temp1!=NULL) { if(strlen(temp1) < 255) { strcpy(buf,temp1); MultiByteToWideChar( CP_ACP, 0, (char *)buf,(int)strlen((char *)buf)+1, temp_des2.GetBuffer(MAX_PATH), MAX_PATH ); temp_des2.ReleaseBuffer(); float temp_float_value; temp_float_value = ((float)m_controller_data.at(i).setpoint_value) / 1000; temp_des3.Format(_T("%.1f"),temp_float_value); int x = m_controller_data.at(i).setpoint.number; if(m_Variable_data.at(x).digital_analog == BAC_UNITS_DIGITAL) { if(m_Variable_data.at(x).range>30) { temp_set_unit = _T(""); } else { CString temp1; CStringArray temparray; if((m_Variable_data.at(x).range < 23) &&(m_Variable_data.at(x).range !=0)) temp1 = Digital_Units_Array[m_Variable_data.at(x).range]; else if((m_Variable_data.at(x).range >=23) && (m_Variable_data.at(x).range <= 30)) { if(receive_customer_unit) temp1 = temp_unit_no_index[m_Variable_data.at(x).range - 23]; } SplitCStringA(temparray,temp1,_T("/")); if((temparray.GetSize()==2)) { if(m_Variable_data.at(x).control == 0) temp_set_unit = temparray.GetAt(0); else temp_set_unit = temparray.GetAt(1); } } } else { if(m_Variable_data.at(x).range == 20) //如果是时间; { temp_set_unit = Variable_Analog_Units_Array[m_Variable_data.at(x).range]; char temp_char[50]; int time_seconds = m_Variable_data.at(x).value / 1000; intervaltotext(temp_char,time_seconds,0,0); CString temp_11; MultiByteToWideChar( CP_ACP, 0, temp_char, strlen(temp_char) + 1, temp_11.GetBuffer(MAX_PATH), MAX_PATH ); temp_11.ReleaseBuffer(); temp_set_unit = temp_11; //temp_value.Format(_T("%d"),m_Variable_data.at(i).value); //m_variable_list.SetItemText(i,VARIABLE_VALUE,temp_value); } else if(m_Variable_data.at(x).range<=sizeof(Variable_Analog_Units_Array)/sizeof(Variable_Analog_Units_Array[0])) { //m_variable_list.SetItemText(i,VARIABLE_UNITE,Variable_Analog_Units_Array[m_Variable_data.at(i).range]); temp_set_unit = Variable_Analog_Units_Array[m_Variable_data.at(x).range]; //CString cstemp_value; //float temp_float_value; //temp_float_value = ((float)m_Variable_data.at(i).value) / 1000; //cstemp_value.Format(_T("%.3f"),temp_float_value); //m_variable_list.SetItemText(i,VARIABLE_VALUE,cstemp_value); //temp_value.Format(_T("%d"),m_Variable_data.at(i).value); //m_variable_list.SetItemText(i,VARIABLE_VALUE,temp_value); } } } } } } #if 0 if(m_controller_data.at(i).setpoint.number< BAC_VARIABLE_ITEM_COUNT) { if(m_controller_data.at(i).setpoint.point_type == 0 ) temp_des2.Empty(); else { int num_point,num_panel,num_net,k; Point_T3000 point; point.number = m_controller_data.at(i).setpoint.number; point.number = point.number + 1; //input setpoint 是从 0 开始计数的 ,但是要去找point label 要从1开始; point.panel = m_controller_data.at(i).setpoint.panel; point.point_type = m_controller_data.at(i).setpoint.point_type; byte point_type,var_type; int temp_network = 0; char buf[255]; char q[17]; pointtotext_for_controller(q, &point); char * temp1 = ispoint(q,&num_point,&var_type, &point_type, &num_panel, &num_net, temp_network, point.panel, &k); if(temp1!=NULL) { if(strlen(temp1) < 255) { strcpy(buf,temp1); MultiByteToWideChar( CP_ACP, 0, (char *)buf,(int)strlen((char *)buf)+1, temp_des2.GetBuffer(MAX_PATH), MAX_PATH ); temp_des2.ReleaseBuffer(); } } #if 0 MultiByteToWideChar( CP_ACP, 0, (char *)m_Variable_data.at(m_controller_data.at(i).setpoint.number - 1).label, (int)strlen((char *)m_Variable_data.at(m_controller_data.at(i).setpoint.number - 1).label)+1, temp_des2.GetBuffer(MAX_PATH), MAX_PATH ); temp_des2.ReleaseBuffer(); if(temp_des2.GetLength()>9)//如果获取的Var长度大于9,说明获取的Label不对,也要重置; { temp_des2.Empty(); temp_des3.Empty(); } else { CString cstemp_value; float temp_float_value; temp_float_value = ((float)m_Variable_data.at(m_controller_data.at(i).setpoint.number - 1).value) / 1000; temp_des3.Format(_T("%.1f"),temp_float_value); //temp_des3.Format(_T("%d"),m_Variable_data.at(m_controller_data.at(i).setpoint.number - 1).value); } if(m_Variable_data.at(i).digital_analog == BAC_UNITS_ANALOG) { if(m_Variable_data.at(i).range<=sizeof(Variable_Analog_Units_Array)/sizeof(Variable_Analog_Units_Array[0])) { m_controller_list.SetItemText(i,CONTROLLER_SETPOINTUNITS,Variable_Analog_Units_Array[m_Variable_data.at(m_controller_data.at(i).setpoint.number - 1).range]); //temp_value.Format(_T("%d"),m_Variable_data.at(i).value); //m_variable_list.SetItemText(i,VARIABLE_VALUE,temp_value); } } #endif } } #endif m_controller_list.SetItemText(i,CONTROLLER_SETPOINT,temp_des2); m_controller_list.SetItemText(i,CONTROLLER_SETVALUE,temp_des3); m_controller_list.SetItemText(i,CONTROLLER_SETPOINTUNITS,temp_set_unit); //if(m_controller_data.at(i).units < VARIABLE_ANALOG_UNITE_COUNT) // m_controller_list.SetItemText(i,CONTROLLER_SETPOINTUNITS,Variable_Analog_Units_Array[m_controller_data.at(i).units]); //else // m_controller_list.SetItemText(i,CONTROLLER_SETPOINTUNITS,_T("")); if(m_controller_data.at(i).action == 0) { m_controller_list.SetItemText(i,CONTROLLER_ACTION,_T("-")); } else if(m_controller_data.at(i).action >= 1) { m_controller_list.SetItemText(i,CONTROLLER_ACTION,_T("+")); } //else //{ // m_controller_list.SetItemText(i,CONTROLLER_SETPOINTUNITS,_T("")); //} temp_des3.Format(_T("%d"),m_controller_data.at(i).proportional); m_controller_list.SetItemText(i,CONTROLLER_PROPORTIONAL,temp_des3); temp_des3.Format(_T("%d"),m_controller_data.at(i).reset); m_controller_list.SetItemText(i,CONTROLLER_RESET,temp_des3); if(m_controller_data.at(i).auto_manual==0) { m_controller_list.SetItemText(i,CONTROLLER_AUTO_MANUAL,_T("Auto")); m_controller_list.SetCellEnabled(i,CONTROLLER_OUTPUT,0); } else { m_controller_list.SetItemText(i,CONTROLLER_AUTO_MANUAL,_T("Manual")); m_controller_list.SetCellEnabled(i,CONTROLLER_OUTPUT,1); } if(m_controller_data.at(i).bias<=100) { temp_des3.Format(_T("%d"),m_controller_data.at(i).bias); m_controller_list.SetItemText(i,CONTROLLER_BIAS,temp_des3); } else { m_controller_data.at(i).bias = 0; m_controller_list.SetItemText(i,CONTROLLER_BIAS,_T("0")); } if(m_controller_data.at(i).rate<=200) { temp_des3.Format(_T("%.2f"),((float)m_controller_data.at(i).rate)/100); m_controller_list.SetItemText(i,CONTROLLER_RATE,temp_des3); } else { m_controller_data.at(i).rate = 0; m_controller_list.SetItemText(i,CONTROLLER_RATE,_T("0")); } if(isFreshOne) { break; } } return 0; }
LRESULT CBacnetVariable::Fresh_Variable_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_variable_list.GetItemText(Changed_Item,Changed_SubItem); CString cstemp_value; memcpy_s(&m_temp_variable_data[Changed_Item],sizeof(Str_variable_point),&m_Variable_data.at(Changed_Item),sizeof(Str_variable_point)); if(Changed_SubItem == VARIABLE_LABLE) { CString cs_temp = m_variable_list.GetItemText(Changed_Item,Changed_SubItem); if(cs_temp.GetLength()>= STR_VARIABLE_LABEL) //长度不能大于结构体定义的长度; { MessageBox(_T("Length can not higher than 9"),_T("Warning")); PostMessage(WM_REFRESH_BAC_VARIABLE_LIST,NULL,NULL); return 0; } char cTemp1[255]; memset(cTemp1,0,255); WideCharToMultiByte( CP_ACP, 0, cs_temp.GetBuffer(), -1, cTemp1, 255, NULL, NULL ); memcpy_s(m_Variable_data.at(Changed_Item).label,STR_VARIABLE_LABEL,cTemp1,STR_VARIABLE_LABEL); } if(Changed_SubItem == VARIABLE_FULL_LABLE) { CString cs_temp = m_variable_list.GetItemText(Changed_Item,Changed_SubItem); if(cs_temp.GetLength()>= STR_VARIABLE_DESCRIPTION_LENGTH) //长度不能大于结构体定义的长度; { MessageBox(_T("Length can not higher than 20"),_T("Warning")); PostMessage(WM_REFRESH_BAC_VARIABLE_LIST,NULL,NULL); return 0; } char cTemp1[255]; memset(cTemp1,0,255); WideCharToMultiByte( CP_ACP, 0, cs_temp.GetBuffer(), -1, cTemp1, 255, NULL, NULL ); memcpy_s(m_Variable_data.at(Changed_Item).description,STR_VARIABLE_DESCRIPTION_LENGTH,cTemp1,STR_VARIABLE_DESCRIPTION_LENGTH); } if(Changed_SubItem == VARIABLE_AUTO_MANUAL) { CString temp_cs = m_variable_list.GetItemText(Changed_Item,Changed_SubItem); if(temp_cs.CompareNoCase(_T("Auto"))==0) { m_variable_list.SetCellEnabled(Changed_Item,VARIABLE_VALUE,0); m_Variable_data.at(Changed_Item).auto_manual = BAC_AUTO; } else { m_variable_list.SetCellEnabled(Changed_Item,VARIABLE_VALUE,1); m_Variable_data.at(Changed_Item).auto_manual = BAC_MANUAL; } } if(Changed_SubItem == VARIABLE_VALUE)//这里只用处理 ANALOG 的值就看要了, DIGITAL 的值在Click 事件中处理过了; { CString temp_cs = m_variable_list.GetItemText(Changed_Item,Changed_SubItem); int temp_int = (int)(_wtof(temp_cs) * 1000); m_Variable_data.at(Changed_Item).value = temp_int; //int temp_int = _wtoi(temp_cs); //m_Variable_data.at(Changed_Item).value = temp_int; } if(Changed_SubItem == VARIABLE_UNITE) { BacnetRange dlg; CString temp_cs = m_variable_list.GetItemText(Changed_Item,Changed_SubItem); if(temp_cs.CompareNoCase(Units_Type[UNITS_TYPE_ANALOG])==0) { bac_ranges_type = VARIABLE_RANGE_ANALOG_TYPE; dlg.DoModal(); if(range_cancel) { PostMessage(WM_REFRESH_BAC_VARIABLE_LIST,Changed_Item,REFRESH_ON_ITEM);//这里调用 刷新线程重新刷新会方便一点; return 0; } m_Variable_data.at(Changed_Item).digital_analog = BAC_UNITS_ANALOG; m_Variable_data.at(Changed_Item).range = bac_range_number_choose; m_variable_list.SetItemText(Changed_Item,Changed_SubItem,Variable_Analog_Units_Array[bac_range_number_choose]); if(m_Variable_data.at(Changed_Item).range == 20) //如果是时间; { char temp_char[50]; int time_seconds = m_Variable_data.at(Changed_Item).value / 1000; intervaltotext(temp_char,time_seconds,0,0); CString temp_11; MultiByteToWideChar( CP_ACP, 0, temp_char, strlen(temp_char) + 1, temp_11.GetBuffer(MAX_PATH), MAX_PATH ); temp_11.ReleaseBuffer(); m_variable_list.SetItemText(Changed_Item,VARIABLE_VALUE,temp_11); } else { CString cstemp_value; float temp_float_value; temp_float_value = ((float)m_Variable_data.at(Changed_Item).value) / 1000; cstemp_value.Format(_T("%.3f"),temp_float_value); m_variable_list.SetItemText(Changed_Item,VARIABLE_VALUE,cstemp_value); /* cstemp_value.Format(_T("%d"),m_Variable_data.at(Changed_Item).value); m_variable_list.SetItemText(Changed_Item,VARIABLE_VALUE,cstemp_value);*/ } } else if(temp_cs.CompareNoCase(Units_Type[UNITS_TYPE_DIGITAL])==0) { bac_ranges_type = VARIABLE_RANGE_DIGITAL_TYPE; dlg.DoModal(); if(range_cancel) { PostMessage(WM_REFRESH_BAC_VARIABLE_LIST,Changed_Item,REFRESH_ON_ITEM);//这里调用 刷新线程重新刷新会方便一点; return 0; } m_Variable_data.at(Changed_Item).digital_analog = BAC_UNITS_DIGITAL; m_Variable_data.at(Changed_Item).range = bac_range_number_choose; CString temp1; CStringArray temparray; temp1 = Digital_Units_Array[bac_range_number_choose];//22 is the sizeof the array SplitCStringA(temparray,temp1,_T("/")); if(m_Variable_data.at(Changed_Item).control == 1) { if((temparray.GetSize()==2)&&(!temparray.GetAt(1).IsEmpty())) { m_variable_list.SetItemText(Changed_Item,VARIABLE_VALUE,temparray.GetAt(1)); } } else { if((temparray.GetSize()==2)&&(!temparray.GetAt(0).IsEmpty())) { m_variable_list.SetItemText(Changed_Item,VARIABLE_VALUE,temparray.GetAt(0)); } } m_variable_list.SetItemText(Changed_Item,VARIABLE_UNITE,temp1); } else if(temp_cs.CompareNoCase(Units_Type[UNITS_TYPE_CUSTOM])==0) { bac_ranges_type = VARIABLE_RANGE_CUSTOM_DIG_TYPE; } } cmp_ret = memcmp(&m_temp_variable_data[Changed_Item],&m_Variable_data.at(Changed_Item),sizeof(Str_variable_point)); if(cmp_ret!=0) { m_variable_list.SetItemBkColor(Changed_Item,Changed_SubItem,LIST_ITEM_CHANGED_BKCOLOR); temp_task_info.Format(_T("Write Variable List Item%d .Changed to \"%s\" "),Changed_Item + 1,New_CString); Post_Write_Message(g_bac_instance,WRITEVARIABLE_T3000,Changed_Item,Changed_Item,sizeof(Str_variable_point),m_variable_dlg_hwnd ,temp_task_info,Changed_Item,Changed_SubItem); } return 0; }
LRESULT CBacnetVariable::Fresh_Variable_List(WPARAM wParam,LPARAM lParam) { int Fresh_Item; int isFreshOne = (int)lParam; if(isFreshOne == REFRESH_ON_ITEM) { Fresh_Item = (int)wParam; } else { if(m_variable_list.IsDataNewer((char *)&m_Variable_data.at(0),sizeof(Str_variable_point) * BAC_VARIABLE_ITEM_COUNT)) { //避免list 刷新时闪烁;在没有数据变动的情况下不刷新List; m_variable_list.SetListData((char *)&m_Variable_data.at(0),sizeof(Str_variable_point) * BAC_VARIABLE_ITEM_COUNT); } else { return 0; } } for (int i=0;i<(int)m_Variable_data.size();i++) { CString temp_item,temp_value,temp_cal,temp_filter,temp_status,temp_lable; CString temp_des; CString temp_units; if(isFreshOne) { i = Fresh_Item; } MultiByteToWideChar( CP_ACP, 0, (char *)m_Variable_data.at(i).description, (int)strlen((char *)m_Variable_data.at(i).description)+1, temp_des.GetBuffer(MAX_PATH), MAX_PATH ); temp_des.ReleaseBuffer(); m_variable_list.SetItemText(i,VARIABLE_FULL_LABLE,temp_des); if(m_Variable_data.at(i).auto_manual==0) { m_variable_list.SetItemText(i,VARIABLE_AUTO_MANUAL,_T("Auto")); m_variable_list.SetCellEnabled(i,VARIABLE_VALUE,0); } else { m_variable_list.SetItemText(i,VARIABLE_AUTO_MANUAL,_T("Manual")); m_variable_list.SetCellEnabled(i,VARIABLE_VALUE,1); } if(m_Variable_data.at(i).digital_analog == BAC_UNITS_DIGITAL) { if((m_Variable_data.at(i).range>22) || (m_Variable_data.at(i).range == 0)) { m_variable_list.SetItemText(i,VARIABLE_UNITE,Digital_Units_Array[0]); } else { CString temp1; CStringArray temparray; #if 0 if(m_Variable_data.at(i).range>=12) temp1 = Digital_Units_Array[m_Variable_data.at(i).range - 11];//11 is the sizeof the array else #endif temp1 = Digital_Units_Array[m_Variable_data.at(i).range]; SplitCStringA(temparray,temp1,_T("/")); if((temparray.GetSize()==2)) { if(m_Variable_data.at(i).control == 0) m_variable_list.SetItemText(i,VARIABLE_VALUE,temparray.GetAt(0)); else m_variable_list.SetItemText(i,VARIABLE_VALUE,temparray.GetAt(1)); m_variable_list.SetItemText(i,VARIABLE_UNITE,temp1); } } #if 0 m_variable_list.SetItemText(i,VARIABLE_UNITE,Digital_Units_Array[m_Variable_data.at(i).range]); //单位 这个要商量 看要怎么搞; if((m_Variable_data.at(i).range >= 12)&&(m_Variable_data.at(i).range <= 22)) { CString temp1; CStringArray temparray; temp1 = Digital_Units_Array[m_Variable_data.at(i).range - 11];//11 is the sizeof the array SplitCStringA(temparray,temp1,_T("/")); if((temparray.GetSize()==2)&&(!temparray.GetAt(1).IsEmpty())) { m_variable_list.SetItemText(i,VARIABLE_VALUE,temparray.GetAt(1)); } m_variable_list.SetItemText(i,VARIABLE_UNITE,temp1); } else if((m_Variable_data.at(i).range >= 1)&&(m_Variable_data.at(i).range <= 11)) { CString temp1; CStringArray temparray; temp1 = Digital_Units_Array[m_Variable_data.at(i).range]; SplitCStringA(temparray,temp1,_T("/")); if((temparray.GetSize()==2)&&(!temparray.GetAt(0).IsEmpty())) { m_variable_list.SetItemText(i,VARIABLE_VALUE,temparray.GetAt(0)); } m_variable_list.SetItemText(i,VARIABLE_UNITE,temp1); } else { m_variable_list.SetItemText(i,VARIABLE_VALUE,_T("0")); } #endif } else { if(m_Variable_data.at(i).range == 20) //如果是时间; { m_variable_list.SetItemText(i,VARIABLE_UNITE,Variable_Analog_Units_Array[m_Variable_data.at(i).range]); char temp_char[50]; int time_seconds = m_Variable_data.at(i).value / 1000; intervaltotext(temp_char,time_seconds,0,0); CString temp_11; MultiByteToWideChar( CP_ACP, 0, temp_char, strlen(temp_char) + 1, temp_11.GetBuffer(MAX_PATH), MAX_PATH ); temp_11.ReleaseBuffer(); m_variable_list.SetItemText(i,VARIABLE_VALUE,temp_11); //temp_value.Format(_T("%d"),m_Variable_data.at(i).value); //m_variable_list.SetItemText(i,VARIABLE_VALUE,temp_value); } else if(m_Variable_data.at(i).range<=sizeof(Variable_Analog_Units_Array)/sizeof(Variable_Analog_Units_Array[0])) { m_variable_list.SetItemText(i,VARIABLE_UNITE,Variable_Analog_Units_Array[m_Variable_data.at(i).range]); CString cstemp_value; float temp_float_value; temp_float_value = ((float)m_Variable_data.at(i).value) / 1000; cstemp_value.Format(_T("%.3f"),temp_float_value); m_variable_list.SetItemText(i,VARIABLE_VALUE,cstemp_value); //temp_value.Format(_T("%d"),m_Variable_data.at(i).value); //m_variable_list.SetItemText(i,VARIABLE_VALUE,temp_value); } } CString temp_des2; MultiByteToWideChar( CP_ACP, 0, (char *)m_Variable_data.at(i).label, (int)strlen((char *)m_Variable_data.at(i).label)+1, temp_des2.GetBuffer(MAX_PATH), MAX_PATH ); temp_des2.ReleaseBuffer(); m_variable_list.SetItemText(i,VARIABLE_LABLE,temp_des2); if(isFreshOne) { break; } } copy_data_to_ptrpanel(TYPE_VARIABLE); //MessageBox("1"); return 0; }
void CBacnetVariable::OnNMClickListVariable(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: Add your control notification handler code here long lRow,lCol; m_variable_list.Set_Edit(true); DWORD dwPos=GetMessagePos();//Get which line is click by user.Set the check box, when user enter Insert it will jump to program dialog CPoint point( LOWORD(dwPos), HIWORD(dwPos)); m_variable_list.ScreenToClient(&point); LVHITTESTINFO lvinfo; lvinfo.pt=point; lvinfo.flags=LVHT_ABOVE; int nItem=m_variable_list.SubItemHitTest(&lvinfo); lRow = lvinfo.iItem; lCol = lvinfo.iSubItem; if(lRow>m_variable_list.GetItemCount()) //如果点击区超过最大行号,则点击是无效的 return; if(lRow<0) return; CString temp1; m_row = lRow; m_col = lCol; memcpy_s(&m_temp_variable_data[lRow],sizeof(Str_variable_point),&m_Variable_data.at(lRow),sizeof(Str_variable_point)); CString New_CString; CString temp_task_info; if((lCol == VARIABLE_VALUE) &&(m_Variable_data.at(lRow).digital_analog == BAC_UNITS_DIGITAL ) && (m_Variable_data.at(lRow).auto_manual != BAC_AUTO)) { CString temp1; CStringArray temparray; if((m_Variable_data.at(lRow).range < 23) &&(m_Variable_data.at(lRow).range !=0)) temp1 = Digital_Units_Array[m_Variable_data.at(lRow).range]; else if((m_Variable_data.at(lRow).range >=23) && (m_Variable_data.at(lRow).range <= 30)) { if(receive_customer_unit) temp1 = temp_unit_no_index[m_Variable_data.at(lRow).range - 23]; else { m_variable_list.Set_Edit(false); return; } } else return; SplitCStringA(temparray,temp1,_T("/")); if(m_Variable_data.at(lRow).control == 0) { m_Variable_data.at(lRow).control = 1; m_variable_list.SetItemText(lRow,VARIABLE_VALUE,temparray.GetAt(1)); New_CString = temparray.GetAt(1); } else { m_Variable_data.at(lRow).control = 0; m_variable_list.SetItemText(lRow,VARIABLE_VALUE,temparray.GetAt(0)); New_CString = temparray.GetAt(0); } m_variable_list.Set_Edit(false); temp_task_info.Format(_T("Write Variable List Item%d .Changed to \"%s\" "),lRow + 1,New_CString); } else if((lCol == VARIABLE_VALUE) &&(m_Variable_data.at(lRow).digital_analog == BAC_UNITS_ANALOG ) && (m_Variable_data.at(lRow).auto_manual == BAC_MANUAL) && (m_Variable_data.at(lRow).range == 20)) { m_variable_list.Set_Edit(false); m_variable_time_picker.ShowWindow(SW_SHOW); CRect list_rect,win_rect; m_variable_list.GetWindowRect(list_rect); GetWindowRect(win_rect); CRect myrect; m_variable_list.GetSubItemRect(lRow,lCol,LVIR_BOUNDS,myrect); myrect.left = myrect.left + list_rect.left - win_rect.left +2 ; myrect.right = myrect.right + list_rect.left - win_rect.left + 2; //myrect.top = myrect.top + 11; //myrect.bottom = myrect.bottom + 13; myrect.top = myrect.top + 24; myrect.bottom = myrect.bottom + 26; m_variable_time_picker.BringWindowToTop(); m_variable_time_picker.MoveWindow(myrect); CString Temp_CString = m_variable_list.GetItemText(lRow,lCol); CStringArray TEMPCS; int temp_hour,temp_minute; SplitCStringA(TEMPCS, Temp_CString, _T(":")); if((int)TEMPCS.GetSize() <2) { temp_hour = 0; temp_minute = 0; CTime TimeTemp(2014,1,1,temp_hour,temp_minute,0); m_variable_time_picker.SetFormat(_T("HH:mm")); m_variable_time_picker.SetTime(&TimeTemp); m_variable_time_picker.SetFocus(); } else { temp_hour = _wtoi(TEMPCS.GetAt(0)); temp_minute = _wtoi(TEMPCS.GetAt(1)); CTime TimeTemp(2014,1,1,temp_hour,temp_minute,0); m_variable_time_picker.SetFormat(_T("HH:mm")); m_variable_time_picker.SetTime(&TimeTemp); m_variable_time_picker.SetFocus(); } m_variable_list.SetItemText(lRow,lCol,_T("")); m_variable_time_picker.Invalidate(); SetTimer(2,100,NULL); } else if(lCol == VARIABLE_VALUE) { if(m_Variable_data.at(lRow).auto_manual == BAC_AUTO) { m_variable_list.Set_Edit(false); return; } } else if(lCol == VARIABLE_AUTO_MANUAL) { if(m_Variable_data.at(lRow).auto_manual == 0) { m_Variable_data.at(lRow).auto_manual = 1; m_variable_list.SetItemText(lRow,VARIABLE_AUTO_MANUAL,_T("Manual")); //m_variable_list.SetCellEnabled(lRow,VARIABLE_VALUE,TRUE); New_CString = _T("Manual"); } else { m_Variable_data.at(lRow).auto_manual = 0; m_variable_list.SetItemText(lRow,VARIABLE_AUTO_MANUAL,_T("Auto")); //m_variable_list.SetCellEnabled(lRow,VARIABLE_VALUE,FALSE); New_CString = _T("Auto"); } temp_task_info.Format(_T("Write Variable List Item%d .Changed to \"%s\" "),lRow + 1,New_CString); } else if(lCol == VARIABLE_UNITE) { BacnetRange dlg; //点击产品的时候 需要读customer units,老的产品firmware 说不定没有 这些,所以不强迫要读到; if(!read_customer_unit) { int temp_invoke_id = -1; int send_status = true; int resend_count = 0; for (int z=0; z<3; z++) { do { resend_count ++; if(resend_count>5) { send_status = false; break; } temp_invoke_id = GetPrivateData( g_bac_instance, READUNIT_T3000, 0, BAC_CUSTOMER_UNITS_COUNT - 1, sizeof(Str_Units_element)); Sleep(SEND_COMMAND_DELAY_TIME); } while (g_invoke_id<0); if(send_status) { for (int z=0; z<1000; z++) { Sleep(1); if(tsm_invoke_id_free(temp_invoke_id)) { read_customer_unit = true; break; } else continue; } } if(read_customer_unit) break; } } //CString temp_cs = m_variable_list.GetItemText(lRow,lCol); //if(temp_cs.CompareNoCase(Units_Type[UNITS_TYPE_ANALOG])==0) //{ if(m_Variable_data.at(lRow).digital_analog == BAC_UNITS_ANALOG) { bac_ranges_type = VARIABLE_RANGE_ANALOG_TYPE; if(m_Variable_data.at(lRow).range > (sizeof(Variable_Analog_Units_Array) / sizeof(Variable_Analog_Units_Array[0]))) { m_Variable_data.at(lRow).range = 0; bac_range_number_choose = 0; } } else { bac_ranges_type = VARIABLE_RANGE_DIGITAL_TYPE; if(m_Variable_data.at(lRow).range > 30) { m_Variable_data.at(lRow).range = 0; bac_range_number_choose = 0; } } initial_dialog = 1; bac_range_number_choose = m_Variable_data.at(lRow).range; //bac_ranges_type = VARIABLE_RANGE_ANALOG_TYPE; dlg.DoModal(); if(range_cancel) { PostMessage(WM_REFRESH_BAC_VARIABLE_LIST,lRow,REFRESH_ON_ITEM);//这里调用 刷新线程重新刷新会方便一点; return ; } if(bac_range_number_choose == 0) //如果选择的是 unused 就认为是analog 的unused;这样 能显示对应的value; { m_Variable_data.at(lRow).digital_analog = BAC_UNITS_ANALOG; bac_ranges_type = VARIABLE_RANGE_ANALOG_TYPE; } if(bac_ranges_type == VARIABLE_RANGE_ANALOG_TYPE) { m_Variable_data.at(lRow).digital_analog = BAC_UNITS_ANALOG; m_Variable_data.at(lRow).range = bac_range_number_choose; m_variable_list.SetItemText(lRow,lCol,Variable_Analog_Units_Array[bac_range_number_choose]); if(m_Variable_data.at(lRow).range == 20) //如果是时间; { char temp_char[50]; int time_seconds = m_Variable_data.at(lRow).value / 1000; intervaltotext(temp_char,time_seconds,0,0); CString temp_11; MultiByteToWideChar( CP_ACP, 0, temp_char, strlen(temp_char) + 1, temp_11.GetBuffer(MAX_PATH), MAX_PATH ); temp_11.ReleaseBuffer(); m_variable_list.SetItemText(lRow,VARIABLE_VALUE,temp_11); } else { CString cstemp_value; float temp_float_value; temp_float_value = ((float)m_Variable_data.at(lRow).value) / 1000; cstemp_value.Format(_T("%.3f"),temp_float_value); m_variable_list.SetItemText(lRow,VARIABLE_VALUE,cstemp_value); /* cstemp_value.Format(_T("%d"),m_Variable_data.at(Changed_Item).value); m_variable_list.SetItemText(Changed_Item,VARIABLE_VALUE,cstemp_value);*/ } } else if((bac_ranges_type == VARIABLE_RANGE_DIGITAL_TYPE) || (bac_ranges_type == INPUT_RANGE_DIGITAL_TYPE) || (bac_ranges_type == OUTPUT_RANGE_DIGITAL_TYPE)) { m_Variable_data.at(lRow).digital_analog = BAC_UNITS_DIGITAL; m_Variable_data.at(lRow).range = bac_range_number_choose; CStringArray temparray; if((bac_range_number_choose >= 23) && (bac_range_number_choose <= 30)) { //temp1.Format(_T("%s"), temp_unit_no_index[bac_range_number_choose - 23]); temp1 = temp_unit_no_index[bac_range_number_choose - 23]; } else temp1 = Digital_Units_Array[bac_range_number_choose];//22 is the sizeof the array SplitCStringA(temparray,temp1,_T("/")); if(m_Variable_data.at(lRow).control == 1) { if((temparray.GetSize()==2)&&(!temparray.GetAt(1).IsEmpty())) { m_variable_list.SetItemText(lRow,VARIABLE_VALUE,temparray.GetAt(1)); } } else { if((temparray.GetSize()==2)&&(!temparray.GetAt(0).IsEmpty())) { m_variable_list.SetItemText(lRow,VARIABLE_VALUE,temparray.GetAt(0)); } } m_variable_list.SetItemText(lRow,VARIABLE_UNITE,temp1); } } else { //m_variable_list.Set_Edit(false); return; } int cmp_ret = memcmp(&m_temp_variable_data[lRow],&m_Variable_data.at(lRow),sizeof(Str_variable_point)); if(cmp_ret!=0) { m_variable_list.SetItemBkColor(lRow,lCol,LIST_ITEM_CHANGED_BKCOLOR); Post_Write_Message(g_bac_instance,WRITEVARIABLE_T3000,lRow,lRow,sizeof(Str_variable_point),m_variable_dlg_hwnd,temp_task_info,lRow,lCol); } // GetDlgItem(IDC_BUTTON_VARIABLE_APPLY)->SetFocus(); *pResult = 0; }
int GetVariableValue(int index ,CString &ret_cstring,CString &ret_unit,CString &Auto_M,int &digital_value) { CStringArray temparray; CString temp1; if(index >= BAC_VARIABLE_ITEM_COUNT) { ret_cstring.Empty(); ret_unit.Empty(); Auto_M.Empty(); return -1; } int i = index; if(m_Variable_data.at(i).auto_manual == 1) { Auto_M = _T("M"); } else { Auto_M.Empty(); } if(m_Variable_data.at(i).digital_analog == BAC_UNITS_DIGITAL) { if(m_Variable_data.at(i).range>30) { ret_cstring.Empty(); return -1; } else { if((m_Variable_data.at(i).range < 23) &&(m_Variable_data.at(i).range !=0)) temp1 = Digital_Units_Array[m_Variable_data.at(i).range]; else if((m_Variable_data.at(i).range >=23) && (m_Variable_data.at(i).range <= 30)) { if(receive_customer_unit) temp1 = temp_unit_no_index[m_Variable_data.at(i).range - 23]; } else { ret_cstring.Empty(); return -1; } SplitCStringA(temparray,temp1,_T("/")); if((temparray.GetSize()==2)) { if(m_Variable_data.at(i).control == 0) { digital_value = 0; ret_cstring = temparray.GetAt(0); return 1; } else { digital_value = 1; ret_cstring = temparray.GetAt(1); } } } } else { if(m_Variable_data.at(i).range == 20) //如果是时间; { ret_unit = Variable_Analog_Units_Array[m_Variable_data.at(i).range]; char temp_char[50]; int time_seconds = m_Variable_data.at(i).value / 1000; intervaltotext(temp_char,time_seconds,0,0); MultiByteToWideChar( CP_ACP, 0, temp_char, strlen(temp_char) + 1, ret_cstring.GetBuffer(MAX_PATH), MAX_PATH ); ret_cstring.ReleaseBuffer(); digital_value = 2; } else if((m_Variable_data.at(i).range<=sizeof(Variable_Analog_Units_Array)/sizeof(Variable_Analog_Units_Array[0])) && (m_Variable_data.at(i).range != 0)) { ret_unit = Variable_Analog_Units_Array[m_Variable_data.at(i).range]; CString cstemp_value; float temp_float_value; temp_float_value = ((float)m_Variable_data.at(i).value) / 1000; ret_cstring.Format(_T("%.3f"),temp_float_value); digital_value = 2; } else { ret_cstring.Empty(); return -1; } } return 1; }