使用MsComm控件接收二进制文件,长度总是为0

hxbin1979 2007-10-05 12:01:00
以前用MsComm都是文本模式,数据的发送接收正常。现在用二进制模式通讯发送正常,但接收不到数据,串口自发自收都不行
串口属性设置:
axMSComm1.RThreshold = 1;
axMSComm1.SThreshold=0;
axMSComm1.Settings = "2400, E, 8, 1";
axMSComm1.Handshaking = MSCommLib.HandshakeConstants.comNone;
axMSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeBinary;
axMSComm1.InputLen = 0;
axMSComm1.NullDiscard = false;

接收代码:
private void axMSComm1_OnComm(object sender, System.EventArgs e)
{
if (axMSComm1.CommEvent == 2)
{
byte[] buff;
buff = (byte[])axMSComm1.Input;
}
}
在buff处设置了断点,事件能触发说明收到数据,但是buff的长度始终为0,没有数据

后来我每次发送一个字节,并将axMSComm1.RThreshold设为3,只有发送到第3个字节时串口接收事件才触发,这样就确定串口已经接收到数据,但是buff = (byte[])axMSComm1.Input;这句代码总是取不到数据。
实在是没头绪了,请高手指点一下!!!
...全文
97 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxbin1979 2007-10-11
  • 打赏
  • 举报
回复
问题解决,不能在获取语句设置断点,否则单步取不到数据
lextm 2007-10-07
  • 打赏
  • 举报
回复
.NET 2.0用SerialPort封装了MsComm,所以没必要直接用MsComm了
chensike 2007-10-06
  • 打赏
  • 举报
回复
现在比较流行SerialPort
hxbin1979 2007-10-05
  • 打赏
  • 举报
回复
MsComm是微软的一个串口通讯控件
panzi667 2007-10-05
  • 打赏
  • 举报
回复
MsComm是什么东东,关注一下,好像是短信的,对不?
在工程实践中经常需要实现上下位机间的串口通信,为了编程的方便性我们通常采用字符方式进行数据传输,由于需要数据转换以及转换后的数据长度增加,数据传输速度不够理想,为了提高系统实时性在某些特殊场合更需要直接采用二进制进行数据传输。Delphi6.0是一种面向对象的可视化的快速应用开发(RAD)工具,它既具有C++语言的强大功能,同时又有VB的易用性,Delphi6.0的伸缩性强,既可用于开发小项目,也可用于开发大项目,尤其适用于快速应用的开发,其大量优点使它迅速成为一种非常流行的编程语言。Delphi6.0中串口通信的实现方法很多,可以使用嵌入式汇编语言、API函数以及VB的MSComm控件来实现。其中使用MSComm控件来实现串口通信最方便,但有关Delphi如何实现二进制通信的资料很少,大部分参考书都只介绍了VB中MSComm控件的字符通信方式。由于Delphi中数组跟Variant变量不兼容,即在Delphi中字节数组不能直接赋值给MSComm控件的output属性,这跟VB有中很大的不同(VB中可以直接赋值),本人通过摸索总结出两种实现Delphi二进制通信的方法,即动态数组法和可变数组(Variant Array)法,并给出了应用实例。在应用实例中我们使用Delphi的absolute关键字来定义两个同地址的动态数组,类型分别为字节型数组和短整型数组,使用字节动态数组接收数据后,可以直接使用短整型动态数组获得短整型数据,省却了数据转换的麻烦

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