//--------------------------------------------------------------------------- #include #pragma hdrstop #include "main.h" #include "pisocpm100.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TTxType_Demo *TxType_Demo; Byte Board,NodeId,Baudrate; unsigned int MsgCnt; AnsiString tempstr; //--------------------------------------------------------------------------- __fastcall TTxType_Demo::TTxType_Demo(TComponent* Owner) : TForm(Owner) { Board = 0; NodeId = 1; Baudrate = 0; Cmb_Board->Enabled = true; Cmb_Baudrate->Enabled = true; Btn_Configure->Enabled = true; Cmb_NodeId->Enabled = false; Btn_Shutdown->Enabled = false; Btn_AddNode->Enabled = false; Btn_Remove->Enabled = false; Btn_TxType->Enabled = false; Btn_Rtr->Enabled = false; Btn_SendSync->Enabled = false; Btn_Clear->Enabled = false; Edit_PDOCobId->Enabled = false; Edit_TxType->Enabled = false; Edit_SyncId->Enabled = false; Edit_Cyclic->Enabled = false; } //--------------------------------------------------------------------------- //-------------- If Board Combo box has been click ------------// void __fastcall TTxType_Demo::OnBoardClick(TObject *Sender) { Board = Cmb_Board->ItemIndex; } //--------------------------------------------------------------------------- //-------------- If Board Combo box lose focus ------------// void __fastcall TTxType_Demo::OnBoardExit(TObject *Sender) { int TempBoard; TempBoard = StrToInt(Cmb_Board->Text); if(TempBoard > 15){ // The range of Board number is 0 ~ 15 TempBoard = 15; } Board = TempBoard; Cmb_Board->ItemIndex = Board; } //--------------------------------------------------------------------------- //-------------- If Baudrate Combo box has been click ------------// void __fastcall TTxType_Demo::OnBaudrateClick(TObject *Sender) { Baudrate = Cmb_Baudrate->ItemIndex; } //--------------------------------------------------------------------------- //-------------- If Baudrate Combo box lose focus ------------// void __fastcall TTxType_Demo::OnBaudrateExit(TObject *Sender) { Cmb_Baudrate->ItemIndex = Baudrate; } //--------------------------------------------------------------------------- //-------------- If Node Id Combo box has been click ------------// void __fastcall TTxType_Demo::OnNodeidClick(TObject *Sender) { NodeId = Cmb_NodeId->ItemIndex; if(NodeId == 0) NodeId = 1; } //--------------------------------------------------------------------------- //-------------- If Node Id Combo box lose focus ------------// void __fastcall TTxType_Demo::OnNodeidExit(TObject *Sender) { int TempNodeId; TempNodeId = StrToInt(Cmb_NodeId->Text); if(TempNodeId > 127){ // The range of Node Id is 1 ~ 127 TempNodeId = 127; } else if(TempNodeId == 0){ TempNodeId = 1; } NodeId = TempNodeId; Cmb_NodeId->ItemIndex = NodeId; } //--------------------------------------------------------------------------- void __fastcall TTxType_Demo::Btn_ConfigureClick(TObject *Sender) { int ret; ret = CPM100_ActiveBoard(Board); if(ret){ tempstr = "Active Board failure, error = " + IntToStr(ret); MessageBox(NULL,tempstr.c_str(),"Error",0); return; } ret = CPM100_InitMaster(Board,Baudrate); if(ret){ tempstr = "Initialize Master failure, error = " + IntToStr(ret); MessageBox(NULL,tempstr.c_str(),"Error",0); return; } Cmb_Board->Enabled = false; Cmb_Baudrate->Enabled = false; Btn_Configure->Enabled = false; Cmb_NodeId->Enabled = true; Btn_Shutdown->Enabled = true; Btn_AddNode->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TTxType_Demo::Btn_ShutdownClick(TObject *Sender) { int ret; ret = CPM100_ShutdownMaster(Board); if(ret){ tempstr = "Master shutdown failure, error = " + IntToStr(ret); MessageBox(NULL,tempstr.c_str(),"Error",0); return; } ret = CPM100_CloseBoard(Board); if(ret){ tempstr = "Close board failure, error = " + IntToStr(ret); MessageBox(NULL,tempstr.c_str(),"Error",0); return; } Timer1->Interval = 0; Cmb_Board->Enabled = true; Cmb_Baudrate->Enabled = true; Btn_Configure->Enabled = true; Cmb_NodeId->Enabled = false; Btn_Shutdown->Enabled = false; Btn_AddNode->Enabled = false; Btn_Remove->Enabled = false; Btn_TxType->Enabled = false; Btn_Rtr->Enabled = false; Btn_SendSync->Enabled = false; Btn_Clear->Enabled = false; Edit_PDOCobId->Enabled = false; Edit_TxType->Enabled = false; Edit_SyncId->Enabled = false; Edit_Cyclic->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TTxType_Demo::Btn_AddNodeClick(TObject *Sender) { int ret; ret = CPM100_AddNode(Board,NodeId); if(ret){ tempstr = "Node add failure, error = " + IntToStr(ret); MessageBox(NULL,tempstr.c_str(),"Error",0); return; } MsgCnt = 0; // Clear the TMemo object "Mem_Receive" Mem_Receive->Clear(); Timer1->Interval = 10; Cmb_NodeId->Enabled = false; Btn_AddNode->Enabled = false; Btn_Remove->Enabled = true; Btn_TxType->Enabled = true; Btn_Rtr->Enabled = true; Btn_SendSync->Enabled = true; Btn_Clear->Enabled = true; Edit_PDOCobId->Enabled = true; Edit_TxType->Enabled = true; Edit_SyncId->Enabled = true; Edit_Cyclic->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TTxType_Demo::Btn_RemoveClick(TObject *Sender) { int ret; ret = CPM100_RemoveNode(Board,NodeId); if(ret){ tempstr = "Node remove failure, error = " + IntToStr(ret); MessageBox(NULL,tempstr.c_str(),"Error",0); return; } Timer1->Interval = 0; Cmb_NodeId->Enabled = true; Btn_AddNode->Enabled = true; Btn_Remove->Enabled = false; Btn_TxType->Enabled = false; Btn_Rtr->Enabled = false; Btn_SendSync->Enabled = false; Btn_Clear->Enabled = false; Edit_PDOCobId->Enabled = false; Edit_TxType->Enabled = false; Edit_SyncId->Enabled = false; Edit_Cyclic->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TTxType_Demo::Btn_TxTypeClick(TObject *Sender) { int ret; Byte TxType; Word CobId; // Convert string to Hex CobId = (Word)StrToInt("0x" + Edit_PDOCobId->Text.Trim()); // Convert string to Hex TxType = (Byte)StrToInt("0x" + Edit_TxType->Text.Trim()); ret = CPM100_PDOTxType(Board, NodeId, CobId, TxType); if(ret){ tempstr = "Set transmission type failure, error = " + IntToStr(ret); MessageBox(NULL,tempstr.c_str(),"Error",0); return; } else{ tempstr = "Set type OK"; MessageBox(NULL,tempstr.c_str(),"OK",0); } } //--------------------------------------------------------------------------- void __fastcall TTxType_Demo::Btn_RtrClick(TObject *Sender) { int ret,i; Byte RDatalen,RData[8]; Word CobId; DWord UpperTime,LowerTime; double TimeStamp; AnsiString PDOString; // Convert string to Hex CobId = (Word)StrToInt("0x" + Edit_PDOCobId->Text.Trim()); ret = CPM100_PDORemote(Board, CobId, &RDatalen, RData, &UpperTime, &LowerTime); if(ret){ tempstr = "Read PDO failure, error = " + IntToStr(ret); MessageBox(NULL,tempstr.c_str(),"Error",0); return; } MsgCnt = MsgCnt + 1; PDOString = IntToStr(MsgCnt) + " -- "; if(RDatalen){ for(i=0;iLines->Append(PDOString); } //--------------------------------------------------------------------------- void __fastcall TTxType_Demo::Btn_SendSyncClick(TObject *Sender) { int ret; Word CobId; DWord SyncCycle; // Convert string to Hex CobId = (Word)StrToInt("0x" + Edit_SyncId->Text.Trim()); // Convert string to Hex SyncCycle = (Word)StrToInt(Edit_Cyclic->Text.Trim()); // The unit of SyncCyclic is 0.1ms SyncCycle = SyncCycle*10; // The unit of SyncCycle*10 is 1ms ret = CPM100_SendSYNC(Board,CobId,SyncCycle); if(ret){ tempstr = "Send SYNC failure, error = " + IntToStr(ret); MessageBox(NULL,tempstr.c_str(),"Error",0); return; } } //--------------------------------------------------------------------------- void __fastcall TTxType_Demo::Btn_ClearClick(TObject *Sender) { Mem_Receive->Clear(); MsgCnt = 0; } //--------------------------------------------------------------------------- void __fastcall TTxType_Demo::Timer1Timer(TObject *Sender) { int ret,i; Byte RDatalen,RData[8],PDOCount; Word CobId; DWord UpperTime,LowerTime; double TimeStamp; AnsiString PDOString; PDOCount = CPM100_ReadPDOCount(Board); if(PDOCount){ ret = CPM100_ReadPDOMessage(Board, &CobId, &RDatalen, RData, &UpperTime, &LowerTime); if(!ret){ MsgCnt = MsgCnt + 1; PDOString = IntToStr(MsgCnt) + " -- "; if(RDatalen){ for(i=0;iLines->Append(PDOString); } } } //--------------------------------------------------------------------------- void __fastcall TTxType_Demo::OnProgramClose(TObject *Sender, TCloseAction &Action) { CPM100_ShutdownMaster(Board); CPM100_CloseBoard(Board); } //---------------------------------------------------------------------------