//--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" #include "CM100U_PMAPI.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; BYTE BOARD = 1; BYTE Main_PMIDCount,Main_PMIDArray[45]; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { CM100PM_CloseBoard(BOARD); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button_GetFirmwareVerClick(TObject *Sender) { DWORD Ver; AnsiString Str; Ver = CM100PM_GetFirmwareVersion(BOARD); Str.printf("Ver:%X",Ver); ShowMessage(Str); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button_SetBaudRateClick(TObject *Sender) { DWORD Ret; AnsiString Str; Ret = CM100PM_SetBaudRate(BOARD,ComboBox_BaudRate->ItemIndex); Str.printf("Error(%d)",Ret); if(Ret) ShowMessage(Str); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button_BaudRateClick(TObject *Sender) { DWORD Ret; AnsiString Str; BYTE BaudRate; Ret = CM100PM_GetBaudRate(BOARD,&BaudRate); Str.printf("Error(%d)",Ret); if(Ret) ShowMessage(Str); switch(BaudRate) { case 0: ShowMessage("125K bps"); break; case 1: ShowMessage("250K bps"); break; case 2: ShowMessage("500K bps"); break; default: ShowMessage("Unknown"); break; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button_SetPMIDsClick(TObject *Sender) { BYTE PMIDCount,bTemp,PMIDArray[45],Sorted[45]; AnsiString Str1,Str2; BYTE i,j,temp; DWORD Ret; Str1 = Edit_PMIDs->Text; if(Str1.Length() < 1) { ShowMessage("PMIDs is Empty"); return; } if(Str1.Pos(";") == 0) { ShowMessage("You lose the end mark \";\""); return; } PMIDCount = 0; while(1) { Str2 = Str1.SubString(1,(Str1.Pos(",")-1)); if(Str2.Length() < 1) break; try{ bTemp = Str2.ToInt(); } catch(...){ShowMessage("ID must be decimal value"); break;} PMIDArray[PMIDCount++] = bTemp; Str1 = Str1.Delete(1,Str1.Pos(",")); if(Str1.Pos(",") == 0) break; } Str2 = Str1.SubString(1,(Str1.Pos(";")-1)); try{ bTemp = Str2.ToInt(); } catch(...){ShowMessage("ID must be decimal value"); return;} PMIDArray[PMIDCount++] = bTemp; for(j = 0;j < PMIDCount-1;j++) { for(i = j+1;i < PMIDCount;i++) { if(PMIDArray[i] == PMIDArray[j]) { ShowMessage("Error!! You have input the same ID"); return; } if(PMIDArray[j] > PMIDArray[i]) { temp = PMIDArray[i]; PMIDArray[i] = PMIDArray[j]; PMIDArray[j] = temp; } } } /* Str1 = ""; for(j = 0;j < PMIDCount;j++) { if(j == (PMIDCount-1)) Str2.printf("%d;",PMIDArray[j]); else Str2.printf("%d,",PMIDArray[j]); Str1 += Str2; } Str2.printf("Count: %d",PMIDCount); Str1 += Str2; ShowMessage(Str1); */ Ret = CM100PM_SetPMIDs(BOARD,PMIDCount,PMIDArray); if(Ret)ShowMessage(Ret); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button_GetPMIDsClick(TObject *Sender) { BYTE PMIDCount,bTemp,PMIDArray[45],Sorted[45]; AnsiString Str1,Str2; BYTE i,j,temp; DWORD Ret; Ret = CM100PM_GetPMIDs(BOARD,&PMIDCount,PMIDArray); if(Ret){ShowMessage("Error : " + Ret); return;} Str1 = ""; for(j = 0;j < PMIDCount;j++) { if(j == (PMIDCount-1)) Str2.printf("%d;",PMIDArray[j]); else Str2.printf("%d,",PMIDArray[j]); Str1 += Str2; } Str2.printf("Count: %d",PMIDCount); Str1 += Str2; ShowMessage(Str1); } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { WORD i,j,DataLen; BYTE DataArray[200]; DWORD Ret; static BYTE _Index = 0; AnsiString Str1,Str2,MemoStr; float *fptr,f; TMemo *MemoCtrl; BYTE Status; Timer1->Enabled = false; Ret = CM100PM_ReadAllData_BYTE(BOARD,_Index,&DataLen,DataArray); //if(Ret) {ShowMessage(Ret); return;} for(j = 0;j < 4;j++) { MemoStr.printf("Memo%d",_Index*4+j+1); MemoCtrl = (TMemo*)FindComponent(MemoStr); /* if(j == 0)Memo1->Lines->Clear(); if(j == 1)Memo2->Lines->Clear(); if(j == 2)Memo3->Lines->Clear(); if(j == 3)Memo4->Lines->Clear(); */ MemoCtrl->Lines->Clear(); for(i = 0;i < 9;i++) { fptr = (float*)(&DataArray[36*j]); switch(i) { case 0: Str1.printf("V_%c: %f",('a'+j),fptr[i]); break; case 1: Str1.printf("I_%c: %f",('a'+j),fptr[i]); break; case 2: Str1.printf("kW_%c: %f",('a'+j),fptr[i]); break; case 3: Str1.printf("kvar_%c: %f",('a'+j),fptr[i]); break; case 4: Str1.printf("kVA_%c: %f",('a'+j),fptr[i]); break; case 5: Str1.printf("PF_%c: %f",('a'+j),fptr[i]); break; case 6: Str1.printf("kWh_%c: %f",('a'+j),fptr[i]); break; case 7: Str1.printf("kvarh_%c: %f",('a'+j),fptr[i]); break; case 8: Str1.printf("kVAh_%c: %f",('a'+j),fptr[i]); break; } /* if(j == 0)Memo1->Lines->Add(Str1); if(j == 1)Memo2->Lines->Add(Str1); if(j == 2)Memo3->Lines->Add(Str1); if(j == 3)Memo4->Lines->Add(Str1); */ MemoCtrl->Lines->Add(Str1); } } //_Index = (_Index+1)%7; /* for(i = 0;i < DataLen;) { Str1 = ""; for(j = 0;j < 8;j++,i++) { Str2.printf("[%d]:%02X, ",i,DataArray[i]); Str1 += Str2; } Memo1->Lines->Add(Str1); } */ Timer1->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button_ReadAllDataClick(TObject *Sender) { BYTE PMIDCount,bTemp,PMIDArray[45],Sorted[45]; AnsiString Str1,Str2; BYTE i,j,temp; DWORD Ret; Ret = CM100PM_GetPMIDs(BOARD,&Main_PMIDCount,Main_PMIDArray); if(Ret){ShowMessage("Error : " + Ret); return;} } //--------------------------------------------------------------------------- void __fastcall TForm1::Button_GetAutoRespTimeClick(TObject *Sender) { DWORD AutoRespTime; CM100PM_GetAutoRespTime(BOARD,&AutoRespTime); ShowMessage(AutoRespTime); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button_SetAutoRespTimeClick(TObject *Sender) { CM100PM_SetAutoRespTime(BOARD,1000); } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton_ActiveBoardClick(TObject *Sender) { DWORD Ret; AnsiString Str; Ret = CM100PM_ActiveBoard(BOARD); if(Ret) { Str.printf("ActiveBoard Error(%d)",Ret); ShowMessage(Str); } Sleep(3000); SpeedButton_ActiveBoard->Enabled = false; Timer1->Enabled = true; Timer2->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton_ResetFirmwareClick(TObject *Sender) { CM100PM_ResetFirmware(BOARD); Timer1->Enabled = false; Sleep(3000); Timer1->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer2Timer(TObject *Sender) { static BYTE i,PMIDCount,bTemp,PMIDArray[45]; BYTE Status; AnsiString Str; if(PMIDCount == 0)CM100PM_GetPMIDs(BOARD,&PMIDCount,PMIDArray); if(PMIDCount == 0) return; Memo_Status->Lines->Clear(); for(i = 0;i < PMIDCount;i++) { CM100PM_GetPowerMeterStatus(BOARD,PMIDArray[i],&Status); if(Status == 0) Str.printf("ID(0x%X) OK",PMIDArray[i]); else Str.printf("ID(0x%X) Fail",PMIDArray[i]); Memo_Status->Lines->Add(Str); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button_GetCANStatusClick(TObject *Sender) { BYTE CANStatus; AnsiString Str; CM100PM_GetCANStatus(BOARD, &CANStatus); if(CANStatus) { Str.printf("CANStatus %d",CANStatus); ShowMessage(Str); } else ShowMessage("CANStatus OK"); } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton_StartAutoRespClick(TObject *Sender) { CM100PM_StartAutoResp(BOARD); } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton_StopAutoRespClick(TObject *Sender) { CM100PM_StopAutoResp(BOARD); } //---------------------------------------------------------------------------