当前位置:编程学习 > C#/ASP.NET >>

winform串口

我用winform编写的一个串口程序,很不稳定,时好时坏
硬件没问题,我用串口调试程序测试过的
请问是什么问题呢?
//发送指令控制靶板
        //[0xAA] [0x05] [0x03|0x04] [0x01|0x02|0x04]  [0x10~0x90]
        public void serialPortWrite(byte target_State, byte target_Row, byte target_Line)
        {
            byte[] serialBuff = new byte[5];
            serialBuff[0] = 0xAA;
            serialBuff[1] = 0x05;
            serialBuff[2] = target_State;
            serialBuff[3] = target_Row;
            serialBuff[4] = target_Line;
            SerialPortMgr.Port1.Write(serialBuff, 0, 5);
            //serialPort1.Write(serialBuff, 0, 5);
        }

这是发送的函数,就是发送的时候接收的部分会有时候收不到 --------------------编程问答-------------------- 楼主用串口调试程序测试的时候发送和接收也是同时进行的吗?
确认下你用的是全双工通信,这样才能发送和接收同时进行。
接收部分是怎么接收的呢,看发送部分没有问题啊 --------------------编程问答-------------------- 不是全双工的,是握手的一个过程,应该是发送出去的信息出现了误码
因为我在接收端会有一个接收响应的动作
用串口调试程序是一切正常的,但用winform做得串口就时好时坏
引用 1 楼 leafmao 的回复:
楼主用串口调试程序测试的时候发送和接收也是同时进行的吗?
确认下你用的是全双工通信,这样才能发送和接收同时进行。
接收部分是怎么接收的呢,看发送部分没有问题啊
--------------------编程问答--------------------
引用 2 楼 xmrforever 的回复:
不是全双工的,是握手的一个过程,应该是发送出去的信息出现了误码
因为我在接收端会有一个接收响应的动作
用串口调试程序是一切正常的,但用winform做得串口就时好时坏
引用 1 楼 leafmao 的回复:楼主用串口调试程序测试的时候发送和接收也是同时进行的吗?
确认下你用的是全双工通信,这样才能发送和接收同时进行。
接收部分是怎么接收的呢,看发送部分没有问题啊……

你接收部分的代码是怎么写的?
你用的串口调试程序是类似串口助手那样的吗
另外,不是全双工通信的话,是不能边发边收的 --------------------编程问答--------------------
引用 3 楼 leafmao 的回复:
引用 2 楼 xmrforever 的回复:不是全双工的,是握手的一个过程,应该是发送出去的信息出现了误码
因为我在接收端会有一个接收响应的动作
用串口调试程序是一切正常的,但用winform做得串口就时好时坏
引用 1 楼 leafmao 的回复:楼主用串口调试程序测试的时候发送和接收也是同时进行的吗?
确认下你用的是全双工通信,这样才能发送和接收同时进行。
……

你说的接收部分是指单片机一端吗?这一段是收到后解码然后做相应的动作,接收这一段应该是没问题的,因为我用串口调试程序(网上下的小软件,就是串口助手)是没问题的
并不是边发边收,是我winform发给单片机,单片机收不到
ps:我用的是485传输 --------------------编程问答--------------------
引用 4 楼 xmrforever 的回复:
引用 3 楼 leafmao 的回复:引用 2 楼 xmrforever 的回复:不是全双工的,是握手的一个过程,应该是发送出去的信息出现了误码
因为我在接收端会有一个接收响应的动作
用串口调试程序是一切正常的,但用winform做得串口就时好时坏
引用 1 楼 leafmao 的回复:楼主用串口调试程序测试的时候发送和接收也是同时进行的吗?
确认下你用的是全双工……

汗,原来你说的收不到是指单片机收不到啊,还以为你PC收不到。。。
如果是单片机收不到,确认下PC是否将数据发送出去,是否打开了串口,串口名字、波特率等设置是否正确,你是怎么调用这个发送数据的方法的,是不是没有调用你写的这个函数啊? --------------------编程问答--------------------
引用 5 楼 leafmao 的回复:
引用 4 楼 xmrforever 的回复:引用 3 楼 leafmao 的回复:引用 2 楼 xmrforever 的回复:不是全双工的,是握手的一个过程,应该是发送出去的信息出现了误码
因为我在接收端会有一个接收响应的动作
用串口调试程序是一切正常的,但用winform做得串口就时好时坏
引用 1 楼 leafmao 的回复:楼主用串口调试程序测试的时候发送和接……

