http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 6690|回复: 15

[其他] web窗体串口接收代码。。。

[复制链接]
发表于 2013-5-8 14:39:48 | 显示全部楼层 |阅读模式
        protected void bSend_Click(object sender, EventArgs e)
        {
            tGet.Text = "";
            comm.PortName = dSerPor.Text;
            comm.BaudRate = int.Parse(dBouRat.Text);
            if (!comm.IsOpen)
                comm.Open();
            comm.Write(tComman.Text+"\r");
           // 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;//清除字符串构造器的内容                             
             builder.Append(Encoding.ASCII.GetString(buf));
             tGet.Text = builder.ToString();
                    //}
                //}));
             //if (tGet.Text !="")
               //     break;
            //}
            conn.Open();
            string Sqlstr="insert into logadam (操作时间,操作名,通道0,通道1,通道2,通道3)values(default ,'bSend"+tComman.Text+"'," + (bDO0.Text == "0cl" ? "'开'" :" '关'") + "," + (bDO1.Text == "1cl" ? "'开'" :" '关'") + "," + (bDO2.Text == "2cl" ?" '开'" : "'关'") + "," + (bDO3.Text == "3cl" ? "'开'" : "'关'") + ")";
            SqlCommand cmd =new SqlCommand(Sqlstr ,conn);
            cmd.ExecuteNonQuery();
            conn.Close();
            comm.Close();
        }
代码更改过好多次,询问啊,多线程啊,什么都试过,bytetoread一直返回0,而用windows窗体可以确认有接收到数据,飞哥什么时候有空,能不能远程协助帮忙看看呢


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-5-8 14:48:30 | 显示全部楼层
发送代码写在这里,把接收部分放一个线程里,发送完之后开启执行线程,一直接收,到有数据了,才结束,这样试试
 楼主| 发表于 2013-5-8 14:56:28 | 显示全部楼层
站长苏飞 发表于 2013-5-8 14:48
发送代码写在这里,把接收部分放一个线程里,发送完之后开启执行线程,一直接收,到有数据了,才结束,这样 ...

        //void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
        //{
        //    //Task.Factory.StartNew(()=>{
        //    //BeginInvoke(new Action(()=>{
        //    //Thread pingTask = new Thread(new ThreadStart(delegate
        //    //{
        //    int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致   
        //    byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据,声明数组长度为N   
        //    comm.Read(buf, 0, n);//读取缓冲数据,从0到N。   
        //    builder.Length = 0;//清除字符串构造器的内容   
        //    //因为要访问ui资源,所以需要使用invoke方式同步ui。            //代码,这样也是开启一个子线程
        //    //this.Invoke((EventHandler)(delegate
        //    //{
        //        //直接按ASCII规则转换成字符串   
        //        builder.Append(Encoding.ASCII.GetString(buf));
        //        //追加的形式添加到文本框末端,并滚动到最后。
        //        tGet.Text = builder.ToString();
        //    //}));
        //    //}));
        //    //pingTask.Start();                  
        //    //} ));   
        //    //});
        //}

        //private void Invoke(EventHandler eventHandler)
        //{
        //    throw new NotImplementedException();
        //}
试过了,这里面能组合出来编译能通过的都试过了
发表于 2013-5-8 14:58:05 | 显示全部楼层
枯叶化蝶 发表于 2013-5-8 14:56
//void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
        //{
      ...

那这就不清楚,理论上这样是可以的,应该还是代码那里有点小问题,这个我也没玩过,看不出来
 楼主| 发表于 2013-5-8 15:00:43 | 显示全部楼层
站长苏飞 发表于 2013-5-8 14:58
那这就不清楚,理论上这样是可以的,应该还是代码那里有点小问题,这个我也没玩过,看不出来

所以我想,飞哥什么时候能抽出点时间帮我远程调试下,说不定凭你的编程经验可以发现什么呢0.0
发表于 2013-5-8 15:30:38 | 显示全部楼层
枯叶化蝶 发表于 2013-5-8 15:00
所以我想,飞哥什么时候能抽出点时间帮我远程调试下,说不定凭你的编程经验可以发现什么呢0.0

现在不行,等下周吧,现在网速估计不行,我们就一个线了公司,等下周日安好宽代吧,到时候再说估计是周二左右。这中间你可以自己先研究下
 楼主| 发表于 2013-5-13 21:51:43 | 显示全部楼层
站长苏飞 发表于 2013-5-8 15:30
现在不行,等下周吧,现在网速估计不行,我们就一个线了公司,等下周日安好宽代吧,到时候再说估计是周二 ...

谢谢飞哥,接收出来了
发表于 2013-5-14 07:41:41 | 显示全部楼层
枯叶化蝶 发表于 2013-5-13 21:51
谢谢飞哥,接收出来了

是什么原因
 楼主| 发表于 2013-5-14 21:30:27 | 显示全部楼层
站长苏飞 发表于 2013-5-14 07:41
是什么原因

哈哈,不瞒飞哥,serialport中有个RTSEnable设为true就行了,原理还不大懂,飞哥如果能解释希望赐教啊
发表于 2013-5-14 22:02:35 | 显示全部楼层
枯叶化蝶 发表于 2013-5-14 21:30
哈哈,不瞒飞哥,serialport中有个RTSEnable设为true就行了,原理还不大懂,飞哥如果能解释希望赐教啊

获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号。

备注
请求发送 (RTS) 信号通常用在请求发送/可以发送 (RTS/CTS) 硬件握手中。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-5-2 11:17

© 2014-2021

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