亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ddata.cs

?? 用C#寫的USB數據采集程序
?? CS
?? 第 1 頁 / 共 2 頁
字號:
using System;
using System.Collections;
using System.Xml;
using System.IO;
using System.IO.Ports;
using System.Text;

namespace DAS
{
    #region "多道數據類"
    /// <summary>
	/// 多道數據類
	/// </summary>
	public class DData
    {
        #region "屬性"

        #region "受保護的屬性"

        /// <summary>
        /// 暫存串口數據
        /// </summary>
        private byte[] _tmpdata;
        /// <summary>
        /// 暫存轉換后的數據
        /// </summary>
        private int[] _tmpvalue;
        /// <summary>
        /// 已接收的字節數
        /// </summary>
        private int _receivedbyte;
        /// <summary>
		/// 計數溢出查找表,一維數組,下標表示道址,元素是所在道址的最大計數
		/// </summary>
		private int[] _overflowtable;
		/// <summary>
		/// 數據坐標
		/// </summary>
		private bool _islinecoordinate;
		/// <summary>
		/// 存儲多道數據,二維數組
		/// </summary>
		private int[][] _data;
		/// <summary>
		/// 全譜區最大計數
		/// </summary>
		private double _maxcount; 
		/// <summary>
		/// 放大區最大計數
		/// </summary>
		private double _zmaxcount;
        /// <summary>
        /// 串口對象
        /// </summary>
        private SerialPort _serialport;
        /// <summary>
        /// 串口號
        /// </summary>
        private string _serialportname;
        /// <summary>
        /// 波特率
        /// </summary>
        private int _serialportbandrate;
        /// <summary>
        /// 是否停機
        /// </summary>
        private bool _stop;
        /// <summary>
        /// 數據讀取索引
        /// </summary>
        private int _dataindex;

        #endregion

        #region "公共屬性"

        #region "串口號"
        /// <summary>
        /// 獲取或設置串口號
        /// </summary>
        public string SerialPortName
        {
            get
            {
                return _serialportname;
            }
            set
            {
                if (_serialportname != value)
                {
                    _serialportname = value;
                    //如果串口已經打開,先把其關閉再重新打開
                    if (_serialport.IsOpen)
                    {
                        _serialport.Close();
                        _serialport.PortName = _serialportname;
                        _serialport.Open();
                    }
                    else
                    {
                        _serialport.PortName = _serialportname;
                    }
                }
            }
        }
        #endregion

        #region "波特率"
        /// <summary>
        /// 獲取或設置波特率
        /// </summary>
        public int SerialPortBandRate
        {
            get
            {
                return _serialportbandrate;
            }
            set
            {
                if (_serialportbandrate != value)
                {
                    _serialportbandrate = value;
                    //如果串口已經打開,先把其關閉再重新打開
                    if (_serialport.IsOpen)
                    {
                        _serialport.Close();
                        _serialport.BaudRate = _serialportbandrate;
                        _serialport.Open();
                    }
                    else
                    {
                        _serialport.BaudRate = _serialportbandrate;
                    }
                }
            }
        }
        #endregion

        #region "全譜區最大計數"
        /// <summary>
        /// 獲取或者設置全譜區最大計數
        /// </summary>
        public double MaxCount
        {
            get
            {
                return _maxcount;
            }
            set
            {
                _maxcount = value;
            }
        }
        #endregion

        #region "放大區最大計數"
        /// <summary>
        /// 獲取或者設置放大區最大計數
        /// </summary>
        public double ZMaxCount
        {
            get
            {
                return _zmaxcount;
            }
            set
            {
                _zmaxcount = value;
            }
        }
        #endregion

        #region "時間點數"
        /// <summary>
        /// 獲取時間點總數
        /// </summary>
        public int TimePoints
        {
            get
            {
                return _data.GetLength(0);
            }
        }
        #endregion

        #region "道數"
        /// <summary>
        /// 獲取道數
        /// </summary>
        public int Channels
        {
            get
            {
                return _data[0].Length;
            }
        }
        #endregion

        #region "數據坐標"
        /// <summary>
        /// 獲取或設置數據坐標
        /// </summary>
        public bool IsLineCoordinate
        {
            set
            {
                _islinecoordinate = value;
            }
            get
            {
                return _islinecoordinate;
            }
        }
        #endregion

        #endregion

        #endregion

        #region "構造函數"
        /// <summary>
		/// 構造函數
		/// </summary>
		/// <param name="timepoints">時間點數</param>
		/// <param name="channels">道數</param>
		/// <param name="maxcount">全譜區最大計數</param>
		/// <param name="zmaxcount">放大區最大計數</param>
		public DData(int timepoints, int channels, int maxcount, int zmaxcount)
		{
			//初始化數據結構
            _data = new int[timepoints][];
			for(int i = 0;i < timepoints;i++)
			{
				_data[i] = new int[channels];
			}
            //初始化溢出表
			_overflowtable = new int[timepoints];
            //初始化坐標
			_islinecoordinate = true;
            //初始化最大計數
			_maxcount = maxcount;
			_zmaxcount = zmaxcount;
            //初始化串口
            _serialportname = "COM1";
            _serialportbandrate = 115200;
            _serialport = new SerialPort(_serialportname, _serialportbandrate, Parity.None, 8, StopBits.One);
            _serialport.ReadBufferSize = 8192;
            _serialport.ReceivedBytesThreshold = 1;
            _serialport.DataReceived += new SerialDataReceivedEventHandler(serialport_DataReceived);
            _serialport.Open();
            _tmpdata = new byte[channels * 4];
            _tmpvalue = new int[channels];
            _receivedbyte = 0;
            _stop = true;
            _dataindex = timepoints - 1;
        }
 
        #endregion

        #region "方法"

        #region "受保護的方法"

        #region "釋放資源"
        /// <summary>
        /// 釋放資源
        /// </summary>
        ~DData()
        {
            _serialport.Close();
            _serialport.Dispose();
        }
        #endregion

        #region "串口數據到達"
        /// <summary>
        /// 串口數據到達
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void serialport_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            //讀入數據
            int n = _serialport.BytesToRead;
            if (n <= 0)//如果沒有數據要讀取則返回
            {
                return;
            }
            try
            {
                //讀取數據并增加已接收到的字節數
                if (_receivedbyte + n < _tmpdata.Length)
                {
                    _serialport.Read(_tmpdata, _receivedbyte, n);
                }
                else
                {
                    _serialport.Read(_tmpdata, _receivedbyte, _tmpdata.Length - _receivedbyte);
                }
                _receivedbyte += n;
            }
            catch (TimeoutException)
            {
                return;
            }
            //如果已接收的字節數達到道數的8倍則保存數據(每8字節代表一道數據)
            if (_receivedbyte >= _tmpdata.Length)
            {
                int tmpcount;
                int max = 0;
                for (int i = 0; i < _tmpvalue.Length; i++)
                {
                    tmpcount = _tmpdata[4 * i] + 256 * _tmpdata[1 + 4 * i] + 65536 * _tmpdata[2 + 4 * i];
                    _tmpvalue[i] = tmpcount;
                    if (tmpcount > max)
                    {
                        max = tmpcount;
                    }
                }
                _serialport.DiscardInBuffer();
                _receivedbyte = 0;
                AddData(ref _tmpvalue, max);
                if (_datareceived != null)//檢查數據到達事件是否有預定
                {
                    //產生數據到達事件
                    _datareceived(sender, new EventArgs());
                }

                if (_stop)
                {
                    _serialport.Write("0");
                }
                else
                {
                    _serialport.Write("1");
                }
            }
        }
        #endregion

        #region "在指定的時間點下寫入一個道數據"
        /// <summary>
        /// 在指定的時間點下寫入一個道數據
        /// </summary>
        /// <param name="time">時間點</param>
        /// <param name="channel">道址</param>
        /// <param name="count">計數</param>
        protected void SetData(int timePoint, int channel, int count)
        {
            if (timePoint < 0 || timePoint > _data.Length)
            {
                throw new Exception("timepoint overflow!");
            }
            _data[timePoint - 1][channel - 1] = count;

            //根據寫入的數據更新溢出表
            if (count > _overflowtable[timePoint - 1])
            {
                _overflowtable[timePoint - 1] = count;
            }
        }
        #endregion

