研二 消防项目
#include <Windows.h>
#include <stdio.h>
#include <memory.h>
#include <string.h>
HANDLE hCom;
double main(void)
{
hCom=CreateFile(TEXT("COM3"), //COM口 设置*******************
GENERIC_READ|GENERIC_WRITE, //允许读和写
0, //独占方式
NULL,
OPEN_EXISTING, //打开而不是创建
0, //同步方式
NULL);
if(hCom==(HANDLE)-1)
{
printf("打开COM失败!\n");
return FALSE;
}
else
{
printf("COM打开成功!\n");
}
SetupComm(hCom,1024,1024); //输入缓冲区和输出缓冲区的大小都是1024
COMMTIMEOUTS TimeOuts;
//设定读超时
TimeOuts.ReadIntervalTimeout=1000;
TimeOuts.ReadTotalTimeoutMultiplier=500;
TimeOuts.ReadTotalTimeoutConstant=5000;
//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier=500;
TimeOuts.WriteTotalTimeoutConstant=2000;
SetCommTimeouts(hCom,&TimeOuts); //设置超时
DCB dcb;
GetCommState(hCom,&dcb);
dcb.BaudRate=115200; //波特率 设置************
dcb.ByteSize=8; //每个字节有8位
dcb.Parity=NOPARITY; //无奇偶校验位
dcb.StopBits=ONE5STOPBITS; //一个停止位
SetCommState(hCom,&dcb);
DWORD wCount; //读取的字节数
BOOL bReadStat;
//我的数据定义 因功能而异 自行编写*******************
int N=8,i=1;
double a[8]={0},sum=0,b,d;
double Pmax=4780;
double Pmin=3780;
double Pout;
char *w=",";
char *p;
char c[8]={0};
while(1)
{
PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); //清空缓冲区
char str[12]={0}; //设置能接收的数据的位数和类型,位数要等于一个数据包位数,否则数据包将混叠
bReadStat=ReadFile(hCom,str,12,&wCount,NULL);
if(!bReadStat)
{
printf("读串口失败!");
return FALSE;
}
else
{
//读串口成功之后对数据的操作 因功能而异 自行编写*******************
str[wCount]='\0';
printf("str=%s\n",str);
p=strstr(str,w);
p++;
strncpy(c,p,8);
b=atof(c);
printf("b=%f\n",b); //显示每次收到的数据
if (i<=N)
{
a[i-1]=b;
sum=sum+a[i-1];
//printf("稍等\n");
i++;
}
else
{
sum=sum-a[i-1-N];
a[i-1-N]=b;
sum=sum+a[i-1-N];
Pout=sum/N;
printf("Pout=%f\n",Pout); //显示8次压力均值
if (Pout>Pmax)
printf("正常\n");
else
{
if (Pout>Pmin)
printf("泄露\n");
else
printf("放水\n");
}
if (i>15)
i=9;
else
i++;
}
}
Sleep(5);
}
}
参考书籍:Visual C++_Turbo C串口通信编程实践