用C#和MSComm控件和万用表通信,收不到数据

ohoff 2007-01-31 06:32:40
因项目需要,我需要从一块带RS232串口的数字万用表读取电压数据。该万用表串口设置如下:波特率 19200,停止位 1,数据位 7,奇偶校验 odd。

我用C#和MSComm控件写了个简单的接收程序。部分代码如下:

//串口设置

axMSComm1.CommPort = Convert.ToSByte("1");
axMSComm1.RTSEnable = true;

//收到1字符就触发OnComm事件
axMSComm1.RThreshold = 1;

//串口参数设置
axMSComm1.Settings = "19200,O,7,1";

axMSComm1.InBufferSize = 1024;
axMSComm1.OutBufferSize = 512;

//设为文本模式
axMSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeText;
axMSComm1.InputLen = 0;
axMSComm1.NullDiscard = false;

axMSComm1.PortOpen = true;

//OnComm函数

string strReadBuffer = "";
if(axMSComm1.InBufferCount > 0)
{
strReadBuffer = axMSComm1.Input.ToString();
ReadData.Text += strReadBuffer;
}

现在,我用虚拟串口工具 VSPD 和 串口调试助手 SCommAssists(http://www.gjwtech.com/myprogram.htm)进行测试,我的程序能正常接收数据,但当尝试与万用表通信时,无法收到数据。

我用SCommAssists与万用表通信,同样无法收到数据。但使用另一串口调试软件(http://www.cmsoft.cn/?id=204)时,却可以正常接收万用表数据。收到的数据如下:

//以16进制显示时:
30 30 33 38 38 3B 38 30 36 0D 0A 30 30 33 38 38 3B 38 30 36 0D 0A

//以ASCII码显示时:
00388;806
00488;806


万用表工作方式:当万用表处于串口模式时,即不断发送数据至串口。


请问大家,有什么可能的原因?如何解决?





...全文
517 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ohoff 2007-02-03
  • 打赏
  • 举报
回复
flowercity(菜农) ( ) 信誉:95 Blog 2007-02-01 21:52:27 得分: 0


先用调试工具看看是否通信正常
然后在测试代码通信是否正常

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

我用四种串口工具测过,有2种正常,2种不正常。

我的代码测试时,只要串口上插了万用表自带的串口线(不接万用表),一旦打开串口,MSComm控件就会报comEventBreak错误(错误代码1001:通信中断),什么也收不到。但是我的代码可以正常收到其他外设发来的字符串。



bigbat 2007-02-03
  • 打赏
  • 举报
回复
你在试一下初始参数了。可能是停止位或校验位错误。
flowercity 2007-02-01
  • 打赏
  • 举报
回复
先用调试工具看看是否通信正常
然后在测试代码通信是否正常
lbing7 2007-01-31
  • 打赏
  • 举报
回复
记得一个同事用C#来做的时候,他得定时地去扫COM的缓冲区
yiyi0518 2007-01-31
  • 打赏
  • 举报
回复
up~~

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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