对PC某串口接收的外部数据进行处理操作的简单C程序 VC++6.0

来源:互联网 发布:捕鱼刷分软件 编辑:程序博客网 时间:2024/05/17 06:11

研二  消防项目 

#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串口通信编程实践

0 0
原创粉丝点击