📄 aiao_dlg.~cpp
字号:
//---------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include "main.h"
#include "AIAO_Dlg.h"
#include "WinCONSYS.h" // common variable define
#include "STD_SUB.h"
//---------------------------------------------------------------------
#pragma resource "*.dfm"
TAIAODlg *AIAODlg;
//---------------------------------------------------------------------
__fastcall TAIAODlg::TAIAODlg(TComponent* AOwner)
: TForm(AOwner)
{
}
//---------------------------------------------------------------------
int __fastcall TAIAODlg::Execute(int type, int idx)
{
int i, rc, addr_1;
char buff[80];
m_type= type;
m_idx= idx;
ExitFlag= 0;
if(m_type==2)
{
sprintf(buff, "Input Register, Modbus Address: %d", AI_BARE_PTR*2+m_idx*2+300001);
Label1->Caption= buff;
Edit1->Visible= true;
Edit2->Visible= true;
Edit3->Visible= true;
Edit4->Visible= true;
Edit5->Visible= true;
Label2->Visible= true;
Label3->Visible= true;
Label4->Visible= true;
Label5->Visible= true;
Label6->Visible= true;
Label14->Visible= true;
sprintf(buff, "%10g", Reg.AI_RH[m_idx]);
Edit1->Text= buff;
sprintf(buff, "%10g", Reg.AI_RL[m_idx]);
Edit2->Text= buff;
sprintf(buff, "%10g", Reg.AI_BH[m_idx]);
Edit3->Text= buff;
sprintf(buff, "%10g", Reg.AI_BL[m_idx]);
Edit4->Text= buff;
sprintf(buff, "%5.3f", Reg.AI_FL[m_idx]);
Edit5->Text= buff;
sprintf(buff, "%10g", Reg.AI_ENG[m_idx]);
Edit6->Text= buff;
sprintf(buff, "%10g", Reg.AI_HH[m_idx]);
Edit7->Text= buff;
sprintf(buff, "%10g", Reg.AI_H[m_idx]);
Edit8->Text= buff;
sprintf(buff, "%10g", Reg.AI_L[m_idx]);
Edit9->Text= buff;
sprintf(buff, "%10g", Reg.AI_LL[m_idx]);
Edit10->Text= buff;
sprintf(buff, "%5.3f", Reg.AI_DEAD[m_idx]);
Edit11->Text= buff;
sprintf(buff, "%10g", Reg.AI_INIT[m_idx]);
Edit12->Text= buff;
}
else if(m_type==3)
{
sprintf(buff, "Holding Register, Modbus Address: %d", AO_BARE_PTR*2+m_idx*2+400001);
Label1->Caption= buff;
Edit1->Visible= true;
Edit2->Visible= true;
Edit3->Visible= true;
Edit4->Visible= true;
Edit5->Visible= true;
Label2->Visible= true;
Label3->Visible= true;
Label4->Visible= true;
Label5->Visible= true;
Label6->Visible= true;
Label14->Visible= true;
sprintf(buff, "%10g", Reg.AO_RH[m_idx]);
Edit1->Text= buff;
sprintf(buff, "%10g", Reg.AO_RL[m_idx]);
Edit2->Text= buff;
sprintf(buff, "%10g", Reg.AO_BH[m_idx]);
Edit3->Text= buff;
sprintf(buff, "%10g", Reg.AO_BL[m_idx]);
Edit4->Text= buff;
sprintf(buff, "%5.3f", Reg.AO_FL[m_idx]);
Edit5->Text= buff;
sprintf(buff, "%10g", Reg.AO_ENG[m_idx]);
Edit6->Text= buff;
sprintf(buff, "%10g", Reg.AO_HH[m_idx]);
Edit7->Text= buff;
sprintf(buff, "%10g", Reg.AO_H[m_idx]);
Edit8->Text= buff;
sprintf(buff, "%10g", Reg.AO_L[m_idx]);
Edit9->Text= buff;
sprintf(buff, "%10g", Reg.AO_LL[m_idx]);
Edit10->Text= buff;
sprintf(buff, "%5.3f", Reg.AO_DEAD[m_idx]);
Edit11->Text= buff;
sprintf(buff, "%10g", Reg.AO_INIT[m_idx]);
Edit12->Text= buff;
}
else if(m_type==6)
{
addr_1= m_idx + ED_MAX;
sprintf(buff, "Input Register Soft, Modbus Address: %d", AI_SOFT_PTR*2+m_idx*2+300001);
Label1->Caption= buff;
Edit1->Visible= false;
Edit2->Visible= false;
Edit3->Visible= false;
Edit4->Visible= false;
Edit5->Visible= false;
Label2->Visible= false;
Label3->Visible= false;
Label4->Visible= false;
Label5->Visible= false;
Label6->Visible= false;
Label14->Visible= false;
Edit1->Text= "0";
Edit2->Text= "0";
Edit3->Text= "0";
Edit4->Text= "0";
Edit5->Text= "0";
sprintf(buff, "%10g", Reg.AI_SOFT[m_idx]);
Edit6->Text= buff;
sprintf(buff, "%10g", Reg.AI_HH[addr_1]);
Edit7->Text= buff;
sprintf(buff, "%10g", Reg.AI_H[addr_1]);
Edit8->Text= buff;
sprintf(buff, "%10g", Reg.AI_L[addr_1]);
Edit9->Text= buff;
sprintf(buff, "%10g", Reg.AI_LL[addr_1]);
Edit10->Text= buff;
sprintf(buff, "%5.3f", Reg.AI_DEAD[addr_1]);
Edit11->Text= buff;
sprintf(buff, "%10g", Reg.AI_INIT[addr_1]);
Edit12->Text= buff;
}
else if(m_type==7)
{
addr_1= m_idx + ED_MAX;
sprintf(buff, "Holding Register Soft, Modbus Address: %d", AO_SOFT_PTR*2+m_idx*2+400001);
Label1->Caption= buff;
Edit1->Visible= false;
Edit2->Visible= false;
Edit3->Visible= false;
Edit4->Visible= false;
Edit5->Visible= false;
Label2->Visible= false;
Label3->Visible= false;
Label4->Visible= false;
Label5->Visible= false;
Label6->Visible= false;
Label14->Visible= false;
Edit1->Text= "0";
Edit2->Text= "0";
Edit3->Text= "0";
Edit4->Text= "0";
Edit5->Text= "0";
sprintf(buff, "%10g", Reg.AO_SOFT[m_idx]);
Edit6->Text= buff;
sprintf(buff, "%10g", Reg.AO_HH[addr_1]);
Edit7->Text= buff;
sprintf(buff, "%10g", Reg.AO_H[addr_1]);
Edit8->Text= buff;
sprintf(buff, "%10g", Reg.AO_L[addr_1]);
Edit9->Text= buff;
sprintf(buff, "%10g", Reg.AO_LL[addr_1]);
Edit10->Text= buff;
sprintf(buff, "%5.3f", Reg.AO_DEAD[addr_1]);
Edit11->Text= buff;
sprintf(buff, "%10g", Reg.AO_INIT[addr_1]);
Edit12->Text= buff;
}
rc= ShowModal(); // display Form
if(rc==mrOk)
{
return(0);
}
return(-1);
}
//---------------------------------------------------------------------------
void __fastcall TAIAODlg::FormClose(TObject *Sender, TCloseAction &Action)
{
if(ExitFlag == 1) Action= caNone;
ExitFlag= 0;
}
//---------------------------------------------------------------------
void __fastcall TAIAODlg::OKBtnClick(TObject *Sender)
{
int i, rc, addr[12], addr_1;
float new_val[12], fl[12];
short reg[2];
char buff[80];
unsigned char *cptr_1, *cptr_2;
if(check_data()!=0)
{ ExitFlag=1; return; }
// get current value
new_val[0]= atof(Edit1->Text.c_str());
new_val[1]= atof(Edit2->Text.c_str());
new_val[2]= atof(Edit3->Text.c_str());
new_val[3]= atof(Edit4->Text.c_str());
new_val[4]= atof(Edit5->Text.c_str());
new_val[5]= atof(Edit6->Text.c_str());
new_val[6]= atof(Edit7->Text.c_str());
new_val[7]= atof(Edit8->Text.c_str());
new_val[8]= atof(Edit9->Text.c_str());
new_val[9]= atof(Edit10->Text.c_str());
new_val[10]= atof(Edit11->Text.c_str());
new_val[11]= atof(Edit12->Text.c_str());
if(m_type==2)
{
fl[0]= Reg.AI_RH[m_idx];
fl[1]= Reg.AI_RL[m_idx];
fl[2]= Reg.AI_BH[m_idx];
fl[3]= Reg.AI_BL[m_idx];
fl[4]= Reg.AI_FL[m_idx];
fl[5]= Reg.AI_BARE[m_idx];
fl[6]= Reg.AI_HH[m_idx];
fl[7]= Reg.AI_H[m_idx];
fl[8]= Reg.AI_L[m_idx];
fl[9]= Reg.AI_LL[m_idx];
fl[10]= Reg.AI_DEAD[m_idx];
fl[11]= Reg.AI_INIT[m_idx];
addr[0]= AI_RH_PTR*2+m_idx*2+1;
addr[1]= AI_RL_PTR*2+m_idx*2+1;
addr[2]= AI_BH_PTR*2+m_idx*2+1;
addr[3]= AI_BL_PTR*2+m_idx*2+1;
addr[4]= AI_FL_PTR*2+m_idx*2+1;
addr[5]= AI_BARE_PTR*2+m_idx*2+1;
addr[6]= AI_HH_PTR*2+m_idx*2+1;
addr[7]= AI_H_PTR*2+m_idx*2+1;
addr[8]= AI_L_PTR*2+m_idx*2+1;
addr[9]= AI_LL_PTR*2+m_idx*2+1;
addr[10]= AI_DEAD_PTR*2+m_idx*2+1;
addr[11]= AI_INIT_PTR*2+m_idx*2+1;
new_val[5]= fl[5]; // becasue it AI data
}
else if(m_type==3)
{
fl[0]= Reg.AO_RH[m_idx];
fl[1]= Reg.AO_RL[m_idx];
fl[2]= Reg.AO_BH[m_idx];
fl[3]= Reg.AO_BL[m_idx];
fl[4]= Reg.AO_FL[m_idx];
fl[5]= Reg.AO_BARE[m_idx];
fl[6]= Reg.AO_HH[m_idx];
fl[7]= Reg.AO_H[m_idx];
fl[8]= Reg.AO_L[m_idx];
fl[9]= Reg.AO_LL[m_idx];
fl[10]= Reg.AO_DEAD[m_idx];
fl[11]= Reg.AO_INIT[m_idx];
addr[0]= AO_RH_PTR*2+m_idx*2+1;
addr[1]= AO_RL_PTR*2+m_idx*2+1;
addr[2]= AO_BH_PTR*2+m_idx*2+1;
addr[3]= AO_BL_PTR*2+m_idx*2+1;
addr[4]= AO_FL_PTR*2+m_idx*2+1;
addr[5]= AO_BARE_PTR*2+m_idx*2+1;
addr[6]= AO_HH_PTR*2+m_idx*2+1;
addr[7]= AO_H_PTR*2+m_idx*2+1;
addr[8]= AO_L_PTR*2+m_idx*2+1;
addr[9]= AO_LL_PTR*2+m_idx*2+1;
addr[10]= AO_DEAD_PTR*2+m_idx*2+1;
addr[11]= AO_INIT_PTR*2+m_idx*2+1;
}
else if(m_type==6)
{
addr_1= m_idx + ED_MAX;
fl[0]= new_val[0]= 0.0;
fl[1]= new_val[1]= 0.0;
fl[2]= new_val[2]= 0.0;
fl[3]= new_val[3]= 0.0;
fl[4]= new_val[4]= 0.0;
fl[5]= new_val[5]= 0.0;
fl[6]= Reg.AI_HH[addr_1];
fl[7]= Reg.AI_H[addr_1];
fl[8]= Reg.AI_L[addr_1];
fl[9]= Reg.AI_LL[addr_1];
fl[10]= Reg.AI_DEAD[addr_1];
fl[11]= Reg.AI_INIT[addr_1];
addr[0]= 0;
addr[1]= 0;
addr[2]= 0;
addr[3]= 0;
addr[4]= 0;
addr[5]= 0;
addr[6]= AI_HH_PTR*2+ED_MAX*2+m_idx*2+1;
addr[7]= AI_H_PTR*2+ED_MAX*2+m_idx*2+1;
addr[8]= AI_L_PTR*2+ED_MAX*2+m_idx*2+1;
addr[9]= AI_LL_PTR*2+ED_MAX*2+m_idx*2+1;
addr[10]= AI_DEAD_PTR*2+ED_MAX*2+m_idx*2+1;
addr[11]= AI_INIT_PTR*2+ED_MAX*2+m_idx*2+1;
}
else if(m_type==7)
{
addr_1= m_idx + ED_MAX;
fl[0]= new_val[0]= 0.0;
fl[1]= new_val[1]= 0.0;
fl[2]= new_val[2]= 0.0;
fl[3]= new_val[3]= 0.0;
fl[4]= new_val[4]= 0.0;
fl[5]= Reg.AO_SOFT[m_idx];
fl[6]= Reg.AO_HH[addr_1];
fl[7]= Reg.AO_H[addr_1];
fl[8]= Reg.AO_L[addr_1];
fl[9]= Reg.AO_LL[addr_1];
fl[10]= Reg.AO_DEAD[addr_1];
fl[11]= Reg.AO_INIT[addr_1];
addr[0]= 0;
addr[1]= 0;
addr[2]= 0;
addr[3]= 0;
addr[4]= 0;
addr[5]= AO_SOFT_PTR*2+m_idx*2+1;
addr[6]= AO_HH_PTR*2+ED_MAX*2+m_idx*2+1;
addr[7]= AO_H_PTR*2+ED_MAX*2+m_idx*2+1;
addr[8]= AO_L_PTR*2+ED_MAX*2+m_idx*2+1;
addr[9]= AO_LL_PTR*2+ED_MAX*2+m_idx*2+1;
addr[10]= AO_DEAD_PTR*2+ED_MAX*2+m_idx*2+1;
addr[11]= AO_INIT_PTR*2+ED_MAX*2+m_idx*2+1;
}
// send modbus command, when value is changed
cptr_1= (unsigned char *)reg;
for(i=0; i<12; i++)
{
if(new_val[i]==fl[i]) continue; // data is not changed
cptr_2= (unsigned char *)&new_val[i];
memcpy(cptr_1, cptr_2, 4);
rc= MBTCP_W_Multi_Registers(SockNo, 1, addr[i], 2, reg);
if(rc==MB_RTC_OK)
{
sprintf(buff, "Set Analog value Address=%06d, value=%10g OK....", addr[i]+400000, new_val[i]);
}
else
sprintf(buff, "Set Analog value Address=%06d error rtc=%d !!!!!", addr[i]+400000, rc);
Form1->StatusBar1->Panels->Items[2]->Text= buff;
}
}
//---------------------------------------------------------------------------
void __fastcall TAIAODlg::Edit5Exit(TObject *Sender)
{
float val;
val= atof(Edit5->Text.c_str());
if(check_Filter_value(val)!=0)
{
Edit5->SetFocus();
}
}
//---------------------------------------------------------------------------
void __fastcall TAIAODlg::Edit11Exit(TObject *Sender)
{
float val;
val= atof(Edit11->Text.c_str());
if(check_Dead_value(val)!=0)
{
Edit11->SetFocus();
}
}
//---------------------------------------------------------------------------
int __fastcall TAIAODlg::check_data(void)
{
float val, rh, rl, bh, bl;
float alm_hh, alm_h, alm_l, alm_ll;
int rc;
rc= 0;
val= atof(Edit5->Text.c_str());
if(check_Filter_value(val)!=0)
{
Edit5->SetFocus();
rc=-1;
}
val= atof(Edit11->Text.c_str());
if(check_Dead_value(val)!=0)
{
Edit11->SetFocus();
rc= -1;
}
rh= atof(Edit1->Text.c_str());
rl= atof(Edit2->Text.c_str());
bh= atof(Edit3->Text.c_str());
bl= atof(Edit4->Text.c_str());
if(rl >rh)
{
MessageBox(NULL, "Range Low can't large than Range High", WinCON8000, MB_OK);
rc= -1;
}
if(bl >bh)
{
MessageBox(NULL, "Bare Low can't large than Bare High", WinCON8000, MB_OK);
rc= -1;
}
alm_hh= atof(Edit7->Text.c_str());
alm_h= atof(Edit8->Text.c_str());
alm_l= atof(Edit9->Text.c_str());
alm_ll= atof(Edit10->Text.c_str());
if(alm_h >alm_hh)
{
MessageBox(NULL, "Alarm High Limit can't large than Alarm High High Limit", WinCON8000, MB_OK);
rc= -1;
}
if(alm_l >alm_h)
{
MessageBox(NULL, "Alarm Low Limit can't large than Alarm High Limit", WinCON8000, MB_OK);
rc= -1;
}
if(alm_ll >alm_l)
{
MessageBox(NULL, "Alarm Low Low Limit Low can't large than Alarm Low Limit", WinCON8000, MB_OK);
rc= -1;
}
return(rc);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -