对PC某串口接收的外部数据进行处理操作的简单C程序 VC++6.0
2016-10-17 16:34
351 查看
研二 消防项目
#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串口通信编程实践
#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串口通信编程实践
相关文章推荐
- 如何在Java程序中访问mysql数据库中的数据并进行简单的操作
- 上位机接收数据,并进行处理的一段程序
- 如何在Java程序中访问mysql数据库中的数据并进行简单的操作
- 一个简单的串口接收数据程序
- verilog串口接收多个数据进行处理的实现方法
- c#中,确保数据接收完整的 串口处理程序
- mfc串口通过串口接收到的数据进行分离处理
- 利用AJAX实现简单的用户登录程序(处理服务端返回的文本数据)
- 串口通信中接收数据时延迟处理与缓存处理的解决方案(C#)
- BCB中使用API函数写简单串口程序(定时器接收)
- 一个汇编写得GPS串口接收数据程序
- 一个简单的socket服务端和客户端程序:客户端发送数据给服务端,服务端接收到数据后再给客户端发送数据
- C#用串口接收事件接不全数据的处理
- 一个简单的接收网络数据程序
- Entity Framework 程序设计入门二 对数据进行CRUD操作和查询
- 6416与aic23进行语言数据采集和处理的程序beta版
- 一个对大小固定的内存数据进行操作的简单类
- 串口程序接收数据一段时间后出现乱码
- 解决使用MSComm控件进行串口数据的接收数据不完整
- 利用游标进行简单的数据先进先出操作