📄 main.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#define MAINPROGRAM
#include "WinCONSYS.h" // common variable define
#include "main.h"
#include "std_sub.h"
#include "About.h"
#include "OpenTCP.h"
#include "TMCN_Dlg.h"
#include "DIDO_Dlg.h"
#include "AIAO_Dlg.h"
#include "MBMaster_Dlg.h"
#include "TAGDef.h"
#include "IOModule.h"
#include "MixDisp_Dlg.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::display_date_time(void)
{
char buff[80];
memset(buff, 0, sizeof(buff));
get_date_time(&YEAR, &MONTH, &DAY, &HOUR, &MINUTE, &SECOND, &NSEC, &WEEK);
sprintf(buff, "%04d/%02d/%02d %02d:%02d:%02d",
YEAR, MONTH, DAY, HOUR, MINUTE, SECOND);
Form1->StatusBar1->Panels->Items[0]->Text= buff;
return;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::set_menu_enabled(int idx)
{
if(DISP_FLAG[0]==1) InputCoil1->Enabled= true;
else if(DISP_FLAG[1]==1) OutputCoil1->Enabled= true;
else if(DISP_FLAG[2]==1) InputRegister1->Enabled= true;
else if(DISP_FLAG[3]==1) HoldingRegister1->Enabled= true;
else if(DISP_FLAG[4]==1) InputCoilSoft1->Enabled= true;
else if(DISP_FLAG[5]==1) OutputCoilSoft1->Enabled= true;
else if(DISP_FLAG[6]==1) InputRegisterSoft1->Enabled= true;
else if(DISP_FLAG[7]==1) OutputRegisterSoft1->Enabled= true;
else if(DISP_FLAG[8]==1) TimerTable1->Enabled= true;
else if(DISP_FLAG[9]==1) CounterTable1->Enabled= true;
else if(DISP_FLAG[10]==1) MixDisplay1->Enabled= true;
memset(DISP_FLAG, 0, sizeof(DISP_FLAG));
DISP_FLAG[idx]= 1;
if(DISP_FLAG[0]==1) InputCoil1->Enabled= false;
else if(DISP_FLAG[1]==1) OutputCoil1->Enabled= false;
else if(DISP_FLAG[2]==1) InputRegister1->Enabled= false;
else if(DISP_FLAG[3]==1) HoldingRegister1->Enabled= false;
else if(DISP_FLAG[4]==1) InputCoilSoft1->Enabled= false;
else if(DISP_FLAG[5]==1) OutputCoilSoft1->Enabled= false;
else if(DISP_FLAG[6]==1) InputRegisterSoft1->Enabled= false;
else if(DISP_FLAG[7]==1) OutputRegisterSoft1->Enabled= false;
else if(DISP_FLAG[8]==1) TimerTable1->Enabled= false;
else if(DISP_FLAG[9]==1) CounterTable1->Enabled= false;
else if(DISP_FLAG[10]==1) MixDisplay1->Enabled= true; // always enabled
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
// Program initial
display_date_time();
open_system_table();
OpenTCP1->Enabled= true;
CloseTCP1->Enabled= false;
memset(DISP_FLAG, 0, sizeof(DISP_FLAG));
// InputRegister1Click(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
// Program close
MBTCPClose(1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Exit1Click(TObject *Sender)
{
// Program close
Form1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::About1Click(TObject *Sender)
{
// About Box
// unsigned long ldata;
// unsigned char bf[10];
// char buff[80];
// ldata= 0x01020304;
// memcpy(bf, (unsigned char *)&ldata, 4);
// sprintf(buff, "%02X %02X %02X, %02X", bf[0], bf[1], bf[2], bf[3]);
AboutBox->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
display_date_time();
if(DISP_FLAG[0]==1) display_listview_data(ListView1, 0);
else if(DISP_FLAG[1]==1) display_listview_data(ListView1, 1);
else if(DISP_FLAG[2]==1) display_listview_data(ListView1, 2);
else if(DISP_FLAG[3]==1) display_listview_data(ListView1, 3);
else if(DISP_FLAG[4]==1) display_listview_data(ListView1, 4);
else if(DISP_FLAG[5]==1) display_listview_data(ListView1, 5);
else if(DISP_FLAG[6]==1) display_listview_data(ListView1, 6);
else if(DISP_FLAG[7]==1) display_listview_data(ListView1, 7);
else if(DISP_FLAG[8]==1) display_listview_data(ListView1, 8);
else if(DISP_FLAG[9]==1) display_listview_data(ListView1, 9);
else if(DISP_FLAG[10]==1) display_listview_data(ListView1, 10);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenTCP1Click(TObject *Sender)
{
// Open Port
unsigned char ip[20], recv[20];
int i, rc;
char buff[80];
memset(ip, 0, sizeof(ip));
if(OpenTCPDlg->Execute(ip)==0)
{
rc= MBTCPInit(SockNo, ip, 503, 3000); // use 503 for Modbus IP Port
if(rc==MB_RTC_OK)
{
// try to get coil data, to check connection is OK or not
rc=MBTCP_R_Coils(SockNo, ModbusID, 1, 1, recv, 1);
if(rc==MB_RTC_OK)
{
OpenTCP1->Enabled= false;
CloseTCP1->Enabled= true;
MessageBox(NULL, "Open Modbus TCP OK....", WinCON8000, MB_OK);
Form1->StatusBar1->Panels->Items[3]->Text= "TCP Connect";
for(i=0; i<10; i++) // start polling again
{
if(DISP_FLAG[i]==1)
{ Timer2->Enabled= true; break;}
}
}
else
{
sprintf(buff, "Modbus TCP connect error, rtc=%d", rc);
MessageBox(NULL, buff, WinCON8000, MB_OK);
MBTCPClose(SockNo);
Form1->StatusBar1->Panels->Items[3]->Text= "TCP Disconnect";
}
}
else
{
sprintf(buff, "Can't Open Modbus TCP, rtc=%d", rc);
MessageBox(NULL, buff, WinCON8000, MB_OK);
Form1->StatusBar1->Panels->Items[3]->Text= "TCP Disconnect";
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CloseTCP1Click(TObject *Sender)
{
int rc;
unsigned char recv[20];
char buff[80];
Timer2->Enabled= false;
OpenTCP1->Enabled= true;
CloseTCP1->Enabled= false;
Form1->StatusBar1->Panels->Items[3]->Text= "TCP Disconnect";
MBTCPClose(SockNo);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::InputCoil1Click(TObject *Sender)
{
set_menu_enabled(0);
Label1->Caption= "Input Coil";
display_listview_title(ListView1, 0);
display_listview_fix_item(ListView1, 0);
display_listview_data(ListView1, 0);
setup_poll_unit(0);
Timer2->Enabled= true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OutputCoil1Click(TObject *Sender)
{
set_menu_enabled(1);
Label1->Caption= "Output Coil";
display_listview_title(ListView1, 1);
display_listview_fix_item(ListView1, 1);
display_listview_data(ListView1, 1);
setup_poll_unit(1);
Timer2->Enabled= true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::InputRegister1Click(TObject *Sender)
{
set_menu_enabled(2);
Label1->Caption= "Input Register";
display_listview_title(ListView1, 2);
display_listview_fix_item(ListView1, 2);
display_listview_data(ListView1, 2);
setup_poll_unit(2);
Timer2->Enabled= true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::HoldingRegister1Click(TObject *Sender)
{
set_menu_enabled(3);
Label1->Caption= "Holding Register";
display_listview_title(ListView1, 3);
display_listview_fix_item(ListView1, 3);
display_listview_data(ListView1, 3);
setup_poll_unit(3);
Timer2->Enabled= true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::InputCoilSoft1Click(TObject *Sender)
{
set_menu_enabled(4);
Label1->Caption= "Input Coil Soft";
display_listview_title(ListView1, 4);
display_listview_fix_item(ListView1, 4);
display_listview_data(ListView1, 4);
setup_poll_unit(4);
Timer2->Enabled= true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OutputCoilSoft1Click(TObject *Sender)
{
set_menu_enabled(5);
Label1->Caption= "Output Coil Soft";
display_listview_title(ListView1, 5);
display_listview_fix_item(ListView1, 5);
display_listview_data(ListView1, 5);
setup_poll_unit(5);
Timer2->Enabled= true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::InputRegisterSoft1Click(TObject *Sender)
{
set_menu_enabled(6);
Label1->Caption= "Input Register Soft";
display_listview_title(ListView1, 6);
display_listview_fix_item(ListView1, 6);
display_listview_data(ListView1, 6);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -