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

📄 调用api.cpp

📁 大延东辉系列仪表串行通讯协议为多种仪表所兼容,此代码包是测试例程,稍加修改即可使用到具体数据采集应用中去.
💻 CPP
字号:
void TCommtestApp::CmCom1() //串行口例程调用WINDOW的API函数
{
HWND HWindows;
HDC hdc;
static int send_data[6]={0xaa,1,0xa0,0,0x4b}; //查询主机地址为1,读数据
char *ptr; unsigned long lnunber=0;
char s[1200],tmp[1200],get_data[1000],get_data2[1000];
HANDLE comdev; int dalay_i;
BOOL Error,Er; DWORD nRc;
int i,flag=0; static short x,y;
DWORD lpErrors; COMSTAT lpStat; DCB dcb;
COMMTIMEOUTS tomeout;
hdc==GetDC(HWindows);
SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
//打开串口
comdev=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,
0,NULL);
if(comdev==INVALID_HANDLE_VALUE)
{MessageBox("open COM1 3F8 fail","error");}
HBRUSH hWhiteBrush=CreateSolidBrush(RGB(255,255,255));
SelsctObject(hdc,hWhiteBrush);
TRect rect(20,43,740,540);
FillRect(hdc,&rect,hWhiteBrush);
DelectObject(hWhiteBrush);
//串口缓冲区为1024个字节
Error=SetupComm(comdev,1024,1024);
if(!Error){MessageBox("SetupComm Error!","error");}
GetCommState(comdev,&dcb);
dcb.BaudRate=9600; dcb.ByteSize=8;
dcb.Parity=NOPARITY; dcb.StopBits=ONESTOPBIT;
SetCommState(comdev,&dcb);
x=20;y=50;
TextOut(hdc,x,y,s,
wsprintf(s,"COM1波特率为%d,字长%d,校验位%dd,停止位%d",dcb.BaudRate,
dcb.ByteSize,dcb.Parity+1,dcb.StopBits+1));
timeout.WriteTotalTimeoutMultiplier=200;
Er=SetCommTimeouts(comdev,&timeout);
//通过串口向下位机发送数据,查询地址为1的下位机的数据
for(i=0;i<6;i++){
Error=WriteFile(comdev,&send_data[i],1,&lnumber,NULL);
}
Er=ClearComError(comdev,&lpErrors,&lpStat);
nRc=lpStat.cbOutQue;
TextOut(hdc,400,100,s,
wsprintf(s,"cbOutQue=%d",nRc));
for(i=0;i<6;i++)
{
x=20;y=y+20;
TextOut(hdc,x,y,s,
wsprintf(s,"send_data[%d]=%x Error=%d",i,send_data[i],Error));
}
for(i=0;i<=1000;i++)Get_data[i]=0x00000000;
timeout.ReadIntervalTimeout=200; //设置读串行口的时间
timeout.ReadTotalTimeoutConstant=300;
Er=SetCommTimeouts(comdev,&timeout);
ptr=get_data; //存放从串行口读到的数据缓冲区
Error=ReadFile(comdev,ptr,100,&lnumber,NULL); //读串口
if(!Error){
MessageBox("Read failure","error");
}
if(lnumber!=0) //有从串行口读到数据,实际个数为lnimber
{
for(i=0;i<lnumber;i++)
{
y=y+20;
if(y>500){y=200;x=x+100;}
TextOut(hdc,x,y,s,
wsprintf(s,"data[%d]=%x",i-3,get_data[i]&0x000000ff));
}
TextOut(hdc,200,520,s,
wsprintf(s," 通讯正常 "))
}
else
{
HBRUSH hWhiteBrush=CreateSolidBrush(RGB(255,255,255));
SelectObject(hdc,hWhiteBrush);
FillRect rect(20,43,740,540);
DeldctObject(hWhiteBrush);
TextOut(hdc,200,250,s,
wsprintf(s,"下位机未上电或者通讯线路故障"));
}
CloseHandle(comdev); //关闭串行口
ReleaseDC(HWindows,hdc);
}

⌨️ 快捷键说明

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