📄 first.cpp
字号:
#include <iostream>
#include <string>
#include <windows.h>
#include <stdio.h>
#include <winnt.h>
using namespace std;
void main(int argc,char* argv[])
{
////////// CREATE COM HANDLE
HANDLE hComm;
hComm=CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
if(hComm!=INVALID_HANDLE_VALUE)
{
SetupComm( hComm, 4096, 4096 );
DCB dcb;
GetCommState( hComm, &dcb );
dcb.BaudRate=CBR_9600;
dcb.ByteSize=8;
dcb.StopBits=TWOSTOPBITS;
dcb.Parity=NOPARITY; //////////////////////////////////////???????
dcb.fBinary=1;
if(SetCommState(hComm, &dcb ))
printf("开启串口并初始化成功\n\n");
}
else
{
printf("创建串口失败");
};
///////////Initialcom
SetCommMask( hComm, EV_RXFLAG);
PurgeComm(hComm,PURGE_TXCLEAR);
PurgeComm(hComm,PURGE_RXCLEAR);
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF ;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0 ;
CommTimeOuts.ReadTotalTimeoutConstant = 0 ;
CommTimeOuts.WriteTotalTimeoutMultiplier =0;
CommTimeOuts.WriteTotalTimeoutConstant =5000;
SetCommTimeouts( hComm, &CommTimeOuts ) ;
///////////////////////////////////////////////////////////send message
int nLen1=7;
byte *Sendbuf = new byte[nLen1+1];
DWORD nSEND=0;
LPDWORD nSend=&nSEND;
/////////////////////读流量顺时值:
*Sendbuf=0x11;
*(Sendbuf+1)=0x30;
*(Sendbuf+2)=0x30;
*(Sendbuf+3)=0x31;
*(Sendbuf+4)=0x30;
*(Sendbuf+5)=0x31;
*(Sendbuf+6)=0x03;
*(Sendbuf+7)=0x03;
//////////////////////////////读参数
/*
*Sendbuf=0x12;
*(Sendbuf+1)=0x30;
*(Sendbuf+2)=0x30;
*(Sendbuf+3)=0x31;
*(Sendbuf+4)=0x30;
*(Sendbuf+5)=0x31;
*(Sendbuf+6)=0x1F;
*(Sendbuf+7)=0x30;
*(Sendbuf+8)=0x31;
*(Sendbuf+9)=0x03;
//*/
////////////////////////////concent of message
printf("欲发送的数据:");
int i;
for(i=0;i<=nLen1;i++)
{
printf("%c",*(Sendbuf+i));
};
printf("\n\n");
/////////////////////////////////////////////////////////////
if(!WriteFile(hComm, Sendbuf, nLen1, nSend,NULL))
{
delete[] Sendbuf;
Sendbuf = NULL;
printf("数据发送失败\n");
}
printf("实际发送的数据:\n");
int j;
for(j=0;j<nLen1;j++)
{
if(j==0)
printf("\n读瞬时值命令符:");
if(j==1)
printf("\n从机地址码:");
if(j==4)
printf("\n通道号:");
if(j==6)
printf("\n主机命令结束符:");
printf("%c",*(Sendbuf+j));
};
printf("\n\n");
delete[] Sendbuf;
Sendbuf = NULL;
printf("数据发送成功\n");
printf("期望数目:%d\t\t实际发送数目:%d\n",nLen1,*nSend);
//////////////////////////////////////////////////////////recieve message
Sleep(100);
int nLen2=50;
char cTemp[512];
/*
DWORD nRead=0;
LPDWORD nByteRead=&nRead;
*/
ULONG nByteRead;
memset(cTemp,0,sizeof(cTemp));
bool bReadSuc=ReadFile(hComm,cTemp,nLen2,&nByteRead,NULL);
if ( bReadSuc && nByteRead>0 )
{
printf("\n读入数据成功\n");
printf("期望数目:%d\t\t实际接收数目:%d\n\n",nLen2,nByteRead);
printf("读入的数据值:");
int j;
for(j=0;j<=nByteRead;j++)
{
printf("%c",cTemp[j]);
};
printf("\n\n");
}
else
{
printf("\n读入数据失败\n");
};
///////////////////////
for(i=0,j=0;i<nByteRead;i++)
{
if(cTemp[i]<'0')
{
switch(cTemp[i])
{
case 0x02 : printf("从机地址码及通道号:");break;
case 0x1f :
{
j++;
if(j==1)
printf("\n表型字:");
if(j==2)
printf("\n瞬时值:");
if(j==3)
printf("\n报警状态:");
if(j==4)
printf("\n校验和:");
break;
}
case 0x2d : printf("-");break;
case 0x2e : printf(".");break;
case 0x17 : printf("\n结束");break;
};
}
else
{
printf("%c",cTemp[i]);
};
};
printf("\n\n");
///////////////////////////
FILE *fp;
if(fp=fopen("c:\\data.txt","wt+"))
{
char data[7];
memset(data,0,sizeof(data));
for(int k=10;k<=16;k++)
{
if(cTemp[k]==0x1F)
break;
data[k-10]=cTemp[k];
printf("%c",data[k-10]);
};
fputs(data,fp);
printf("数据归档成功\n\n");
}
else
{
printf("数据存入文件保存失败");
};
fclose(fp);
/////////////////////////////////////////////////////////close com
if(hComm !=0)
{
CloseHandle(hComm);
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -