打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
WEB页获取串口数据
using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.IO.Ports;using System.Text;using System.Threading;using System.Windows.Forms;using System.Runtime.InteropServices;using MyActive;namespace MyActiveX{    //不可改变    [Guid("218849AF-1B2C-457B-ACD5-B42AC8D17EB7"), ComVisible(true)]    public partial class MyActiveXControl : UserControl, IObjectSafety    {                public MyActiveXControl()        {            InitializeComponent();        }        public delegate void HandleInterfaceUpdataDelegate(string text);//定义一个委托                             private HandleInterfaceUpdataDelegate interfaceUpdataHandle;//声明        bool isClose = false;//是否关闭        #region IObjectSafety 成员 用于ActiveX控件安全信任        public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)        {            pdwSupportedOptions = 1;            pdwEnabledOptions = 2;        }        public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)        {            throw new NotImplementedException();        }        #endregion                        private void button1_Click(object sender, EventArgs e)        {            try            {                interfaceUpdataHandle = new HandleInterfaceUpdataDelegate(UpdateTextBox);//实例化委托对象                 serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);                if (!serialPort1.IsOpen)                {                    serialPort1.Open();                }                button2.Enabled = true;                button1.Enabled=false;            }            catch (Exception ex)            {                MessageBox.Show(ex.Message);                return;            }            timer1.Enabled = true;                    }        /// <summary>        /// 控件加载事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void MyActiveXControl_Load(object sender, EventArgs e)        {            setOrgComb();        }        /// <summary>        /// 初始化串口        /// </summary>        private void setOrgComb()        {            serialPort1.PortName = "COM1";          //端口名称            serialPort1.BaudRate = 1200;            //波特率            serialPort1.Parity = Parity.None;       //奇偶效验            serialPort1.StopBits = StopBits.One;    //效验            serialPort1.DataBits = 8;               //每个字节的数据位长度        }        /// <summary>        /// 更新数据        /// </summary>        /// <param name="text"></param>        private void UpdateTextBox(string text)        {            //richTextBox1.Text = text + "\n\t" + richTextBox1.Text;            richTextBox1.Text = text;        }        /// <summary>        /// 接收数据是发生        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)        {            //获取接收缓冲区中数据的字节数            if (serialPort1.BytesToRead > 5)            {                string strTemp = serialPort1.ReadExisting();//读取串口                double weight = -1;//获取到的重量                foreach (string str in strTemp.Split('='))//获取稳定的值                {                    double flog = 0;                    //数据是否正常                    if(double.TryParse(str, out flog)&&str.IndexOf('.')>0&&str[str.Length-1]!='.')                    {                        //数据转换   串口获取到的数据是倒叙的  因此进行反转                        char[] charArray = str.ToCharArray();                        Array.Reverse(charArray);                        string left = new string(charArray).Split('.')[0];                        string right = new string(charArray).Split('.')[1];                        if (right.Length==2)                        {                            weight = int.Parse(left) + int.Parse(right) / 100.0;                        }                    }                }                if(weight>=0)                {                    //在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托。                                        this.Invoke(interfaceUpdataHandle, weight.ToString());//取到数据   更新                }            }        }        private void button2_Click(object sender, EventArgs e)        {            try            {                button1.Enabled = true;                button2.Enabled = false;                serialPort1.Close();                timer1.Enabled = false;                                           }            catch (Exception ex)            {                MessageBox.Show(ex.Message);            }        }        private void timer1_Tick(object sender, EventArgs e)        {            if (isClose)            {                return;            }            try            {                string send = "" + (char)(27) + 'p';                send = serialPort1.ReadExisting();            }            catch (Exception ex)            {                MessageBox.Show(ex.Message);                button2_Click(null, null);            }        }    }}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#串口介绍以及简单串口通信程序设计实现
Android串口通讯SerialPort(使用篇)
C#中使用serialport类枚举串口,并验证串口是否被占用
C++串口编程实例
c#做的资源管理器 - zhangjingjing - 51CTO技术博客
VA18.2 数据流概述
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服