有谁知道MSCOMM串行通信原理,什么时候触发commevent事件?我读缓冲区数据长度为什么不对
int len;
LONG k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
bk=m_ctrlComm.GetInBufferCount();
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
b[k]=atoi(strtemp);
}
}
大家看看,当我发到好多个字符时, 我读缓冲区数据长度bk和len 都不是我实际收到的字节数,比如我收到11个,数据长度len显示为3,怎么才能得到实际的数据长度,这其中通信到底是什么原理呢?
另外,我想把接收到的数,分别存到数组b[k]中,为什么b[k]最大只能存进8个数,因为len的最大值只能是8,多于8时,又从1开始计数,怎么解决啊?
LONG k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
bk=m_ctrlComm.GetInBufferCount();
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
b[k]=atoi(strtemp);
}
}
大家看看,当我发到好多个字符时, 我读缓冲区数据长度bk和len 都不是我实际收到的字节数,比如我收到11个,数据长度len显示为3,怎么才能得到实际的数据长度,这其中通信到底是什么原理呢?
另外,我想把接收到的数,分别存到数组b[k]中,为什么b[k]最大只能存进8个数,因为len的最大值只能是8,多于8时,又从1开始计数,怎么解决啊?
...全文
相关推荐
MScomm控件使用详解(整理了好久)
**MSComm控件进行串行通信的一般步骤** 包括控件的初始化、设置串口参数、打开端口、发送和接收数据,以及错误处理。在实际编程中,应确保正确配置各项属性,并在合适的地方触发和处理OnComm事件。
vba 中引入mscomm控件
**RThreshold**: 设定数据接收触发事件的字节数,当接收缓冲区中的数据达到这个值时,会触发OnComm事件。5. **Output**: 直接写入要发送的数据。6.
VB串口通讯源代码_2.CommEvent与事件.rar
**CommEvent事件**`CommEvent`是MSComm控件的一个重要事件,它在串口状态发生变化时被触发,如数据接收完成、错误发生或通信端口状态改变等。
VFP利用MsComm32控件接收串口(COM)数据示列
PROCEDURE MsComm1_OnComm IF CommEvent = comEvInput Local data data = MsComm1.Input ?
串行通信控件MSComm
MSComm控件提供了两种处理通信的方式:1. 事件驱动方式:在这种模式下,当串行端口发生事件(如数据接收、发送完成或错误发生)时,MSComm控件会触发OnComm事件。


