关于MSComm控件的串口数据接收问题
为何我使用MSComm控件接收串口数据时,接收的数据分两部份显示,
如:按的数据为:SN+00987098
则显示的数据为:第一次显示:SN+00987
第二次显示:098
我的MSComm中的Setting值为:9600,n,8,1
我不知是不是其中的显示位“8”有设置有问题,但当我改为9600,n,9,1时,则显示出错,也就最大只能为8,
我的设置哪儿有问题?
问题点数:10、回复次数:7Top
1 楼ygd(人生短暂,及时行乐。准备成熟中)回复于 2001-10-29 17:54:26 得分 1
用同步通信试试看Top
2 楼DoItFreely(Freely)回复于 2001-10-29 17:57:03 得分 1
没有任何错误,异步读写常被分成几段,所以,*不好玩*!Top
3 楼zhangyan_qd(doggyzone)回复于 2001-10-29 20:29:25 得分 1
和设置没有关系,把源程序多贴一点上来看看。Top
4 楼windgolly(超级菜鸟系列篇)回复于 2001-10-30 10:58:57 得分 0
不好意思,我用的是BCB,所以以下是BCB代码:
A:我直接将一个TMSComm控件“拉”到窗口中,属性值全部使用默认值。如:
CommPort = 1;
DTREnable = true;
EOFEnable = false;
Handshaking = 0;
InBufferSize = 0;
InputLen = 0;
InputMode = 0;
OutBufferSize = 512;
ParityReplace = ?;
RThreshold = 0;
RTSEnable = false;
Settings = 9600,n,8,1;
SThreshold = 0;
B:再在TMSComm控件的OnComm事件中编写如下代码:
System::OleVariant RxBuff;//定义接收缓冲。
AnsiString INDATA;
RxBuff=Comm1->Input;//读取数据
INDATA=Trim(VarToStr((Variant &)RxBuff));//->字符串
Panel1->Caption=INDATA;//最后将读取的数据显示在窗口的Panel1中。Top
5 楼SFirefox(火狐狸)回复于 2001-11-02 09:07:51 得分 4
读取数据时不可能一次性全部读入,不然做串口通讯时,也不会用到什么“包长”,“起始位”,“终止位”的。8是通讯时的数据位,范围5-8。以上问题最简单的解决方法是:接受数据前,根据接收数据的长短给个延时。要做得更好,你最好看点串口的书。Top
6 楼Hoarfrost(霜)回复于 2001-11-08 13:01:04 得分 2
同意UP,你可以在读数据之前Sleep(ms)一下,这样可以保证数据完整性!Top
7 楼lhuaf_26(lhuaf_26)回复于 2001-11-08 21:34:45 得分 1
是否是在串口的初始化有问题,
用这个不妨试一下
if(!star)
{
MSComm1->PortOpen=true;
}
MSComm1->Settings="9600,n,8,1";
Top
相关问题
- MScomm串口控件问题?
- 如何以十进制(十六进制也可)数接收串口的数据。我使用MSCOMM控件。
- 用MSCOMM控件能向串口发送和接收十进制(十六进制)数吗?
- 使用MSComm控件来串口通讯,关于接收多字节时候会截断的问题
- 为什么mscomm控件的oncomm事件无法触发?我的串口无法接收到数据.
- 为什么mscomm控件的oncomm事件无法触发?我的串口无法接收到数据.
- 使用MSCOMM控件,这段 串口接收数据的代码 如何写? 可能设计到延时.
- 利用mscomm控件接收串口数据,接受的是‘?’怎么读出卡号(形如S010002597416E)?
- 关于串口通讯控件(Mscomm)
- mscomm控件读写串口的问题




