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

📄 unit1.cpp

📁 DV8080—— ——监控报警主机测试源程序
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "pcomm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
int m_Port;
int addr;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
 if (SpeedButton1->Down)
 {
     m_Port = CSpinEdit1->Value;
     addr = CSpinEdit2->Value;
     sio_open(m_Port);//打开串口
     sio_ioctl(m_Port,B9600,P_NONE|BIT_8|STOP_1);
     Alarm_Dog(m_Port,true);
 }else{
     Alarm_Dog(m_Port,false);
     sio_close(m_Port);
 }
}
//---------------------------------------------------------------------------
bool __fastcall TForm1::Alarm_Dog(int port,bool State)//true 启动看门狗功能   //false关闭
{
 unsigned char m_Tx[6];
 if (State) //启动看门狗功能
 {
     m_Tx[0] = 0XE1;
     m_Tx[1] = 0x55;
     m_Tx[2] = 0Xaa;
     m_Tx[3] = 0X30;
     m_Tx[4] = 0Xff;
     m_Tx[5] = (m_Tx[0]+m_Tx[1]+m_Tx[2]+m_Tx[3]+m_Tx[4]);
     sio_write(port,m_Tx,6);
 }else{//关闭
     m_Tx[0] = 0XE1;
     m_Tx[1] = 0x55;
     m_Tx[2] = 0Xaa;
     m_Tx[3] = 0X31;
     m_Tx[4] = 0Xff;
     m_Tx[5] = (m_Tx[0]+m_Tx[1]+m_Tx[2]+m_Tx[3]+m_Tx[4]);
     sio_write(port,m_Tx,6);
 }

}
bool __fastcall TForm1::Alarm_In(int port,int address,int (* m_AIn)[16],int (* m_AOut)[16])
{
 //报警状态查询
 unsigned char m_Tx[6];
 unsigned char m_Rx[6];
  m_Tx[0] = 0XE0;
  m_Tx[1] = address;
  m_Tx[2] = 0X3F;
  m_Tx[3] = 0X0;
  m_Tx[4] = 0X0;
  m_Tx[5] = (m_Tx[0]+m_Tx[1]+m_Tx[2]+m_Tx[3]+m_Tx[4]);
  sio_write(port,m_Tx,6);

  sio_read(port,m_Rx,6);
  if (m_Rx[0]!=0xf0 && address != int(m_Rx[1]))  //接收数据错误
     return false;
  if (m_Rx[2]==0xd0)  //报警状态回送
  {
      (*m_AIn)[0] = m_Rx[3]&1;  //输入1
      (*m_AIn)[1] = (m_Rx[3]&2)>>1; //输入2
      (*m_AIn)[2] = (m_Rx[3]&4)>>2; //输入3
      (*m_AIn)[3] = (m_Rx[3]&8)>>3; //输入4
      (*m_AIn)[4] = (m_Rx[3]&16)>>4; //输入5
      (*m_AIn)[5] = (m_Rx[3]&32)>>5; //输入6
      (*m_AIn)[6] = (m_Rx[3]&64)>>6; //输入7
      (*m_AIn)[7] = (m_Rx[3]&128)>>7; //输入8

      (*m_AIn)[8] = m_Rx[4]&1;  //输入9
      (*m_AIn)[9] = (m_Rx[4]&2)>>1; //输入10
      (*m_AIn)[10] = (m_Rx[4]&4)>>2; //输入11
      (*m_AIn)[11] = (m_Rx[4]&8)>>3; //输入12
      (*m_AIn)[12] = (m_Rx[4]&16)>>4; //输入13
      (*m_AIn)[13] = (m_Rx[4]&32)>>5; //输入14
      (*m_AIn)[14] = (m_Rx[4]&64)>>6; //输入15
      (*m_AIn)[15] = (m_Rx[4]&128)>>7; //输入16

  }

  //开关状态查询
  m_Tx[0] = 0XE0;
  m_Tx[1] = address;
  m_Tx[2] = 0X3B;
  m_Tx[3] = 0X0;
  m_Tx[4] = 0X0;
  m_Tx[5] = (m_Tx[0]+m_Tx[1]+m_Tx[2]+m_Tx[3]+m_Tx[4]);
  sio_write(port,m_Tx,6);

  sio_read(port,m_Rx,6);
  if (m_Rx[0]!=0xf0 && address!= int(m_Rx[1]))  //接收数据错误
     return false;
  if (m_Rx[2]==0xd2)  //开关状态回送
  {
      (*m_AOut)[0] = m_Rx[3]&1;  //输出1
      (*m_AOut)[1] = (m_Rx[3]&2)>>1; //输出2
      (*m_AOut)[2] = (m_Rx[3]&4)>>2; //输出3
      (*m_AOut)[3] = (m_Rx[3]&8)>>3; //输出4
      (*m_AOut)[4] = (m_Rx[3]&16)>>4; //输出5
      (*m_AOut)[5] = (m_Rx[3]&32)>>5; //输出6
      (*m_AOut)[6] = (m_Rx[3]&64)>>6; //输出7
      (*m_AOut)[7] = (m_Rx[3]&128)>>7; //输出8

      (*m_AOut)[8] = m_Rx[4]&1;  //输出9
      (*m_AOut)[9] = (m_Rx[4]&2)>>1; //输出10
      (*m_AOut)[10] = (m_Rx[4]&4)>>2; //输出11
      (*m_AOut)[11] = (m_Rx[4]&8)>>3; //输出12
      (*m_AOut)[12] = (m_Rx[4]&16)>>4; //输出13
      (*m_AOut)[13] = (m_Rx[4]&32)>>5; //输出14
      (*m_AOut)[14] = (m_Rx[4]&64)>>6; //输出15
      (*m_AOut)[15] = (m_Rx[4]&128)>>7; //输出16

  }
  return true;
}
//---------------------------------------------------------------------------
bool __fastcall TForm1::Alarm_Out(int port,int address,int BoToB7,int B8ToB15)
{

 unsigned char m_Tx[6];
 unsigned char m_Rx0[6];

 int RxAddr;
 int m_AOut[16]; //输出 开/关
  m_Tx[0] = 0XE0;
  m_Tx[1] = address;
  m_Tx[2] = 0X3D;
  m_Tx[3] = BoToB7;
  m_Tx[4] = B8ToB15;
  m_Tx[5] = (m_Tx[0]+m_Tx[1]+m_Tx[2]+m_Tx[3]+m_Tx[4]);
  sio_write(port,m_Tx,6);
  sio_read(port,m_Rx0,6);
  //开关状态查询
  if (m_Rx0[0]!=0xf0)  //接收数据错误
     return false;
  if (m_Rx0[2]==0xd2)  //开关状态回送
  {
      RxAddr = m_Rx0[1];
      m_AOut[0] = m_Rx0[3]&1;  //输出1
      m_AOut[1] = (m_Rx0[3]&2)>>1; //输出2
      m_AOut[2] = (m_Rx0[3]&4)>>2; //输出3
      m_AOut[3] = (m_Rx0[3]&8)>>3; //输出4
      m_AOut[4] = (m_Rx0[3]&16)>>4; //输出5
      m_AOut[5] = (m_Rx0[3]&32)>>5; //输出6
      m_AOut[6] = (m_Rx0[3]&64)>>6; //输出7
      m_AOut[7] = (m_Rx0[3]&128)>>7; //输出8

      m_AOut[8] = m_Rx0[4]&1;  //输出9
      m_AOut[9] = (m_Rx0[4]&2)>>1; //输出10
      m_AOut[10] = (m_Rx0[4]&4)>>2; //输出11
      m_AOut[11] = (m_Rx0[4]&8)>>3; //输出12
      m_AOut[12] = (m_Rx0[4]&16)>>4; //输出13
      m_AOut[13] = (m_Rx0[4]&32)>>5; //输出14
      m_AOut[14] = (m_Rx0[4]&64)>>6; //输出15
      m_AOut[15] = (m_Rx0[4]&128)>>7; //输出16
  }
  if (RxAddr==address && BoToB7==int(m_Rx0[3]) && B8ToB15==int(m_Rx0[4]))
      return true;
   else
      return false;

}
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
 int v[16];
 int value1To8;
 int value9To16;
 for (int i=1;i<=8;i++)
 {
    v[i-1]= int (dynamic_cast<TCheckBox *>(FindComponent("CheckBox"+AnsiString(i)))->Checked );
    v[i+7]= int (dynamic_cast<TCheckBox *>(FindComponent("CheckBox"+AnsiString(i+8)))->Checked );

 }

 value1To8 = v[0] | (v[1]<<1)|(v[2]<<2)|(v[3]<<3)|(v[4]<<4)|(v[5]<<5)|(v[6]<<6)|(v[7]<<7) ;
 value9To16 = v[8] | (v[9]<<1)|(v[10]<<2)|(v[11]<<3)|(v[12]<<4)|(v[13]<<5)|(v[14]<<6)|(v[15]<<7) ;

 Alarm_Out( m_Port,addr,value1To8 ,value9To16);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{  //检测报警
 int AIn[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
 int AOut[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
 Alarm_In(m_Port,addr,&AIn,&AOut);

 for (int i=1;i<=16;i++)
 {
    if (AIn[i-1])
    {   //报警
        dynamic_cast<TShape *>(FindComponent("Shape"+AnsiString(i)))->Brush->Color = clRed;
    }else{ //不报警
        dynamic_cast<TShape *>(FindComponent("Shape"+AnsiString(i)))->Brush->Color = clLime;

    }
 }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -