net2.0自带控件SerialPort读取串口问题

aierong 2009-08-26 11:06:01
用。net2.0自带控件SerialPort做了一个程序,
程序和一个串口设备通讯,发出指令,然后读取设备响应数据, 但是读取的值总是不对。
不知道什么原因?波特率9600,数据位8,停止位1,校验位(偶数位)也都设置的没有错

例子1:
发送数据:01 03 00 00 00 04 44 09
实际接收:1 63 8 63 63 63 63 63 63 63 63 254 188
正确数据:01 03 08 00 ff 00 ff 00 ff 00 ff fe bc

帮忙看看代码

sp = new SerialPort ( "COM1" , 9600 , Parity.Even , 8 , StopBits.One );
sp.Open ( );

byte [ ] by = new byte [ 8 ] { 0x01 , 0x03 , 0x00 , 0x00 , 0x00 , 0x04 , 0x44 , 0x09 };

sp.Write ( by , 0 , 8 );
Thread.Sleep ( 1000 );
int iii = sp.BytesToRead;

byte [ ] buffer = new byte [ iii ];
sp.Read ( buffer , 0 , buffer.Length );

sp.Close ( );
...全文
244 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
aierong 2009-08-31
  • 打赏
  • 举报
回复
还是没搞出来

大家 帮忙哦
ximengchang 2009-08-31
  • 打赏
  • 举报
回复
用vb开发过这种接口,c#没有用过,关注 !
aierong 2009-08-31
  • 打赏
  • 举报
回复
查出问题,微软bug

.net 2.0 的serial port 类采用IO.Ports.Parity.Even校验时,正确的数据会误报
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=432551
dgjpy 2009-08-31
  • 打赏
  • 举报
回复
顶一个看看
aierong 2009-08-28
  • 打赏
  • 举报
回复
serialPort 控件 怎么设置 发送和接受的编码格式?

或者说,我怎么控制接收数据的格式?
aierong 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 libinguest 的回复:]
现在什么问题
[/Quote]

3楼的代码我试了,收到的是01-3f-08-3f-3f-3f-3f-3f-3f-3f-3f-fe-bc

还是不正确哦

我的正确接收数据是:
正确数据:01 03 08 00 ff 00 ff 00 ff 00 ff fe bc
风之影子 2009-08-27
  • 打赏
  • 举报
回复
BitConverter.ToString(data).ToString();

读出来的就是十六进制的字符串.

3楼的代码你试了吗?
风之影子 2009-08-27
  • 打赏
  • 举报
回复
现在什么问题
aierong 2009-08-27
  • 打赏
  • 举报
回复
还是没能解决呀

大家帮忙
风之影子 2009-08-26
  • 打赏
  • 举报
回复
http://libinguest.blog.163.com/blog/static/4534208200811252208704/


读数据放在
private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
try
{
byte[] data = new byte[this.sp.BytesToRead];
sp.Read(data, 0, data.Length);
MessageBox.Show(BitConverter.ToString(data).ToString());
}
catch (Exception ex)
{
CommonClass.MessageBoxOK(ex.ToString());
}

试试上面的

事件里读吧.

bychgh 2009-08-26
  • 打赏
  • 举报
回复
帮顶,学习
songxjing 2009-08-26
  • 打赏
  • 举报
回复
发送的是按十进制的还是十六进制的,看看有没有搞错,不过接收到的是 十进制的 不行的话再看一看说明命令有没有发错
aierong 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 c123728529 的回复:]
数组时是从0开始记吧!你的好像是八个数字!但是你的下表也是八!传了一个null指过去!或者是一个0值!改一下看!
[/Quote]

我用大傻串口调试软件3.0a可以收到正确结果
aierong 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 aierong 的回复:]
引用 5 楼 xiangshi 的回复:
接收也要用16进制啊


怎么搞,让接收也16进制呢?
[/Quote]

接收的结果转为16进制,也对不上我的正确结果
rongzhou19831007 2009-08-26
  • 打赏
  • 举报
回复
用串口调试工具测试下
高效匠人 2009-08-26
  • 打赏
  • 举报
