?? 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 + -