你说的这些我都查过了,是没问题的,现在的现象是是好实话
传输不稳定,应该是发送出现了乱码 --------------------编程问答--------------------
引用 6 楼 xmrforever 的回复:
引用 5 楼 leafmao 的回复:引用 4 楼 xmrforever 的回复:引用 3 楼 leafmao 的回复:引用 2 楼 xmrforever 的回复:不是全双工的,是握手的一个过程,应该是发送出去的信息出现了误码
因为我在接收端会有一个接收响应的动作
用串口调试程序是一切正常的,但用winform做得串口就时好时坏
引用 1 楼 leafmao 的回复……

如果怀疑是发送出现了乱码,可以在单片机查看接收到的数据 --------------------编程问答--------------------
引用 7 楼 leafmao 的回复:
引用 6 楼 xmrforever 的回复:引用 5 楼 leafmao 的回复:引用 4 楼 xmrforever 的回复:引用 3 楼 leafmao 的回复:引用 2 楼 xmrforever 的回复:不是全双工的,是握手的一个过程,应该是发送出去的信息出现了误码
因为我在接收端会有一个接收响应的动作
用串口调试程序是一切正常的,但用winform做得串口就时好……


我用我的笔记本连接电脑测试过的,我在笔记本上也用串口调试程序接收winform发送的数据
结果接收的数据都是对的   没有问题 --------------------编程问答--------------------
引用 8 楼 xmrforever 的回复:
引用 7 楼 leafmao 的回复:引用 6 楼 xmrforever 的回复:引用 5 楼 leafmao 的回复:引用 4 楼 xmrforever 的回复:引用 3 楼 leafmao 的回复:引用 2 楼 xmrforever 的回复:不是全双工的,是握手的一个过程,应该是发送出去的信息出现了误码
因为我在接收端会有一个接收响应的动作
用串口调试程序是一切正……

你用winform编的程序可以跟串口助手征程通信,那说明问题在单片机

楼主啊,你描述问题要描述清楚啊,看你提问的描述,会以为是用串口助手代替你写的程序的,我就是这么认为的 --------------------编程问答--------------------
引用 9 楼 leafmao 的回复:
引用 8 楼 xmrforever 的回复:引用 7 楼 leafmao 的回复:引用 6 楼 xmrforever 的回复:引用 5 楼 leafmao 的回复:引用 4 楼 xmrforever 的回复:引用 3 楼 leafmao 的回复:引用 2 楼 xmrforever 的回复:不是全双工的,是握手的一个过程,应该是发送出去的信息出现了误码
因为我在接收端会有……

所以这个问题就很奇怪啊
单片机也没问题啊,我用串口助手通讯是没问题的
是不是winform有问题,我用的08的,这个程序我闲杂win7上编写的,后来转到台式机上(xp系统)
--------------------编程问答--------------------  你的单片机处理能力不足,数据传输太快,导致数据溢出丢失吧  --------------------编程问答--------------------
引用 10 楼 xmrforever 的回复:
引用 9 楼 leafmao 的回复:引用 8 楼 xmrforever 的回复:引用 7 楼 leafmao 的回复:引用 6 楼 xmrforever 的回复:引用 5 楼 leafmao 的回复:引用 4 楼 xmrforever 的回复:引用 3 楼 leafmao 的回复:引用 2 楼 xmrforever 的回复:不是全双工的,是握手的一个过程,应该是发送出去……


你不是用串口助手跟你的PC通讯吗,那只能说明PC软件没问题,不能说明单片机没问题。
还是,你用串口助手代替你写的PC软件,跟单片机通信的? --------------------编程问答-------------------- 发一段数据后sleep一短时间看看~~ --------------------编程问答--------------------
引用 11 楼 sosoben 的回复:
你的单片机处理能力不足,数据传输太快,导致数据溢出丢失吧

难道串口助手这个小软件发送十六进制数的时候会做一个延迟吗? --------------------编程问答-------------------- 可能是传输的过程中丢失数据 --------------------编程问答-------------------- 我建议你用 AccessPort 监听一下数据到底发了没有  还是发了 但单片机接收不到。

然后你可以一步一步调试啊,调试没问题,实际运行才有问题,那应该就是处理速度的问题啦 --------------------编程问答-------------------- 谢谢各位的回答,确实是速度快了出现丢数据的现象
但是我用c++做得串口调试程序就不会出现这个现象,同一台电脑上运行的
难道是winform的串口类运行速度更快? --------------------编程问答-------------------- 应该不会吧, --------------------编程问答--------------------
引用 11 楼 sosoben 的回复:
你的单片机处理能力不足,数据传输太快,导致数据溢出丢失吧

++
建议你发送前先 线程sleep一下..... --------------------编程问答--------------------
引用 17 楼 xmrforever 的回复:
谢谢各位的回答,确实是速度快了出现丢数据的现象
但是我用c++做得串口调试程序就不会出现这个现象,同一台电脑上运行的
难道是winform的串口类运行速度更快?


如要提第二个问提,请把C++的代码也贴出
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,