苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 6133|回复: 9

[其他] 串口接收

[复制链接]
发表于 2013-5-4 22:43:00 | 显示全部楼层 |阅读模式
namespace jieshouceshi_windows
{
    public partial class Form1 : Form
    {
        private SerialPort comm = new SerialPort();         //comm代表Ports.
        private StringBuilder builder = new StringBuilder();//避免在事件处理方法中反复的创建,定义到外面。
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text  = "";
            comm.PortName = "COM1";
            comm.BaudRate = 9600;
            if (!comm.IsOpen)
                comm.Open();
            comm.Write(textBox1.Text  + "\r");
            int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致   
            byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据,声明数组长度为N   
            comm.Read(buf, 0, n);//读取缓冲数据,从0到N。   
            builder.Length = 0;//清除字符串构造器的内容                           
            //直接按ASCII规则转换成字符串   
            builder.Append(Encoding.ASCII.GetString(buf));
            //追加的形式添加到文本框末端,并滚动到最后。
            textBox2.Text  = builder.ToString();
            comm.Close();
        }
    }
}
这个串口程序为什么不能实现接收呢?接收一定要有接收事件和invoke之类的委托吗?


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-5-4 23:47:32 | 显示全部楼层
如果说当然有点不适合,其实是这样的串口不是时时返回数据的,而是异步的,也就是说不是你发送就马上返回,可能你发送之后N久才有返回,也不是说返回数据不是由你发送事件来触发的,所以你直接接收肯定是不行的,要使用监听或者是不断循环的方法进行接收,这样当然最好的选择就是事件和invoke了
 楼主| 发表于 2013-5-5 15:14:28 | 显示全部楼层
yangying 发表于 2013-5-4 23:47
如果说当然有点不适合,其实是这样的串口不是时时返回数据的,而是异步的,也就是说不是你发送就马上返回, ...

可是我用windows窗体invoke的时候返回速度很快啊,我的设备响应时间在50毫秒以内啊,单步运行那么慢用这样的程序也没读出东西。。。我纠结一个月了。。。求破解啊。。。我的项目是一定要在web窗体上接收串口数据的啊0.0
 楼主| 发表于 2013-5-5 15:16:54 | 显示全部楼层
yangying 发表于 2013-5-4 23:47
如果说当然有点不适合,其实是这样的串口不是时时返回数据的,而是异步的,也就是说不是你发送就马上返回, ...

因为web中不能用事件触发所以我也只能想到这种方式了,求大姐赐教
发表于 2013-5-5 15:35:22 | 显示全部楼层
不能用事件就用监听方式,用循环,直到接受到才结束
 楼主| 发表于 2013-5-5 19:36:51 | 显示全部楼层
yangying 发表于 2013-5-5 15:35
不能用事件就用监听方式,用循环,直到接受到才结束

这个可能不是你说的那中问题啊。。。你说的这个我都试过了。。。。。就是收不到回音啊。。。
 楼主| 发表于 2013-5-5 19:38:54 | 显示全部楼层
yangying 发表于 2013-5-5 15:35
不能用事件就用监听方式,用循环,直到接受到才结束

我想求教下,web接收串口数据是不是必须要用到activeX插件。。。。好像没听说过不用能接收的。。。
发表于 2013-5-5 19:39:31 | 显示全部楼层
枯叶化蝶 发表于 2013-5-5 19:36
这个可能不是你说的那中问题啊。。。你说的这个我都试过了。。。。。就是收不到回音啊。。。

我一直就是这么用的, 思虑肯定是可行的,关键是看怎么写代码了。有时候要适当的打开分析一下
 楼主| 发表于 2013-5-5 19:48:37 | 显示全部楼层
yangying 发表于 2013-5-5 19:39
我一直就是这么用的, 思虑肯定是可行的,关键是看怎么写代码了。有时候要适当的打开分析一下

            for (; ; )
            {
            int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致   
            byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据,声明数组长度为N   
            //Thread pingTask = new Thread(new ThreadStart(delegate
                //{
                  //  tGet.Text = "";
                    //comm.PortName = dSerPor.Text;
                    //comm.BaudRate = int.Parse(dBouRat.Text);
                    //comm.Open();
                    //while (true)
                    //{
                      //  if (tGet.Text != "")
                        //{
                          //  comm.Close();
                            //break;
                        //}
                        //else
             comm.Read(buf, 0, n);//读取缓冲数据,从0到N。   
             builder.Length = 0;//清除字符串构造器的内容                           
                            //直接按ASCII规则转换成字符串   
             builder.Append(Encoding.ASCII.GetString(buf));
                            //追加的形式添加到文本框末端,并滚动到最后。
             tGet.Text = builder.ToString();
                    //}
                //}));

             if (tGet.Text !="")
                    break;
            }
天天调试,天天改,反复分析,反复求教。。。真的没辙了,大姐确定不用插件能行?   也麻烦大姐帮我分析下代码把
 楼主| 发表于 2013-5-6 12:30:01 | 显示全部楼层
yangying 发表于 2013-5-5 15:35
不能用事件就用监听方式,用循环,直到接受到才结束

我的这个真的没救了吗。。。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-26 03:29

© 2014-2021

快速回复 返回顶部 返回列表