回复
数组时是从0开始记吧!你的好像是八个数字!但是你的下表也是八!传了一个null指过去!或者是一个0值!改一下看!
vbdotnet2001 2009-08-26
  • 打赏
  • 举报
回复
接收的结果转成16进制呀
aierong 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiangshi 的回复:]
接收也要用16进制啊
[/Quote]

怎么搞,让接收也16进制呢?
liffe 2009-08-26
  • 打赏
  • 举报
回复
我当时做没遇到这样的情况,帮顶
xiangshi 2009-08-26
  • 打赏
  • 举报
回复
接收也要用16进制啊
加载更多回复(1)
串行通信主要用了C# 中的SerialPort类 开发语言:C# 程序运行环境:.NetFrameWork 2.0以上版本 开发工具:Visual Studio 2008 C# System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步 I/O 和事件驱动的 I/O、对管脚和中断状态的访问以 及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using System.IO.Ports。 串口的通讯参数 a.通讯端口号 [PortName]属性获取或设置通信端口,包括但不限于所有可用的 COM 端口,请注意该属性返回类型为String。通常情况下,PortName正 常返回的值为CO1、COM2……,SerialPort类最大支持的端口数突破了CommPort控件中CommPort属性不能超过16的限止,大大方便了用户 串口设备的配置。 b. 通讯格式 SerialPort类对分别用[BaudRate]、[Parity]、[DataBits]、[StopBits]属性设置通讯格式中的波特率、数据位、停止位和校验位,其 中[Parity]和[StopBits]分别是枚举类型Parity、StopBits,Parity类型中枚举了Odd(奇)、Even(偶)、Mark、None、Space,Parity枚 举了None、One、OnePointFive、Two。 SerialPort类提供了七个重载的构造函数,既可以对已经实例化的SerialPort对象设置上述相关属性的值,也可以使用指定的端口名称 、波特率和奇偶校验位数据位和停止位直接初始化 SerialPort 类的新实例。 3.串口的打开和关闭 SerialPort类是调用类的Open()和Close()方法。 4. 数据的发送和读取 Serial类调用重载的Write和WriteLine方法发送数据,其中WriteLine可发送字符串并在字符串末尾加入换行符,读取串口缓冲区的方法 有许多,其中除了ReadExisting和ReadTo,其余的方法都是同步调用,线程被阻塞直到缓冲区有相应的数据或大于ReadTimeOut属性设定 的时间值后,引发ReadExisting异常。 5.DataReceived事件 该事件类似于MSComm控件中的OnComm事件,DataReceived事件在接收到了[ReceivedBytesThreshold]设置的字符个数或接收到了文件结 束字符并将其放入了输入缓冲区时被触发。其中[ReceivedBytesThreshold]相当于MSComm控件的[Rthreshold]属性,该事件的用法与 MsComm控件的OnComm事件在CommEvent为comEvSend和comEvEof时是一致的
VC实例精通一书的源码。 第2章(\Chapter02) 示例描述:本章介绍常用Win32控件的使用方法。 01_EditDemo 演示静态文本、文本框、按钮控件的使用方法 02_CheckBoxDemo 演示复选框和单选按钮控件的使用方法。 03_ComboBoxDemo 演示组合框和列表框控件的使用方法。 04_ScrollBarDemo 演示滚动条控件的使用方法。 05_SpinDemo 演示数值调节按钮的使用方法。 06_ProgressDemo 演示进度条控件的使用方法。 07_SliderDemo 演示滑块控件的使用方法。 08_HotkeyDemo 演示热键控件的使用方法。 09_ListCtrlDemo 演示列表控件的使用方法。 10_TreeCtrlDemo 演示树形控件的使用方法。 11_RichEditDemo 演示格式文本框的使用方法。 12_TabCtrlDemo 演示属性页的使用方法。 13_AnimateDemo 演示动画控件的使用方法。 14_DateTimeDemo 演示日期时间选择控件的使用方法。 15_CalendarDemo 演示日历控件的使用方法。 16_IPCtrlDemo 演示IP输入框的使用方法。 第3章(\Chapter03) 示例描述:本章介绍高级Win32控件的使用方法。 01_MenuDemo 演示窗体菜单的使用方法。 02_PopMenuDemo 演示弹出式菜单的使用方法。 03_ToolbarDemo 给窗体添加标准工具栏。 04_Toolbar256 使工具栏支持256色位图。 05_StatusBarDemo 在窗体的状态栏区域输出信息。 06_ColorStatusBar 在状态栏添加彩色渐变进度条。 07_ToolTipDemo 使用ToolTip显示即时提示。 第4章(\ Chapter04) 示例描述:本章介绍窗体的使用方法和使用技巧。 01_WindowDemo 演示创建和显示窗体的方法。 02_TopMostWnd 让窗体保持在桌面最顶层。 03_TransparentWindow 创建半透明窗体。 04_EllipticalWindow 创建椭圆窗体。 05_TextPathWnd 创建文字异形窗体。 06_ImagePathWnd 根据图片创建异形窗体。 07_AnimatedWnd 以动画方式显示和隐藏窗体。 08_AutoSize 让窗体上的控件自动适应窗体大小。 09_AutoSizeEx 多个控件改变大小时防止闪烁。 10_LimitSize 限制窗体的最大和最小尺寸。 11_AutoPos 让窗体具有停靠效果。 12_EnumWnd 枚举系统中的窗口。 第5章(\ Chapter05) 示例描述:本章介绍创建对话框以及通用对话框的使用技巧。 01_ModalDlg 显示模式对话框。 02_ModallessDlg 显示非模式对话框。 03_OpenFileDemo 使用打开文件对话框。 04_SaveFileDemo 使用保存文件对话框。 05_FontDlgDemo 使用字体选择对话框。 06_FontDlgDemo_Color 使用字体选择对话框。 07_PreviewFileDlg_Demo 为打开文件对话框增加预览功能。 08_InputDlg_Demo 从内存创建对话框。 第6章(\ Chapter06) 示例描述:本章介绍Windows应用程序消息循环的原理和消息处理技巧。 01_PeekMsgDemo 传递并响应Windows消息。 02_SendMsg 发送Windows消息。 03_MsgInMfc 了解MFC的映射消息机制。 04_UserMsg 使用自定义消息。 05_DoubleEdit_Demo 拦截并处理Win32控件的消息。 第7章(\ Chapter07) 示例描述:本章介绍Windows系统和外壳编程的技巧。 01_TimerDemo 使用计时器。 02_RegDemo 访问系统注册表。 03_SuperPwd 用随机数生成强力密码。 04_ShellOpen 打开一个和程序相关联的文档。 05_ClipboardDemo 访问Windows剪切板。 06_ClipboardMonitor 监视剪切板内容变化。 07_TrayIconDemo 使用系统托盘图标。 第8章(\ Chapter08) 示例描述:本章介绍在应用程序中使用Windows基本设备的方法和技巧。 01_MouseSample 处理鼠标消息。 02_KeyTest 处理键盘消息。 03_MouseMoving 利用客户区鼠标消息拖动无边框窗体。 04_NCMsg 利用非客户区鼠标消息控制无边框窗体。 05_LockMouse 限制鼠标移动区域。 06_MyEvent 模拟键盘鼠标消息。 07_ClipboardHelper 使用系统热键消息使后台程序得到通知。 第9章(\ Chapter09) 示例描述:本章学习Windows进程的创建和管理方法。 01_StartProcess 创建和结束进程。 02_RedirectStdio 用匿名管道获取控制台程序的输出。 03_CatchError 拦截并处理外部进程的错误。 04_SingleInstance 防止应用程序运行多个实例。 05_ProcessMsg 用消息在进程间通讯。 06_MappingFile 用内存映射文件在进程间通讯。 07_ProcessList 枚举并得到系统中所有进程信息。 第10章(\ Chapter10) 示例描述:本章学习Windows线程的创建和管理方法。 01_PrimeNumberFinder 主线程和用户界面。 02_PrimeNumberFinderEx 创建和结束线程。 03_PrimeNumberFinal 用临界区对象同步线程。 04_BigPrimeNumber 用事件对象同步线程。 05_SemaphoreDemo 用信号量对象同步线程。 06_ThreadPriority 调整线程优先级。 第11章(\ Chapter11) 示例描述:本章学习使用VC6进行图形图像开发的技巧。 01_ZoomBitmap 用DC对象缩放位图。 02_DrawLine 用画笔对象画线。 03_BrushDemo 用画刷对象填充区域。 04_RollText 在屏幕上输出文本。 05_PicShow 使用GDI+读取不同格式的图片。 06_PicShowEx 使用GDI+保存不同格式的图片。 07_Snap 制作屏幕截图程序。 08_Watermark 给图片增加版权信息。 第12章(\ Chapter12) 示例描述:本章学习使用VC6进行文件IO开发的技巧。 01_BinaryView 用基本API编写二进制编辑器。 02_MyCompressor 用MFC类编写文件压缩软件。 03_DirMonitor 监控硬盘上文件的变化。 04_HddSpace 获取本机所有磁盘及其空间使用情况。 05_WideText 文本保存及编码方式。 06_XmlReader 读写XML文件。 07_SerialPort 读写串口数据。 第13章(\ Chapter13) 示例描述:本章学习使用VC6进行数据库开发的方法和技巧。 01_ODBC_Source 创建ODBC数据源。 02_ODBC_Demo 通过ODBC访问Access数据库。 03_ADO_Demo 通过ADO访问据库。 04_ExecProc 调用SQL Server的存储过程。 05_TransExec 事务处理SQL Server命令。 06_BinData 存取数据库中的图片。 07_CreateMdb 在程序中动态生成Access数据库。 第14章(\ Chapter14) 示例描述:本章学习使用VC6进行网络开发的方法和技巧。 01_UdpClient 建立UDP连接客户端。 02_UdpServer 建立UDP连接服务器端。 03_TcpClient 建立TCP连接客户端。 04_TcpServer 建立TCP连接服务器端。 05_MfcSock 使用MFC的SOCKET类。 06_MyWebProtocol 注册自己的浏览器地址栏协议。 07_GetHttpStr 抓取网页内容。 08_VisualPing 基于ICMP编写网络速度监控程序。 第15章(\ Chapter15) 示例描述:本章介绍一些Windows高级编程技术。 01_AppSnap 制作鼠标HOOK。 02_PasswordShow 用鼠标HOOK读取密码框中的内容。 03_KeyVoice 制作键盘HOOK。 04_SysKey 用键盘HOOK屏蔽系统按键。 05_DlgSkinDemo 用HOOK技术给对话框换肤。 06_PeExport 分析DLL文件获取其导出函数列表。 第16章(\ Chapter16) 示例描述:本章介绍VC6在多媒体开发方面的应用技术。 01_BgMusic 用基本API播放声音。 02_MP3Player 用MCI播放音频。 03_MyReal 调用RealPlayer播放音频文件。 04_Recorder 制作录音机程序。 05_GifCtrl 在VC中显示动态的GIF动画。 06_FlashWnd 在VC中播放Flash动画。 07_MediaPlayer 在VC中播放视频。 08_CaptureVideo 在VC中实现视频采集及截图功能。 第17章(\ Chapter17) 示例描述:本章介绍VC6在ActiveX方面的应用技术。 01_MyActiveX 创建ActiveX控件。 02_MyActiveX2 为ActiveX控件增加属性和方法。 03_ActiveXInDlg 在应用程序中使用ActiveX控件。 04_ActiveXInWeb 在浏览器中使用ActiveX控件。 05_MyActiveX3 在VC中显示动态的GIF动画。 06_RegOCX 在程序中注册和注销ActiveX控件。 第18章(\ Chapter18) 示例描述:本章介绍如何将应用程序制作成完整的应用软件的技术。 01_MyHelp 制作帮助文件。 02_Setup 制作安装程序。 03_MultiLanguage 让应用程序界面支持多语言。 04_MultiLanguageEx 多语言的字符串常量。 05_SetupEx 制作多语言的安装程序。

110,570

社区成员

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

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

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