C# serialpor.write无法写入

好好学习的杜孜滕 2018-04-16 10:53:57
在下初学串口通信有关的编程知识,在编程的过程中遇见了一些问题,遍历网络资料后无法解决,希望各位大神不吝赐教。
我想尝试通过串口发送3个字节,我的代码是这样编写的:
byte[] bysend = { 0x44, 0x42, 0x43 };
sp1.Write(bysend,0,bysend.Length);
想通过这样发送数据,按理说这里应该向串口写入3个字节的数据并触发serialport.DataRececived事件,我在对应事件中写入了一个MessageBox.show来表示触发。
但是实际操作中无法触发该事件,
我在发送了数据后跟着检查发送与接收缓存区的字节数全为0 是否代表着write的写入没有成功?应该怎么解决呢
MessageBox.Show(sp1.BytesToWrite.ToString());
MessageBox.Show(sp1.BytesToRead.ToString());
这两句是我在执行write后执行的,用来检查缓冲区的字节数,执行结果全为0.
希望大家帮忙指点
...全文
622 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 14 楼 God_Girl 的回复:
引用 13 楼 qq_35995375 的回复:
[quote=引用 11 楼 God_Girl 的回复:] 你开两个程序看看
我试试吧,_(:з」∠)_现在最蛋疼的是他根本写不进去【如果老哥觉得语法没问题的话我再从别的方向去想想】
TM 不会没 OPEN 吧 ,把代码发来看看[/quote] 来了来了- - private void button1_Click(object sender, EventArgs e) { if (!sp1.IsOpen) { sp1.Open(); } byte[] bysend = { 0x44, 0x42, 0x43 }; sp1.Write(bysend, 0, bysend.Length); MessageBox.Show(sp1.BytesToWrite.ToString()); }
  • 打赏
  • 举报
回复
引用 13 楼 qq_35995375 的回复:
引用 11 楼 God_Girl 的回复:
你开两个程序看看
我试试吧,_(:з」∠)_现在最蛋疼的是他根本写不进去【如果老哥觉得语法没问题的话我再从别的方向去想想】
TM 不会没 OPEN 吧 ,把代码发来看看
  • 打赏
  • 举报
回复
引用 11 楼 God_Girl 的回复:
你开两个程序看看
我试试吧,_(:з」∠)_现在最蛋疼的是他根本写不进去【如果老哥觉得语法没问题的话我再从别的方向去想想】
  • 打赏
  • 举报
回复
引用 10 楼 God_Girl 的回复:
写法没问题啊
对对对 我也觉得这么简单的两句话不可能出错,但是缓冲区就是没东西 用 BytestoWrite显示就是0【还是说write有自动清空缓存的功能?】 非常尴尬
  • 打赏
  • 举报
回复
写法没问题啊
  • 打赏
  • 举报
回复
byte[] byteBuffer = new byte[] { 0x02, 0x30, 0x30, 0x31, 0x30, 0x30 }; serialPort1.Write(byteBuffer, 0, byteBuffer.Length);
  • 打赏
  • 举报
回复
你开两个程序看看
  • 打赏
  • 举报
回复
引用 7 楼 God_Girl 的回复:
下午才能下载好,MMP,代码贼多存网盘了。
_(:з」∠)_非常感谢大佬帮助
  • 打赏
  • 举报
回复
下午才能下载好,MMP,代码贼多存网盘了。
  • 打赏
  • 举报
回复
得了 我去翻翻老代码
  • 打赏
  • 举报
回复
引用 1 楼 God_Girl 的回复:
那你应该开两个程序一个读取,一个写入
我想做一个程序实现串口的数据发送和接受,不能在同一个程序中用两个button来分别控制吗? 我用的是同一个端口,基本参数也应该没问题【用串口调试助手测试过】 最尴尬的是我去找网上别人分享的代码也是出现无法写入的情况,不知道是什么原因造成的。是write这个函数有什么独特的用法吗
  • 打赏
  • 举报
回复
并且你要配置 端口为同一个口,你得查看你得电脑上的口,波特率 这些基本参数保持一致就可以了
  • 打赏
  • 举报
回复
引用 3 楼 God_Girl 的回复:
PS: 老铁你做这个你得工具用的是啥? 就是调试硬件查看他数据的那工具?你要和他通讯总归要知道进制数这些吧,比如他说他要一个M0的信号,你不是很抓瞎? 工具是啥?
我的目的是做一个上位机 因为之前没有接触过串口通信这个方面,因此想先实现基本的简单通信,再一步步向下做,结果在最基本的数据收发这里就卡主了
  • 打赏
  • 举报
回复
PS: 老铁你做这个你得工具用的是啥? 就是调试硬件查看他数据的那工具?你要和他通讯总归要知道进制数这些吧,比如他说他要一个M0的信号,你不是很抓瞎? 工具是啥?
  • 打赏
  • 举报
回复
那你应该开两个程序一个读取,一个写入
  • 打赏
  • 举报
回复
引用 18 楼 God_Girl 的回复:
引用 17 楼 qq_35995375 的回复:
[quote=引用 16 楼 sp1234 的回复:] sp1.Write 之后,你应该等到触发 serialport.DataRececived 之后才能判断是否收到了消息。也就是说,发送是发送,接收是接收。你可以使用一个定时器来在1秒钟之后在来判断是否超时而没有接收到消息,总之是不应该阻塞线程、不应该立刻去判断。
您好,意思是说即使我发送了,马上检索缓存区也可能什么也没有 需要等待一定的时间吗
你开两个工程测嘛,你用助手发的能进不?[/quote]已经调好了hhh 我用虚拟串口设置的COM1到COM2 然后我读取的是COM1口的输入缓存区什么也读不到- -最开始DataRececived也是调用的com1口的 所以才会没反应- - 我去读取了COM2口的缓存区就读到了,触发也触发的COM2口的DataRececived 应该是我对串口缓存区的认知有点问题_(:з」∠)_我多找点资料去看一看 非常感谢您的帮助
  • 打赏
  • 举报
回复
引用 17 楼 qq_35995375 的回复:
引用 16 楼 sp1234 的回复:
sp1.Write 之后,你应该等到触发 serialport.DataRececived 之后才能判断是否收到了消息。也就是说,发送是发送,接收是接收。你可以使用一个定时器来在1秒钟之后在来判断是否超时而没有接收到消息,总之是不应该阻塞线程、不应该立刻去判断。
您好,意思是说即使我发送了,马上检索缓存区也可能什么也没有 需要等待一定的时间吗
你开两个工程测嘛,你用助手发的能进不?
  • 打赏
  • 举报
回复
引用 16 楼 sp1234 的回复:
sp1.Write 之后,你应该等到触发 serialport.DataRececived 之后才能判断是否收到了消息。也就是说,发送是发送,接收是接收。你可以使用一个定时器来在1秒钟之后在来判断是否超时而没有接收到消息,总之是不应该阻塞线程、不应该立刻去判断。
您好,意思是说即使我发送了,马上检索缓存区也可能什么也没有 需要等待一定的时间吗
  • 打赏
  • 举报
回复
sp1.Write 之后,你应该等到触发 serialport.DataRececived 之后才能判断是否收到了消息。也就是说,发送是发送,接收是接收。你可以使用一个定时器来在1秒钟之后在来判断是否超时而没有接收到消息,总之是不应该阻塞线程、不应该立刻去判断。

110,534

社区成员

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

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

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