📄 unit1.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 + -