RS485通讯测试

最近遇到一个RS485通讯的,其实就是USB转485通讯,接线这里不做过多说明,按照硬件图纸接线就好.

主要讨论软件方面的处理遇到问题,:

1.串口打开模式,是同步还是异步,经过测试同步完全没有问题,异步时候数据发送(也就是writefile()会返回异常,暂时不清楚异步的原因.

2.通讯指令,严格按照说明书上的协议指令操作,比如说一般供应商提供的软件串口DEMO都是以ASC码格式发送指令的,测试都是非常正常的,比如文件头\STX,文件未\ETX,校验数据CRC计算方法怎么计算,一般说明书里都会给出计算例程,这个也不用多说,关键是指令帧格式.
指令帧
这个明确给出每个指令的格式,占用字节数,一般我们发送都是char p[31],
每一个字符占一位,很多时候发送数据没有响应,就是数据格式不正确,或转换之后占用的字节数不对,导致最终端口没有响应.
打开端口指令
CString strComCode;
strComCode.Format(_T(“COM%d”),strcom);
hCom=CreateFile(strComCode,//COM1口
GENERIC_READ|GENERIC_WRITE, //允许读和写
0, //独占方式
NULL,
OPEN_EXISTING, //打开而不是创建
0, //同步方式
NULL);
if(hCom==(HANDLE)-1)
{
AfxMessageBox(L"打开COM失败!");
CloseHandle(hCom);
return
}
SetupComm(hCom,1024,1024); //输入缓冲区和输出缓冲区的大小都是1024

COMMTIMEOUTS TimeOuts;
//设定读超时
TimeOuts.ReadIntervalTimeout=MAXDWORD;
TimeOuts.ReadTotalTimeoutMultiplier=0;
TimeOuts.ReadTotalTimeoutConstant=0;
	//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier=100;
TimeOuts.WriteTotalTimeoutConstant=500;
SetCommTimeouts(hCom,&TimeOuts); //设置超时
	DCB dcb;
GetCommState(hCom,&dcb);
dcb.BaudRate=9600; //波特率为9600
dcb.ByteSize=7; //每个字节有8位
dcb.Parity=EVENPARITY/*NOPARITY*/; //无奇偶校验位
dcb.StopBits=TWOSTOPBITS; //两个停止位
SetCommState(hCom,&dcb);

PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
写入数据
	char writeBuffer[32];
writeBuffer[0]='\x02';**//开始符号**

for (int i=0;i<len-2;i++)//需要发送的数据集合统一整理到此处理
{
writeBuffer[i+1]=keyChar;
keyChar++;
}

writeBuffer[30]=‘\x03’;
//结束符号**
char* end1=T2A(str.GetBuffer(0));
writeBuffer[31]=end1*;//校验码**

DWORD dwBytesWrite=7;
COMSTAT ComStat;
DWORD dwErrorFlags;
BOOL bWriteStat;
ClearCommError(hCom,&dwErrorFlags,&ComStat);

bWriteStat=WriteFile(hCom,writeBuffer,strlen(writeBuffer),& dwBytesWrite,NULL);
if(!bWriteStat)
{
	AfxMessageBox(L"写串口失败!");
}
  
  读取也很那简单
  
char str[256];
memset(str,'\0',256);
DWORD wCount=256;//读取的字节数
BOOL bReadStat;
bReadStat=ReadFile(hCom,str,wCount,&wCount,NULL);
if(!bReadStat)
	AfxMessageBox(L"读串口失败!");
PurgeComm(hCom, PURGE_TXABORT|
	PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);

到此,基本上我们的功能都可以实现,更具相关指令可以查询,修改其它参数.
温控器更改温度设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值