        #region "在最后使用的時間點增加一個道數據"
        /// <summary>
        /// 在最后使用的時間點增加一個道數據
        /// </summary>
        /// <param name="data">數據</param>
        /// <param name="count">計數</param>
        protected void AddData(ref int[] data, int count)
        {
            //時間點數據前移
            for (int i = 0; i < _data.GetUpperBound(0); i++)
            {
                Array.Copy(_data[i + 1], _data[i], _data[0].Length);
                _overflowtable[i] = _overflowtable[i + 1];
            }
            Array.Copy(data, _data[_data.GetUpperBound(0)], _data[0].Length);
            //更新溢出表
            _overflowtable[_overflowtable.GetUpperBound(0)] = count;
            //更新數據讀取索引
            if (_dataindex > 0)
            {
                _dataindex--;
            }
        }
        #endregion

        #endregion

        #region "公有方法"

        #region "重新設置數據結構"
        /// <summary>
        /// 重新設置數據結構
        /// </summary>
        /// <param name="timepoints">時間點</param>
        /// <param name="channels">道數</param>
        public void Reset(int timePoints, int channels)
        {
            Stack s = new Stack();
            Stack s1 = new Stack();
            //保存原先數據
            foreach (int[] n in _data)
            {
                s.Push(n);
            }
            foreach (int n1 in _overflowtable)
            {
                s1.Push(n1);
            }
            //設置數據結構
            int mincn = Math.Min(channels, Channels);
            _data = new int[timePoints][];
            for (int i = 0; i < timePoints; i++)
            {
                _data[i] = new int[channels];
            }
            _overflowtable = new int[timePoints];

            //復制原先數據
            for (int i = timePoints - 1; i >= 0; i--)
            {
                if (s.Count > 0)
                {
                    Array.Copy((int[])s.Pop(), _data[i], mincn);
                    _overflowtable[i] = (int)s1.Pop();
                }
                else
                {
                    break;
                }
            }

            _tmpdata = new byte[channels * 4];
            _tmpvalue = new int[channels];
            _receivedbyte = 0;
            _dataindex = TimePoints;
        }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区三区久久久| 91麻豆自制传媒国产之光| 亚洲欧洲精品一区二区三区不卡| 99久久99久久久精品齐齐| 久久精品二区亚洲w码| 亚洲免费伊人电影| 久久综合久久久久88| 欧美亚洲动漫制服丝袜| voyeur盗摄精品| 极品尤物av久久免费看| 亚洲高清免费视频| 欧美国产精品专区| 日韩精品中文字幕一区 | 青青草成人在线观看| 最新不卡av在线| 久久青草欧美一区二区三区| 欧美日韩一区中文字幕| 91视频在线看| 99视频精品免费视频| 国产最新精品精品你懂的| 日本欧美肥老太交大片| 亚洲国产日韩a在线播放性色| 亚洲色图19p| 国产欧美va欧美不卡在线| 欧美电影免费观看高清完整版在 | 精品国产伦一区二区三区免费 | 日韩影视精彩在线| 亚洲国产色一区| 一区二区三区高清| 亚洲精品一二三四区| 中文字幕在线视频一区| 欧美韩日一区二区三区| 国产嫩草影院久久久久| 国产亚洲精品久| 久久久久久日产精品| 26uuu另类欧美亚洲曰本| 欧美一区二区三区性视频| 欧美精品在线观看播放| 欧美另类久久久品| 7777精品伊人久久久大香线蕉超级流畅| 一本到不卡免费一区二区| 91丨九色porny丨蝌蚪| 色综合中文字幕国产 | 国产精品毛片高清在线完整版| 久久综合久久99| 国产色产综合产在线视频| 国产午夜精品一区二区三区嫩草 | 精品国产在天天线2019| 日韩免费视频一区二区| 精品国偷自产国产一区| 久久久高清一区二区三区| 久久久久久电影| 国产精品欧美一区二区三区| 中文字幕第一区第二区| 亚洲日本韩国一区| 亚洲gay无套男同| 久久99久久精品| 懂色av一区二区三区免费观看| www.激情成人| 欧美无人高清视频在线观看| 日韩一级大片在线| 久久久国产一区二区三区四区小说| 国产三级精品视频| 亚洲免费伊人电影| 日本vs亚洲vs韩国一区三区 | 懂色av中文一区二区三区| 99re这里只有精品视频首页| 欧美亚洲国产怡红院影院| 4438亚洲最大| 日本一区二区三区四区| 亚洲精品菠萝久久久久久久| 日韩精品视频网| 国产一区二区三区av电影| 成人免费精品视频| 欧美日韩你懂得| 久久日韩精品一区二区五区| 国产精品初高中害羞小美女文| 亚洲午夜一二三区视频| 极品销魂美女一区二区三区| 91在线精品一区二区| 6080亚洲精品一区二区| 国产精品美女久久福利网站| 视频一区中文字幕| 成人性视频免费网站| 欧美乱熟臀69xxxxxx| 国产精品国产馆在线真实露脸| 日韩精品视频网站| aaa欧美大片| 日韩欧美国产系列| 日韩码欧中文字| 精品综合久久久久久8888| 色综合久久88色综合天天免费| 精品对白一区国产伦| 亚洲日本青草视频在线怡红院| 美女在线观看视频一区二区| 色综合久久综合网97色综合| 精品久久久久久久人人人人传媒| 一区二区三区久久| 国产成人午夜高潮毛片| 91精品国产综合久久精品麻豆| 国产精品电影一区二区| 精品一区二区精品| 欧美精品视频www在线观看 | 精品伊人久久久久7777人| 91国模大尺度私拍在线视频| 久久精品视频一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美国产精品久久| 六月婷婷色综合| 欧美日韩一二区| 亚洲视频免费看| 粉嫩一区二区三区性色av| 日韩欧美电影在线| 午夜一区二区三区视频| 91美女在线视频| 亚洲视频一区二区免费在线观看| 丁香五精品蜜臀久久久久99网站 | 欧美性猛交xxxx乱大交退制版| 国产亚洲一区二区三区四区 | 欧美日韩一区二区欧美激情| 亚洲三级久久久| 99在线精品一区二区三区| 国产午夜亚洲精品理论片色戒 | 欧美日韩久久一区二区| 亚洲自拍另类综合| 99久久99精品久久久久久| 欧美国产成人精品| 成人免费视频国产在线观看| 久久久久久久综合日本| 国产综合色产在线精品| 精品电影一区二区三区| 精品一区二区三区免费毛片爱| 日韩一区二区电影网| 日本欧美一区二区三区乱码| 91精品国产色综合久久不卡蜜臀| 午夜精品爽啪视频| 欧美日韩国产成人在线免费| 亚洲一区二区在线免费观看视频| 日本乱码高清不卡字幕| 一区二区在线看| 欧美中文字幕久久| 亚瑟在线精品视频| 91精品久久久久久蜜臀| 毛片基地黄久久久久久天堂| 日韩视频国产视频| 激情五月婷婷综合网| 久久精品亚洲乱码伦伦中文| 懂色一区二区三区免费观看| 亚洲人吸女人奶水| 欧美熟乱第一页| 日韩在线一二三区| 精品免费99久久| 国产成都精品91一区二区三| 中文字幕巨乱亚洲| 日本精品免费观看高清观看| 视频一区二区中文字幕| 精品国产免费人成电影在线观看四季 | 91精品婷婷国产综合久久性色| 久久精品999| 中文字幕第一区第二区| 在线一区二区三区四区| 美女在线观看视频一区二区| 国产精品无遮挡| 欧美性生活一区| 久久er精品视频| 国产精品久久毛片a| 欧美日韩精品电影| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品久久久久久久裸模 | 欧美大片在线观看| 成人综合婷婷国产精品久久蜜臀| 亚洲女子a中天字幕| 精品裸体舞一区二区三区| www.亚洲国产| 婷婷中文字幕综合| 国产日韩欧美精品在线| 在线观看视频一区二区欧美日韩| 久久精品国产精品亚洲精品| 国产精品短视频| 日韩欧美国产一区二区在线播放| 成人免费视频国产在线观看| 日韩av午夜在线观看| 中文字幕免费在线观看视频一区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 韩国理伦片一区二区三区在线播放| 国产精品久99| 日韩欧美国产三级| 欧洲一区二区三区免费视频| 国产剧情一区二区三区| 亚洲成人在线网站| 自拍偷拍亚洲激情| 精品第一国产综合精品aⅴ| 欧美视频一区二区三区| 成人一级片在线观看| 美女视频黄久久| 一区二区三区日韩欧美精品| 久久精品一级爱片| 日韩免费性生活视频播放| 91行情网站电视在线观看高清版| 国产乱国产乱300精品|