⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aiao_dlg.~cpp

📁 《WinCE.NET嵌入式工业用控制器及自动控制系统设计》的源代码
💻 ~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 + -