久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

C#串口溫度采集上位機(jī)源碼:從字節(jié)解析到實(shí)時(shí)曲線完整實(shí)現(xiàn)

C#串口溫度采集上位機(jī)源碼:從字節(jié)解析到實(shí)時(shí)曲線完整實(shí)現(xiàn) 簡(jiǎn)介一份基于C#開發(fā)的溫度采集上位機(jī)程序源碼專為需要掌握上位機(jī)開發(fā)、串口通信及傳感器數(shù)據(jù)讀取的開發(fā)者準(zhǔn)備。程序圍繞DS18B20溫度傳感器展開涵蓋初始化、溫度讀取、異常過濾、平均值計(jì)算、閾值報(bào)警等關(guān)鍵環(huán)節(jié)并采用多線程將UI與數(shù)據(jù)采集分離整體結(jié)構(gòu)清晰適合初學(xué)者對(duì)照學(xué)習(xí)也是中高級(jí)開發(fā)者快速搭建類似采集系統(tǒng)的參考模板。資源包為zip壓縮格式共2個(gè)文件總大小399KB其中rar文件為核心C#源碼工程html文件為解壓密碼及相關(guān)說明便于使用者快速打開工程。已有1281人瀏覽學(xué)習(xí)說明該資源在工業(yè)自動(dòng)化、物聯(lián)網(wǎng)溫度監(jiān)測(cè)場(chǎng)景中具有不錯(cuò)的實(shí)用價(jià)值。通過源碼可同時(shí)獲得Windows Forms界面布局、SerialPort串口通信、數(shù)據(jù)持久化存儲(chǔ)等典型實(shí)踐有助于系統(tǒng)性提升C#項(xiàng)目開發(fā)能力。1. C# 溫度采集上位機(jī)源碼從串口裸數(shù)據(jù)到實(shí)時(shí)曲線的完整閉環(huán)拿到這份 C# 編寫的溫度采集上位機(jī)源碼最直接的用法是接上下位機(jī)就能看到實(shí)時(shí)溫度曲線。下位機(jī)每 200ms 通過串口發(fā)一幀數(shù)據(jù)上位機(jī)要做的就是把裸字節(jié)解析成溫度值、繪制曲線、落盤存檔再留出歷史查詢的入口。聽起來不復(fù)雜真正跑起來斷幀、亂碼、UI 卡死、串口被占用每一個(gè)都能讓人折騰一下午。這份源碼把串口通信、幀解析、實(shí)時(shí)曲線、CSV 存儲(chǔ)和參數(shù)配置串成了完整鏈路適合做環(huán)境監(jiān)測(cè)、設(shè)備聯(lián)調(diào)或產(chǎn)線數(shù)據(jù)采集的開發(fā)者直接改來當(dāng)基礎(chǔ)工具新手能順著跑通熟手能快速替換協(xié)議和界面。2. 串口鏈路先立住通信參數(shù)、幀協(xié)議與數(shù)據(jù)完整性校驗(yàn)溫度采集上位機(jī)本質(zhì)上是串口數(shù)據(jù)的消費(fèi)端。下位機(jī)單片機(jī)或采集模塊把傳感器測(cè)到的溫度按固定幀格式發(fā)出來上位機(jī)要做的第一件事是把這條鏈路確認(rèn)清楚。鏈路參數(shù)對(duì)不上后面解析、曲線、存儲(chǔ)全是徒勞。拿到這份源碼我建議別急著點(diǎn)擊運(yùn)行先把通信參數(shù)和幀協(xié)議逐項(xiàng)核對(duì)一遍再開始跑數(shù)據(jù)。2.1 通信參數(shù)怎么定波特率、數(shù)據(jù)位與校驗(yàn)位常見硬件拓?fù)溆袃煞N一種是 PT100 或熱電偶經(jīng)過變送器轉(zhuǎn)成 RS485 信號(hào)接到 USB 轉(zhuǎn)串口模塊再進(jìn) PC另一種是單片機(jī)直接采樣 DS18B20 或 NTC把溫度值打包成幀從串口發(fā)出。不管是哪種串口參數(shù)都是由下位機(jī)固件決定的上位機(jī)只能去適配這和網(wǎng)絡(luò)通信里客戶端適應(yīng)服務(wù)端是同一個(gè)道理別指望上位機(jī)改了參數(shù)下位機(jī)就跟著變。參數(shù)常見值適用場(chǎng)景波特率9600抗干擾強(qiáng)長(zhǎng)線傳輸優(yōu)先溫度采集完全夠用波特率115200高頻采樣或多設(shè)備輪詢時(shí)用但對(duì)線材質(zhì)量要求高數(shù)據(jù)位8絕大多數(shù)協(xié)議都是 8 位停止位1常規(guī)配置現(xiàn)場(chǎng)干擾大時(shí)個(gè)別設(shè)備用 2校驗(yàn)位None協(xié)議內(nèi)部帶 CRC 時(shí)硬件校驗(yàn)可以關(guān)掉校驗(yàn)位Even部分老工業(yè)儀表默認(rèn)偶校驗(yàn)這里有個(gè)容易誤判的點(diǎn)如果下位機(jī)協(xié)議已經(jīng)做了 CRC16 校驗(yàn)硬件校驗(yàn)位設(shè) None 就夠了再疊一層偶校驗(yàn)會(huì)讓數(shù)據(jù)位多出一個(gè) bit兩邊對(duì)不齊反而更亂。確認(rèn)參數(shù)后數(shù)據(jù)仍然亂碼建議先用串口調(diào)試助手抓原始字節(jié)看幀頭是否和協(xié)議文檔一致再判斷是硬件問題還是解析問題不要一上來就懷疑波特率。2.2 SerialPort 的接收寫法事件驅(qū)動(dòng)還是輪詢C# 里讀串口有三種常見姿勢(shì)。一是 DataReceived 事件數(shù)據(jù)到達(dá)時(shí)在后臺(tái)線程觸發(fā)回調(diào)實(shí)時(shí)性最好代碼最省二是開一個(gè)后臺(tái)線程循環(huán)讀配合 ReadTimeout 控制阻塞三是用 SerialPort.BaseStream 做異步讀。多數(shù)溫度采集項(xiàng)目用 DataReceived 就夠了下面的代碼就是這套源碼里的標(biāo)準(zhǔn)寫法。private SerialPort _serialPort; private readonly object _syncLock new object(); public bool InitSerialPort(string portName, int baudRate 9600) { try { _serialPort new SerialPort(portName, baudRate, Parity.None, 8, StopBits.One); _serialPort.DataReceived OnDataReceived; _serialPort.ReadTimeout 200; // 同步 Read 的等待上限防止極端情況卡住后臺(tái)線程 _serialPort.Open(); return true; } catch (Exception ex) { Console.WriteLine(串口打開失敗: ex.Message); return false; } } private void OnDataReceived(object sender, SerialDataReceivedEventArgs e) { SerialPort sp (SerialPort)sender; byte[] buffer new byte[sp.BytesToRead]; int count sp.Read(buffer, 0, buffer.Length); if (count 0) { AppendToBuffer(buffer); // 統(tǒng)一進(jìn)接收緩沖區(qū)由解析邏輯拆幀 } }邏輯說明OnDataReceived 在后臺(tái)線程被調(diào)用里面不能直接操作任何 UI 控件。Read 一次把當(dāng)前緩沖區(qū)里的字節(jié)全部取出BytesToRead 表示此刻串口接收緩沖區(qū)里的字節(jié)數(shù)它并不等于一幀數(shù)據(jù)的長(zhǎng)度。數(shù)據(jù)交給 AppendToBuffer 統(tǒng)一入緩沖由后續(xù)拆幀邏輯處理。ReadTimeout 參數(shù)在事件驅(qū)動(dòng)模式下平時(shí)用不上但某些驅(qū)動(dòng)在異常狀態(tài)下會(huì)導(dǎo)致 Read 阻塞設(shè)置一個(gè)超時(shí)算保險(xiǎn)。portName 不要寫死程序啟動(dòng)時(shí)用 SerialPort.GetPortNames() 枚舉當(dāng)前可用端口做成下拉框讓用戶選。USB 轉(zhuǎn)串口拔插后 COM 號(hào)會(huì)變寫死端口是本場(chǎng)景最常見的翻車原因之一。提示GetPortNames() 返回的端口名有時(shí)帶硬件描述比如 USB-SERIAL (COM3)解析時(shí)只取括號(hào)里的 COM 號(hào)即可。2.3 幀協(xié)議與校驗(yàn)CRC16 計(jì)算和緩沖區(qū)拆幀串口是流式協(xié)議不保證一次收到完整一幀上位機(jī)必須自己維護(hù)緩沖區(qū)按幀協(xié)議做字節(jié)對(duì)齊。這套源碼里的幀格式如下AA 55 幀頭設(shè)備地址 1 字節(jié)溫度數(shù)據(jù)兩個(gè)字節(jié)高字節(jié)在前最后是 CRC16 低字節(jié)在前、高字節(jié)在后的雙字節(jié)校驗(yàn)整幀 7 字節(jié)。幀頭選 AA 55 這類在二進(jìn)制數(shù)據(jù)里出現(xiàn)概率低的組合能明顯降低誤判。public static ushort Crc16Modbus(byte[] data, int length) { ushort crc 0xFFFF; for (int i 0; i length; i) { crc ^ data[i]; for (int j 0; j 8; j) { if ((crc 0x0001) ! 0) crc (ushort)((crc 1) ^ 0xA001); else crc 1; } } return crc; }邏輯說明這是 Modbus RTU 標(biāo)準(zhǔn)的多項(xiàng)式算法初始值 0xFFFF。調(diào)用時(shí)傳入幀中除去校驗(yàn)字節(jié)的部分即前 5 個(gè)字節(jié)算出的結(jié)果與幀尾 2 字節(jié)比較一致才認(rèn)為這一幀有效。CRC16 能檢出單比特和大部分多比特錯(cuò)誤工業(yè)現(xiàn)場(chǎng)強(qiáng)烈建議保留不要圖省事用所有字節(jié)求和取低 8 位的累加校驗(yàn)抗干擾能力差一個(gè)量級(jí)。拆幀邏輯集中在一個(gè)循環(huán)里完成核心代碼如下private Listbyte _recvBuffer new Listbyte(); private void AppendToBuffer(byte[] data) { lock (_syncLock) { _recvBuffer.AddRange(data); TryParseFrame(); } } private void TryParseFrame() { const int FRAME_LEN 7; while (_recvBuffer.Count FRAME_LEN) { int headIndex _recvBuffer.IndexOf(0xAA); if (headIndex 0) { _recvBuffer.Clear(); // 連幀頭都沒有清掉避免內(nèi)存膨脹 return; } if (headIndex 0) { _recvBuffer.RemoveRange(0, headIndex); } if (_recvBuffer.Count FRAME_LEN) { return; // 幀頭已找到但數(shù)據(jù)不完整等下一批 } if (_recvBuffer[1] ! 0x55) { _recvBuffer.RemoveAt(0); // 第二字節(jié)不是幀頭丟一個(gè)字節(jié)重新對(duì)齊 continue; } ushort calcCrc Crc16Modbus(_recvBuffer.ToArray(), 5); int low _recvBuffer[5]; int high _recvBuffer[6]; ushort recvCrc (ushort)((high 8) | low); if (calcCrc ! recvCrc) { _recvBuffer.RemoveAt(0); // 校驗(yàn)失敗丟掉當(dāng)前字節(jié)繼續(xù)對(duì)齊 continue; } byte address _recvBuffer[2]; short rawTemp (short)((_recvBuffer[3] 8) | _recvBuffer[4]); double temperature rawTemp * 0.1; OnFrameParsed(address, temperature); // 觸發(fā)業(yè)務(wù)事件 _recvBuffer.RemoveRange(0, FRAME_LEN); // 消費(fèi)掉完整幀 } }邏輯說明IndexOf 定位幀頭 0xAA幀頭前的殘留字節(jié)直接清掉幀頭后第二字節(jié)不是 0x55 就丟掉一個(gè)字節(jié)繼續(xù)找?guī)^匹配且長(zhǎng)度夠 7 字節(jié)后先算 CRC16對(duì)不上就丟第一個(gè)字節(jié)重新對(duì)齊而不是整段清空——這樣最多丟一幀不會(huì)把后面連續(xù)有效的數(shù)據(jù)全廢掉。解析完成后通過 OnFrameParsed 事件拋出去上層只關(guān)心溫度值不碰字節(jié)邏輯。這個(gè)循環(huán)里 while 而不是 if 是關(guān)鍵。如果緩沖區(qū)里同時(shí)到了兩幀半的數(shù)據(jù)while 會(huì)連續(xù)消費(fèi)掉完整幀直到剩余字節(jié)不夠一幀才退出。真遇到頻繁誤判先懷疑協(xié)議設(shè)計(jì)幀頭選得太常見比如 0xFF就必須改用更長(zhǎng)幀頭或加設(shè)備地址預(yù)校驗(yàn)。3. 溫度解析與實(shí)時(shí)展示從 byte[] 到 Chart 控件的完整實(shí)現(xiàn)鏈路通了之后核心就是三件事解析、展示、存儲(chǔ)。這一章按數(shù)據(jù)流向展開把溫度值怎么從兩個(gè)字節(jié)變成人看得懂的曲線和表格講清楚。解析層保持獨(dú)立是最重要的——不要在前面 TryParseFrame 里直接寫 UI 代碼否則后面加存儲(chǔ)、加多通道都會(huì)被迫改動(dòng)拆幀邏輯。3.1 溫度值解析字節(jié)拼接、符號(hào)位與單位換算溫度數(shù)據(jù)在串口幀里通常以定點(diǎn)數(shù)傳輸而不是浮點(diǎn)數(shù)。原因是浮點(diǎn)數(shù)占 4 字節(jié)且字節(jié)序在不同平臺(tái)上容易出錯(cuò)定點(diǎn)數(shù)用 short 表示單位 0.1°C解析簡(jiǎn)單還省帶寬。上面幀協(xié)議里 rawTemp 是帶符號(hào) short范圍 -32768 到 32767乘 0.1 后能覆蓋 -3276.8°C 到 3276.7°C對(duì)溫度采集綽綽有余。private double ParseTemperature(byte highByte, byte lowByte) { // 高低字節(jié)拼成帶符號(hào) 16 位整數(shù)單位 0.1°C short raw (short)((highByte 8) | lowByte); double celsius raw * 0.1; // 合理性過濾把明顯越界的值擋在業(yè)務(wù)層外面 if (celsius -50 || celsius 150) { return double.NaN; // NaN 在曲線和表格里會(huì)被跳過不畫出毛刺 } return celsius; }邏輯說明(highByte 8) | lowByte 是大端序拼接如果下位機(jī)發(fā)的是小端序低字節(jié)在前要改成 (lowByte 8) | highByte。C# 的 short 是帶符號(hào)的若下位機(jī)用 ushort 表示溫度0xFFFF 是某個(gè)大正數(shù)而不是 -1就必須換成 ushort 再轉(zhuǎn) double。還有一點(diǎn)容易踩byte 在運(yùn)算時(shí)會(huì)隱式提升為 int(highByte 8) 的結(jié)果是 int直接賦給 short 需要顯式強(qiáng)轉(zhuǎn)不然編譯報(bào)錯(cuò)。合理性過濾這塊很多人想省但實(shí)際非常有用。工業(yè)現(xiàn)場(chǎng)偶爾會(huì)出現(xiàn)設(shè)備上電瞬間的異常值或者通道懸空時(shí)的 0xFFFF如果不擋曲線圖上會(huì)蹦出一根直插天際的毛刺回放歷史數(shù)據(jù)時(shí)特別扎眼。過濾閾值按你實(shí)際的量程范圍設(shè)不一定非用 -50 到 150。3.2 Chart 實(shí)時(shí)曲線滾動(dòng)窗口與跨線程刷新WinForms 的 Chart 控件畫實(shí)時(shí)曲線核心是兩點(diǎn)跨線程更新和點(diǎn)數(shù)裁剪。跨線程問題在事件驅(qū)動(dòng)的串口讀取里必然出現(xiàn)因?yàn)?OnDataReceived 跑在后臺(tái)線程直接操作 chart1.Series 會(huì)拋跨線程異?;蚺及l(fā)崩潰。chart1 上需要先建一個(gè)名為 Temperature 的 Series可以在窗體設(shè)計(jì)器里加也可以在 Load 事件里用 chart1.Series.Add(Temperature) 創(chuàng)建。private void UpdateChart(double temperature, DateTime time) { if (chart1.InvokeRequired) { chart1.Invoke(new Action(() UpdateChart(temperature, time))); return; } Series series chart1.Series[Temperature]; series.Points.AddXY(time, temperature); // 滾動(dòng)窗口最多保留 3000 個(gè)點(diǎn)超出后從頭部刪 while (series.Points.Count 3000) { series.Points.RemoveAt(0); } // X 軸跟隨最新時(shí)間滾動(dòng)只顯示最近 5 分鐘 DateTime maxTime time.AddSeconds(5); chart1.ChartAreas[0].AxisX.Maximum maxTime.ToOADate(); chart1.ChartAreas[0].AxisX.Minimum maxTime.AddMinutes(-5).ToOADate(); }邏輯說明InvokeRequired 判斷當(dāng)前線程是否和創(chuàng)建控件的線程一致不一致就用 Invoke 把更新切回 UI 線程。這個(gè)模式是串口上位機(jī)里最穩(wěn)妥的跨線程寫法比手動(dòng)維護(hù) delegate 簡(jiǎn)單。AddXY 的 X 軸值是 DateTimeChart 控件內(nèi)部會(huì)轉(zhuǎn)成 OADate 數(shù)值所以手動(dòng)設(shè)置 AxisX.Maximum/Minimum 時(shí)也要先 ToOADate()否則軸范圍設(shè)置會(huì)錯(cuò)位。點(diǎn)數(shù)裁剪用 while 循環(huán)刪頭部。實(shí)際性能瓶頸不在刪點(diǎn)而在 Chart 控件重繪所以更新頻率要控制。如果每幀都觸發(fā)曲線刷新200ms 一幀就是每秒 5 次能跑但沒必要。我一般會(huì)加一個(gè)刷新節(jié)流數(shù)據(jù)解析和存儲(chǔ)逐幀完成UI 用 System.Windows.Forms.Timer 每 500ms 拉一次最新值刷曲線和數(shù)值框。這樣做還有一個(gè)附帶好處UI 刷新頻率和數(shù)據(jù)采樣頻率解耦之后要調(diào)采樣率不用動(dòng)界面代碼。3.3 數(shù)據(jù)落盤CSV 高頻寫入的緩沖策略溫度采集是長(zhǎng)時(shí)間運(yùn)行的任務(wù)數(shù)據(jù)落盤不能每幀都打開文件寫一次磁盤 IO 會(huì)成瓶頸SSD 也被頻繁小寫傷到。常規(guī)做法是內(nèi)存里攢夠一批再寫代碼里用 StringBuilder 做緩沖。private StringBuilder _csvBuffer new StringBuilder(); private int _csvBufferedCount 0; private const int FlushThreshold 100; // 攢夠 100 條寫一次文件 public void AppendCsvRecord(DateTime time, double temperature) { if (double.IsNaN(temperature)) return; // 過濾后的異常值不落盤 _csvBuffer.AppendLine( string.Format({0:yyyy-MM-dd HH:mm:ss.fff},{1:F2}, time, temperature)); _csvBufferedCount; if (_csvBufferedCount FlushThreshold) { File.AppendAllText(_csvPath, _csvBuffer.ToString(), Encoding.UTF8); _csvBuffer.Clear(); _csvBufferedCount 0; } } public void FlushCsv() { if (_csvBuffer.Length 0) { File.AppendAllText(_csvPath, _csvBuffer.ToString(), Encoding.UTF8); _csvBuffer.Clear(); _csvBufferedCount 0; } }邏輯說明File.AppendAllText 每次調(diào)用會(huì)打開、寫入、關(guān)閉文件一次100 條一攢就是把 100 次 IO 合并成 1 次。FlushCsv 必須在窗體關(guān)閉時(shí)調(diào)用否則最后不足 100 條的數(shù)據(jù)會(huì)丟。文件名建議帶日期比如 Temperature_20250712.csv一天一個(gè)文件后續(xù)歸檔和按月整理都很方便。長(zhǎng)期運(yùn)行且有查詢需求的項(xiàng)目可以換成 SQLite但如果交付目標(biāo)只是讓用戶能用 Excel 打開數(shù)據(jù)CSV 是最省事的。提示程序被任務(wù)管理器強(qiáng)殺時(shí)緩沖區(qū)里未落盤的記錄會(huì)丟。數(shù)據(jù)完整性要求高的場(chǎng)景把閾值降到 20 左右再配合進(jìn)程退出時(shí)的 Flush 兜底。4. 踩坑與排查串口亂碼、斷幀、UI 卡死等五個(gè)高頻問題溫度采集上位機(jī)項(xiàng)目不大但坑極多而且很多坑只在跑了一兩個(gè)小時(shí)甚至過夜后才暴露。下面五條是這套源碼對(duì)應(yīng)場(chǎng)景里最高頻的問題每條按現(xiàn)象、原因、解決三部分拆開寫調(diào)試時(shí)可以直接對(duì)著查。4.1 串口層的三個(gè)坑亂碼、斷幀與設(shè)備掉線坑一解析出來的溫度偶爾跳變曲線帶毛刺現(xiàn)象溫度值大部分時(shí)間正常但每隔幾秒冒出一個(gè) -273.15 或 65535 之類的異常值回看 CSV 也能找到這些臟數(shù)據(jù)。原因兩種情況。一種是上位機(jī)把串口數(shù)據(jù)當(dāng)字符串讀了用 Encoding.ASCII 或 Default 去解碼二進(jìn)制幀字節(jié)對(duì)不上自然亂另一種是下位機(jī)發(fā)送的數(shù)據(jù)里那一幀本身就是設(shè)備上電或復(fù)位瞬間的未定義值上位機(jī)沒做合理性過濾。解決二進(jìn)制幀全程用 byte[] 處理任何環(huán)節(jié)都不要轉(zhuǎn) string。解析側(cè)保留合理性過濾超出物理范圍的值直接返回 NaN 丟棄。還有一個(gè)檢查技巧把異常值出現(xiàn)的時(shí)刻和下位機(jī)設(shè)備日志對(duì)比如果每次都出現(xiàn)在上電瞬間說明是設(shè)備側(cè)問題上位機(jī)只需要做到不把臟數(shù)據(jù)畫上曲線??佣粠瑪?shù)據(jù)被拆成兩三次收到解析大面積失敗現(xiàn)象DataReceived 觸發(fā)時(shí) BytesToRead 只有 3~4 個(gè)字節(jié)如果按收到字節(jié)即完整幀去解析每次都差幾個(gè)字節(jié)日志里全是解析失敗記錄。原因串口是流式協(xié)議字節(jié)到達(dá)時(shí)間取決于發(fā)送方和驅(qū)動(dòng)事件觸發(fā)的是有數(shù)據(jù)可讀不是一幀完整到達(dá)。解決緩沖區(qū)累積模式每次讀到的字節(jié)先追加再去緩沖區(qū)里找完整幀對(duì)應(yīng)本章 TryParseFrame 的 while 循環(huán)邏輯。幀頭找到了但長(zhǎng)度不夠就等下一批字節(jié)。接收緩沖區(qū)要加超時(shí)清空策略超過 2~3 秒沒有新數(shù)據(jù)把半截幀丟棄否則設(shè)備重啟后發(fā)的第一幀會(huì)和殘留字節(jié)拼成錯(cuò)幀??尤诖虿婚_或者跑著跑著設(shè)備掉線現(xiàn)象程序啟動(dòng)時(shí) Open() 拋異常提示端口被占用或者 USB 轉(zhuǎn)串口連接的下位機(jī)半夜斷連第二天早晨數(shù)據(jù)斷檔一整段。原因端口被占用多數(shù)是上一次程序異常退出時(shí)沒釋放掉線的元兇經(jīng)常是 Windows 電源管理把 USB 設(shè)備休眠了USB 轉(zhuǎn)串口芯片和電腦之間的連接被系統(tǒng)掐斷。解決Open() 用 try/catch 包裹并在界面上給出明確提示程序退出時(shí)釋放串口資源代碼里統(tǒng)一寫在窗體關(guān)閉事件里。protected override void OnFormClosing(FormClosingEventArgs e) { if (_serialPort ! null _serialPort.IsOpen) { _serialPort.Close(); _serialPort.Dispose(); } FlushCsv(); base.OnFormClosing(e); }同時(shí)在設(shè)備管理器里把對(duì)應(yīng) USB 根集線器的允許計(jì)算機(jī)關(guān)閉此設(shè)備以節(jié)約電源勾掉。代碼層面再加一層防護(hù)定時(shí)發(fā)心跳查詢命令超過 N 秒沒回應(yīng)就自動(dòng)重連這個(gè)邏輯對(duì)長(zhǎng)時(shí)間無人值守的采集站是剛需比人工半夜起來拔插 USB 靠譜得多。4.2 界面層的兩個(gè)坑UI 卡死與曲線內(nèi)存暴漲坑四程序跑起來界面卡頓拖窗口像幻燈片現(xiàn)象數(shù)據(jù)刷新看著正常但界面響應(yīng)極差鼠標(biāo)拖動(dòng)窗口延遲明顯點(diǎn)下拉框要反應(yīng)半天。原因跨線程更新沒正確編組或者解析存儲(chǔ)邏輯直接放在 UI 線程。DataReceived 回調(diào)里如果同步操作 Chart、TextBox后臺(tái)線程和 UI 線程互相搶資源界面就被拖死。解決解析和存儲(chǔ)全放后臺(tái)線程UI 只根據(jù)最新溫度值刷新??缇€程統(tǒng)一用 InvokeRequired Invoke 模式更推薦的做法是定時(shí)器節(jié)流刷新500ms 更新一次數(shù)值和曲線UI 線程負(fù)載降下來整個(gè)程序就順了。還有一個(gè)容易被忽略的細(xì)節(jié)串口調(diào)試階段加的 Console.WriteLine 在頻繁調(diào)用的路徑上會(huì)拖慢程序正式跑之前記得刪掉或注釋??游迮芤煌砩蟽?nèi)存漲到幾個(gè) G最后崩掉現(xiàn)象程序啟動(dòng)時(shí)內(nèi)存 50MB運(yùn)行 8 小時(shí)后到 3GB曲線越來越遲鈍最終無響應(yīng)。原因Chart 控件的 Points 無限累加畫了幾十萬個(gè)點(diǎn)也不做裁剪同時(shí)每次刷新時(shí)反復(fù)綁定 DataSource強(qiáng)制控件全量重繪內(nèi)存和 CPU 一起爆。解決限制 Points 數(shù)量超出滾動(dòng)窗口就 RemoveAt(0)刷新用定時(shí)器節(jié)流繪制用 AddXY 追加避免重復(fù)綁定 DataSource。如果采集頻率很高比如 10ms 一幀建議把歷史數(shù)據(jù)落盤后從曲線里淘汰曲線只保留最近時(shí)間段全量數(shù)據(jù)交給 CSV 或數(shù)據(jù)庫(kù)別讓 UI 控件扛全量。5. 進(jìn)階落地離線回放、多設(shè)備輪詢與 CSV 導(dǎo)出的三個(gè)實(shí)戰(zhàn)技巧鏈路穩(wěn)定跑起來之后有三件小事能讓它從能用的工具變成省事的生產(chǎn)工具。都是小改動(dòng)但日常維護(hù)和排查問題時(shí)的體驗(yàn)完全不一樣。5.1 原始字節(jié)留檔排查現(xiàn)場(chǎng)問題的后悔藥private FileStream _rawLogStream; private void InitRawLog() { string file raw_ DateTime.Now.ToString(yyyyMMdd_HHmmss) .bin; _rawLogStream new FileStream(file, FileMode.Append, FileAccess.Write); } private void OnDataReceived(object sender, SerialDataReceivedEventArgs e) { SerialPort sp (SerialPort)sender; byte[] buffer new byte[sp.BytesToRead]; int count sp.Read(buffer, 0, buffer.Length); if (count 0) { _rawLogStream.Write(buffer, 0, count); // 原始字節(jié)留檔 _rawLogStream.Flush(); AppendToBuffer(buffer); } }現(xiàn)場(chǎng)數(shù)據(jù)對(duì)不上、曲線莫名跳變的時(shí)候手里有原始字節(jié)流就能在開發(fā)機(jī)上離線重放復(fù)現(xiàn)解析邏輯的問題不用跑到現(xiàn)場(chǎng)接設(shè)備盲猜。二進(jìn)制日志按天切換文件名避免單文件過大?;胤艜r(shí)把文件里的字節(jié)按同樣節(jié)奏喂給解析函數(shù)配上時(shí)間戳打印問題定位很快。5.2 多設(shè)備擴(kuò)展按地址分表管理前面幀協(xié)議里的第二字節(jié)是設(shè)備地址。要接多路溫度不需要改串口鏈路只要在解析層加一個(gè)字典把不同地址的幀分發(fā)到不同通道。private Dictionarybyte, ChannelData _channels new Dictionarybyte, ChannelData(); private void OnFrameParsed(byte address, double temperature) { if (!_channels.ContainsKey(address)) { _channels[address] new ChannelData(address); } _channels[address].Push(temperature); }ChannelData 內(nèi)部維護(hù)自己的曲線序列和 CSV 文件界面列表按行刷新即可。要注意如果下位機(jī)是上位機(jī)發(fā)查詢命令才回?cái)?shù)據(jù)的請(qǐng)求應(yīng)答模式還需要加一個(gè)查詢隊(duì)列輪流發(fā)送查詢幀每個(gè)通道一個(gè)超時(shí)計(jì)時(shí)器超時(shí)重發(fā)兩次再標(biāo)記斷連。這套邏輯加進(jìn)去后單機(jī)掛載的通道數(shù)取決于波特率和輪詢周期9600 波特率下輪詢 8 個(gè)通道、每通道秒級(jí)更新是可以接受的。5.3 CSV 導(dǎo)出 Excel 不亂碼BOM 頭那點(diǎn)事用 UTF-8 編碼直接寫 CSV在 Excel 里打開大概率亂碼因?yàn)?Excel 默認(rèn)按本地 ANSI 碼頁解碼。解決方法是文件開頭寫一個(gè) BOM 標(biāo)記。File.WriteAllText(path, \uFEFF csvContent, Encoding.UTF8);\uFEFF 是 UTF-8 的字節(jié)序標(biāo)記。加了它Excel 能正確識(shí)別編碼中文表頭和溫度數(shù)值都正常顯示。如果交付對(duì)象明確要求 GB2312用 Encoding.GetEncoding(GB2312) 寫也可以但默認(rèn)情況下優(yōu)先 UTF-8 with BOM跨平臺(tái)兼容性更好記事本、WPS、Excel 都能正確打開。從那以后我每次寫串口上位機(jī)都把原始字節(jié)留檔列為第一步哪怕協(xié)議再簡(jiǎn)單也先抓幀再寫解析。少了現(xiàn)場(chǎng)往返的折騰也少了很多看起來對(duì)不上號(hào)的玄學(xué)問題。這套源碼的工程文件、協(xié)議注釋和配置示例是配套的按這篇的順序把端口參數(shù)和幀協(xié)議改成一比一對(duì)應(yīng)再處理好 UI 刷新策略基本就能穩(wěn)定跑起來。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天综合~91| 亚洲国成人情色好看电影| 99综合视频一体| 超碰偷拍| 色婷婷视频| 伊人网青青| 欧美经典一区二区三区| 91欧美性| 久久综合婷婷| 亚洲色图欧美视频| 百度百度日本操逼| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 国产精品色片一区二区| 亚州日韩97| 国产精品一级特黄aaa大片在线观看| 国产美女91视频| AV天堂国产| 97国产精品久久久久| 日韩精品视频在线观看一卡二卡| 欧美精品久久久久久久久88| 日本色色视频网站| 精品亚洲| 久久精品女同亚洲女同13| 日本九九久久99播| 久久欧美性爱视频| 成人五级久久| 玖玖爱在线视频免费观看| 激情文学欧美| 欧美白嫩女HD| 吻戏激情性巴克| 精品丰满熟妇人妻一区| 伊人97色天使| 翔田千里av一区二区三区| 蜜臀无码视频在线观看| 91免费看中出视频| 蜜臀久久久| 精品久久人妻成人网| a片自拍直播视频| 欧美成人精品一区二区男人蜜臀| 中文字幕激情小说| 久湿久久| 亚洲性综合| 国产在线播放成人免费| 麻豆区久久久久亚| 天天综合青苹果| 夜夜狠狠躁日日躁色视频| 色一射色一射| 91美腿丝袜在线观看| 色综合天天| 先锋色眉乱伦资源| 一级AV性爱| 欲香欲色| 亚洲制服欧美另类内射| 26uuu国产成人综合| 亚洲日韩精品久久久久一区壹牛| 好吊色综合| 91美女国产在线| 熟女中出视频| 欧美洲精品一级| 亚洲97资源| 日韩人妻精品中文字幕| 97资源欧美| 亚洲情色图片区| 成人在线视频一区| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 男人的天堂99| 日韩视频精品在线观看| 亚洲综合中文字幕有码| 国产又粗又又黄又猛| 少妇蜜汁| 99国产在线绯色一区| 97操操| 欧美成人性爱视频大全| 九九久久综合| 蜜桃成人1区2区3区| 欧美特大黄一级片片免费| 丁香五月婷婷基地| 7月婷婷综合| 人人摸人人舔一区二区| 麻豆精品一区二区三区四区免费观看| 99久久久无码精品国产人| 国产精品白丝| 男人的天堂一区三区| 超碰超碰95| 97超碰69| 91欧美巨乳| 不卡在线观看视频| 色色五月天婷婷| 五月天综合网| 国产高清亚洲日韩一区| 六月丁香啪啪啪| 97频视在线| 不卡在线观看视频| 99爱精品| av影院十区| 成人性爱av.com| 一区二区三区网站日日骚| 九九国产| 极品欧美一区二区三区| 色天堂综合| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 秋霞成人一级在线观看| 久久久久久久9最新免费视频观看| 亚洲一区二区 麻豆传媒| 久久久久久久| 色天使亚洲综合在线观看| 国产免费一区在线观看| 成人小电影网站tex| 东北丰满熟女国产一区| 五月天精品| 午夜一区二区三区国产| 91国产大片| 视频不卡中文字幕| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 婷婷五月天成人| 日韩欧美天堂| 国产精品蜜乳AV| 久久熟女久| 国产日韩色综合| 新版天堂中文资源8在线| 色悠久久久av| 亚欧高清v| 欧美第五页| 黄色香蕉视频网站一区| 二级久久网| 亚洲欧美清纯| 91逼逼女人91| 色视频蜜乳| 国产精品久久久久绯色| 欧美激情另类一区二区| 欧美日韩理论一区| 伦激情人妻另类人妻| 97久久超碰国产网站| 欧美爱三级日韩久久| 成人在线视频网| 亚洲熟妇白浆无码AV| 五月天黄色激情视频| 男人天堂久久精品不卡| 国产无码一二三区| 91女日逼| 亚洲AV免费在线观看| 欧美激情性久久久久久| 日日干夜夜欢| 久久久久久人妻| 精品国产乱码久久久久久蜜臀| 免费A V在线播放| 欧美大香蕉同搞| 天天综合网亚洲综合网| 偷拍 精品另类 凸凹了四区| 日本欧美韩国国产在线| 青青草中出视频| 亚洲欧美精品一区天堂久久| 国模无码人体一区二区三| 超碰97欧美日韩| 久久久久久久人妻| 久草国产在线视频| 97色碰| 日韩懂色网| 久久久麻豆精品| 国产毛片片精品天天看视频| 九七毛片九九毛片 | 日本2020一区二区| 97精品国产手机| 亚洲一区二区性爱电影| 亚洲高清无毛一区二区| 久久高潮妇女视频| 欧美成人一区二区| 国产有码一区| 亚洲天堂第一页| 综合网色| 强奸乱伦日韩AV| 影音资源男人日韩| 日日骚 av| 亚洲另类电影| 国产精品久久久久中文字幕| 日韩啊V| 美女91av| 1二区9| 丝袜AV一二三区| 金莲网址| 日小BB小视频| 午夜亚洲国产理论秋霞| 欧美性爱无码一区二区三区| 九热中文字幕| 日韩精品午夜操呦呦不卡影院| 伊人久久大香线综合无码| 亚洲风情综合网| 91色综合激情| a男人的天堂久久一级A毛片| 久久国产成人精品国产成人亚洲| 欧美草草高清日韩视频| 我想要啊 啊 啊| 天美精品一区二区三区四区在线观看| 国产精品情侣啪啪| 亚州精人品大香蕉| 熟女精品一区二区三区| 国产av强奸美女| 青娱乐999| yiqicaoav| 91丝袜美女视频| juliaann欧美丝袜办公室| 鸥美极品| 日本在线15p| 青操影院| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 嫩草影院在线观看精品| 一级特级aaaa毛片免费观看| 亚欧无码在线| 亚洲超碰在线| 99精品在线播放| 日韩欧美亚洲一区二区三区影院| 夜色AV无码手机在线影院| 97在线观视频免费观看| 青青草中文-久久青草精品一区二区三| 日韩久久激情精品| 99色热| 狠狠狠狠狠狠| 国内91熟女人妻丝袜天天精品视频在线| 五月天成人综合| 午夜丁香| 99热超碰| 激情四射婷婷六月天| 90后后入| 国产99热| 波多野结衣AV无码一区| 黄色在线网站| 另类天堂| 无码人妻精品一区二区三区九九 | 久九九九| 日韩精品一区二区日韩| 亚洲一区二区三区欧美日韩| 久久久久久久极品香蕉视频| 中文字幕乱码人妻一区二区三区,99精品| 色妹子A V| 午夜福利区| 伊人色综合欧美| 激情文学亚洲| 久久婷婷电影网| 一线黄色免费性爱片| 国产福利精品最新在线| 国模限制级电影| 99久在线精品99re8热视频在线| 亚洲综合草草| 青娱乐休闲视频在线观看| 操逼免费视频无码国产| 影音先锋国产精品| 高树玛利亚无码流出| 一区二区视频你懂的| 91操熟女视频| 超碰国产精品无码| 蜜桃视频精品一区二区| 蜜桃精品视频一区二区三区| 人人爱人人乐人人操| 精品偷拍13p欧美dodk视频| 国产成人网| 夜夜躁狠狠躁日日躁av| 久操网线| 91色鬼| 久久久久96| 99e久久国产精品| 天天天天天干夜夜夜夜夜操| 欧洲与亚洲欧美精品中文字幕| 99久久久| 男人a天堂手机在线版| 九九热精品免费视频| 亚州欧美总和| 国产精品高潮呻吟av久久4虎| 成人免费在线网站| 欧洲精品一区二区三区| 搡老女人老91妇女老熟女| 日本一区二区成人在线| 欧美日动态视频| 97免费视频在线观看| 中文字幕免费看大片| 97免费免费视频网| 亚洲自拍偷拍视频在线| 日本99视频| 国产久久久久影院老熟女| 青娱乐999| 五月天成人综合| 久久精品国产久精国产| 激情 欧美 亚洲 小说| 人妻激情偷乱视频一区二区三区 | 少妇色| 五月激情视频| AV色女综合| 国模少妇一区二区三区| 大香蕉2017| 国产成人免费观看在线视频| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 国产精品一区二区三区在线| 手机看片1025| 97超碰公开| 无码日韩网站| 伊人宅男大香蕉| 天天日B夜夜干B时时操B| 97日视频| 91在线视频观看国产| 物尤视频一区二区| 亚洲密乳AV| 国产乱弄免费在线视频。| 亚洲电影中字一区二区| 国产av热热色| 亚洲情色中文字幕一区| 午夜爽爽爽| 欧美|91色综合| site:sinbotex.com| 人妻天天夜夜爽一区二区| 夜夜爽夜夜操| 伊人国产视频| 日韩精品黄片免费观看| 国产美女高潮视频| 国产13区| 日韩一级成人毛片免费观看 | 午夜福利在线合集| 91男人综合| 天天日少妇逼AV| 免费a v| 欧美综合在线91| 国产欧美成人第一页在线观看| 超碰1997| 五月婷在线| 天美传媒AV在线播放| 艳美熟妇先锋一二三区| 无码又爽又硬又激情免费视频| 另类av天堂| 东京热不卡视频| 亚洲极品| 操逼操操操91| 77国产精品| 国产操偷| av影片在线观看不卡| 啊啊啊啊啊啊好湿好爽视频| 成人免费不卡在线视频| 1000部熟女视频在线观看| 99www.bibizy香蕉资源国产一区二区三区高清| 国产午夜无码片在线观看影视 | 97久久国产| 天天α片| 天天欧美色| 久久久久免费看少妇A片特黄| 超碰色美女| 欧美大香蕉97| 嗯嗯嗯嗯啊啊啊好紧好大| 伊人久久大香线蕉无码| 亚洲国产综合图区中文字幕| 99re在线视频| laoshunv91| www久久久| 国产特级毛片AAAAAA高潮流水| 欧美92| 天海翼久久| 亚洲色欲一区二区三区| 亚洲AV小说| 亚欧国产无码精品在线| 天天做日日做| 国产成人亚洲精品无码最新在线| 九热久| 亚洲天堂 视频你懂的| 三级日韩一区二区三区| 丰满人妻一区二区三区免费 | 狠操91,com| 亚洲综合网图| 日韩精品.久久精品.AV女优.天美传媒| 日韩人妻播放| 亚洲日韩美国人妻| 91爱做| 久久久久9久久久久| 日韩人妻一区二区精品| 青青操狠狠撩| 国产一区二区在线电影| 一级黄色性爱A级片| av一区二区三区不卡| 先锋女优在线观看视频| 亚洲人妻爽爽爽| 超碰97伊人| 亚洲欧美变态| 欧美亚洲特P| 免费男人的天堂| 91欧美巨乳| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 91狠狠综合网| 天天澡天天爽日日AV| 欧美+日产+中文| 国产精品国产精品国产| 超碰95| 粉嫩av在线| 久久久久九九九九| V A在线| 久久亚洲中文字幕视频| 国产精品4p在线观看| 18禁无码永久免费无限制| 超碰免费人妻人人| 亚洲一区二区三区AV无码| 美女写真| 五月激情影院| 97se综合网| 久久、1234| 欧美在线视频观看一二三四区高清| 大香网伊人久久综合网eew| 欧美页片| 新怡红院| 18禁无码永久免费无限制| 天天躁日日躁成人字幕aⅴ| 国产女人和拘做爰视频 | 精品人妻一区二区乱码一区二区| 亚洲精品人伦一区二区| 成人怡红院| 国产精品黄色三级av| 粉嫩不卡一区二区性爱| 69AV女优男人的天堂| 色超碰综合| 丝袜美腿丝袜| 综合国产影视三级| 综合一区中亚洲国产成人综合精品| 99操| 久久爽爽精品| 天堂成人网| 日本三级A片网站com| 黄片www.| 久久超碰大香蕉| 91n处女在线观看| 天天看天天干| 五月丁香色婷婷| 黄呦呦在线| 怡红院成人视频| 欧美黄色大片在线观看| 91婷婷伊人狠人| 天天超级碰碰碰| 久9无限国产| 日欧亚洲二三区大片不卡| 亚洲少妇色| 亚洲色图第一页| 欧美性爱精品七区| av中文字幕在线熟女| 啊嗯嗯啊好大好爽| 亚洲码在线中文在线观看| 性一交一乱一交A片久久四色| 亚洲影院小综合| 中国91AV| 国产亚洲国产超碰| 俞拍自拍| 亚洲国产欧美另类自拍| 精品久久久久黄少妇| 日韩欧美女求操每天更新| 欧美一级国产一级| 情色五月天网| 收看日本人日bb| 亚洲国产欧美日韩人妻日中文| 欧美人妻一区二区| 国产精品欧美日韩久久| 嗯嗯啊啊好疼| 日韩av不卡在线看| 国产精品熟女九九九| 国产精品点击进入在线影院高清| 国产日本久久免费精品| 久久超碰、| 少妇色| 亚洲五月丁香花狠狠干一区二区三区| 欧美视频一区二区三区| 国产精选三级在线观看| 天操天操夜操夜月操月年年操操| 国产www色在线观看| 热久久国产精品视频大陆精品| 欧美色宗合| 欧美1727免费观看视频| 97视频在线看| 国产传媒美日韩av| 亚州色图欧美色图| 在线色导航| 色香在线| 新婚人妻扶着粗大强行坐下| 美女91在线观看| 人人操,人人插| 亚洲大色堂| 超碰在线观看av不卡| 狠狠2050在线观看| 亚州操逼图| 肉丝无码中文高清| 99热这里只有精品8| 亚洲熟女综合一区二区| 日产国产精品中文久久婷婷| 午夜.DJ高清在线观看免费7| 国产又色又粗又黄又爽| 亚州熟妇精品| 六月激情婷婷| 亚洲全色网| 黄网站黄视频网站进入口| 亚洲精品国产熟女久久久久久| 蜜臀一二三| 丁香色色网| 丁香色狠狠色综合久久小说| 欧美A√综合网| 欧美人妻一区| 大肥女高潮bbwbbwhd视频| 久偷拍| 国产九九九九九九九九| 69一区二区三区| 91艹逼精品| 日本污ww视频网站| 日韩成人私密一级精品av| 国产熟女二区| 玖玖在线视频| 欧美丰满少妇xx高潮| 99久在线精品99re8| 校园春色综合| 日操粉逼逼| 五十路熟女人妻一区二区三区四区五| 美日韩在线不卡人妻| 国产女人成人精品视频| 少妇厨房愉情理伦片bd在线观看| 4tube欧美女厕所| 日韩99999色| 激情啪啪拍91| 岛国福利在线精品播放| 欧美综合1性辶| 日日夜夜草草草| 桃色五月天| 黄色片一区二区三区四区五区| 深爱伊人影院| 欧洲亚洲天堂精品| 香一区二区三区| 五月丁香社区婷婷日韩欧美精品影院 | 亚洲综合欧美| 日本久久久久久久久久| 精品九九淫乱男| 欧美极品女人的天堂| 成人乱码一区二区三少妇| 老司机福利青青草| 大鸡巴久久| 麻花豆传媒剧国产MV出差| 欧美人妻少妇| 风间由美日韩欧美久久| 中文字幕欧美日本乱码一线二线| 久久九七| 欧美亚洲第1页| 精品久久視頻在线| 六月丁香久久| 蜜臀操逼黄色视频操的好爽| 天天艹天天日| 色屁屁影院www国产| 国产精品扒开腿做爽爽爽视频| 91色射| 综合天天。| 亚洲有码第一页| 国产丰满熟夫69mpp| 蜜桃中文字日产乱幕4区| 先锋精品av色鲁| 婷婷五月天激情四射| 一区二区娱乐网站| 99久久99九九99九九九| 欧美一级A片在线看视频性色| 日韩不卡在线一区二区| 日本欧美一区二区三区免费| 性色av蜜臀av色欲aV| 天天日天天搞天天干| 久久丁香久草综合网| 1769成人国产精品视频| 国产午夜福利专区综合| 亚洲无码超碰免费| 免费观看性欧美一级| 思思热在线视频免费| 老司机午夜精品视频| 国产精品女aA片爽爽视频| 97在线观看| 中文字幕黄片在线| 一本精品日本在线视频精品| 中日韩久久久| 久久精品性| 人妻激情偷乱视频一区二区三区| 美腿色图| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 99综合视频一体| 性爱动态120秒| 中文字幕艹艹| 欧美人妻中出| 欧美日韩系列| 中欧人妻丝袜中文字幕| 家庭乱伦国产| 免费人成?大片在线播放| 天天日少妇逼AV| 人人污日韩一区二区| 丁香九月 婷婷| 岛国大片在线观看网站入口| 婷婷综合网站| 青青草视频在线观看一区二区| 热久久国产精品视频大陆精品| 职场同事知名国产国产精品久久欧美日韩| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 蜜臀久久久99久久久久 | 亚欧美天堂在线| 亚洲熟女乱色一区二区三区久久久| 美女黄色91| 欧洲性爱无码区| 亚洲中文国际强奸字幕| 久久女人一区二区三区| 久久国产精品熟女人妻| 久久一区二区蜜桃| 国产精品呦一区二区三区| 婷色五月| 日日日大屁股骚女人精品| 600国产精品视频| 国产成人自拍视频视频| 在线黄页看毛片| 一区二区三区色综合| 蜜臀中文字幕| 国产吞精a级片激情电影| 色哟哟-国产专区| 成人AV在线网站| 国产 亚洲 一二三四| 中文字幕在线免费观看视频| 欧美成人色| 国产一级高清免费观看| 亚洲 欧美日韩 另类| 亚码激情| 日本精品性生活久久久| 亚洲97资源| 上海一级黄片| 四虎884a| 91处女在线观看| 九九aV| 亚洲女人毛茸茸91| 91精品女厕偷拍视频| 人人色人人射人人妻| 欧美se综合| 欧美强奸一区二区诱惑| 精品性爱久久视频| 在线综合 亚洲 欧美中文字幕| 亚洲国产欧美日韩人妻日中文| 国产一二三福利视频网| 职场同事知名国产国产精品久久欧美日韩 | 无码乱人伦中文视频| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 91色黑人少妇| 亚洲欧美日韩偷拍色图| 校园春色综合| 亚洲色图91| 澳门特级毛片免费观看| 免费人人搞97| 蜜臀久久99精品久久久| 偷拍 精品另类 凸凹了四区| 亚洲性天堂| 日韩欧美视频青青| 啪啪自拍九九综合| av天堂影视中文在字幕在线中文| 天天亚洲| 91在线视频免费中出| 大香蕉伊人网| 午夜精品久久久久久久99热影院| 黄色香蕉视频网站一区| 亚洲男人的天堂AV| 亚洲免费成人在线高清无码视频 | 岛国在线免费视频| 97超碰亚洲| 中文字幕一区二区在线日韩精品| 久久精品国产精品| 美国日韩黄色片| 日韩精品三级| 国产剧情一区在线观看| 家庭乱伦麻豆| 亚州综合图片| 综合久久欧美| 人妻一区二区三区熟女| av在线浏览| 交换娇妻呻吟声不停中文字幕| 大香蕉综合在线| 久久肏大逼| 国产一区在线看| 91老司机在线视频免费观看| 大香蕉视频一二三区| 天天躁狠狠躁av| 影音先锋国产精品| 91无遮挡| 香蕉免费一区二区三区不读| 亚洲午夜AV| 亚洲高清视频在线免费观看| 91丝袜在线视频| 99精品久久久久久久婷婷蜜桃| 精品九九九九九九| 麻豆激情综合| 久热这里| 欧美精品99久久久**| 亚洲精品熟妇1区2区3区。| 青青草视频这里只有精品| 国产亚洲精品精AV.| 久久风骚城市| 96AV久久久| 国产一区二区啪啪视频| 天天日天天操天天射河南省| 色香综合天天影视综合 | 亚洲精品久久久久毛片A片拉屎| 亚洲无限观看| 中文字幕五区| 免费看国产曰批40分钟怎么下载| 97干在线视频| 香蕉免费一区二区三区不读 | 精品三级在线专区| 狠综合网| 丰满的三级少妇欧美久久久| 人妻精品视频一区二区三区| 久久久久深夜无码| 夜夜騷av、一區二區| 色99在线| 人妻人人做人人澡人人爽欧美一区| 78久久| 国产精品夜夜夜| 麻豆精品A片免费观看| 五月天激情国产综合婷婷婷| 97欧美性爱| 欧美人人操人人插| 日本一二区不卡| 91精品少妇搡搡搡| 99RE在线视频精品,这里只有精品| 99久久久99久久91熟女| 成年人性爱日韩| ,成人免费啪啪视频| 91一区二匹| 成年在线视频日本亚洲在线视频区精品江靖宇公司| 欧美图片色综合| 五月天激情小说网| 丁香五月婷婷基地| 中国女人内射6XXXXX| 日本成人免费一区二区三区| 国产精品操| 综合亚洲欧美| 国内外激情在线| 久久久久久九九九九九九| 日本东京热大香蕉a片| 超碰碰97| 久插综合| 天色综合网| 欧美无圣光在线| 天天综合亚在线| 天天爽天天| 色99视频| 久久精品人体| 骚货| 富二代亚洲精品99| 亚洲国产一区二区三区在线 | 婷婷国产精品一区二区| 日产精品久久久一区二区| 91在线丝袜| 人妻激情视频| 美女高潮国产高清| 97 色综合| 亚洲97| 国产无码三级视频在线观看| 中文字幕在在线观看网站| 午夜呻吟欧美| 91亚州欧美| 97欧美色资源| 91色s| 五月天婷婷社区| 狠狠干91| 色综合久久av| 在线看片国产精品每日更新| 狠狠激情综合狠狠操中文字幕| 久草视频分类在线| 综合色图区| 色老汉色| 中文久久96| 久久久涩| 狠狠久久手机视频精品| 色网在线视频观看免费| 国产精品熟女丝袜一区二区| 中文字幕高清20页视频| caopeng97人妻| 老司机午夜精品福利视频一区二区| 久久精品国产97欧美精品亚洲| 欧综合网| 在线播放一级无码视频| 超碰人人干| 老女人日韩美91| 色偷偷男人的天堂麻豆| 精品国产乱码久久久A| 亚洲欧洲自拍图片专区满春格| 欧美日韩操逼动图| 色情婷婷| 日韩少妇无吗| 九九九精品美女| 伊人操你| 99热国产| 九九九九九用不成了| 99热精品在线观看| 情趣丝袜无码操逼视频| 欧美黄色片AAAAA| 大香蕉 222| 天天操熟妇| 久久亚洲中文字幕视频| 青青草天天亲夜夜操网| 超碰综合色| 亚洲男人在线观看天堂| 日韩人妻有码免费视频| 五月综合色| 天天躁狠狠躁av| 91视频综合网| 亚洲国产欧美中日韩成人综合视频| 91男女啊啊啊| 97中文字幕一区| 色色网91| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 99热这里是精品| 久久同城AV| 伊人影院日本| 五月激情天| 欧美激情精品久久久| 夜夜操美女| 亚洲色图久久精品蜜| 蜜桃臀AV在线| 男人的天堂VA| 久久精品成人| 婷婷激情五月天小说网| 人妻 欧美 中文| 老熟妇一区二区三区…| 九九九九热| 成人婷婷丁香| 日韩97精| 乱欲一区二区| 午夜啊啊啊| 12一15性XXXX粉嫩国产| 色色色热| JuliaAnnXXX888| 国产一区二区在线电影| 久久久久国产| 日韩欧美午夜一区二区| 伊人五月天青青草婷婷| 青青草中文字幕| 一二三区在线| 78操B| 国产一级片| 玖玖爱视频网站| 国产AV超爽| 深爱伊人影院| 五月天综合在线| 99re6在线视频播放免费精品| 中文字幕成人理论在线| 亚洲人综合| 手机在线看片免费人成视频| 老色鬼成人精品视频下载大在线观看| 美女写真| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 国产操逼逼网| 国产中文字幕在线| 日韩在线观看中文字幕视频| 中出91视频| 婷婷五月天色| 亚洲成人贴图| 97人人爱人人做人人乐| 嫩草美女久久| 亚洲精品蜜桃久久久久久久| 在线看片国产精品每日更新| 久久精品一区二区三区蜜桃臀| 在线观看黄色电话| AV色女综合| 99久久com免费视频′| 五月婷亚洲精品天堂| 综合网久久| 91成人久久| 啊啊啊啊免费视频| 97视频在线观看播放与子乱对白在线……| 国产精品爆乳懂色蜜乳| 神马午夜久久久| 熟女色综合久久| 18禁免费视频| 中出人妻中文字幕91在线| 香蕉久久国产AV一区二区| 一区二区高清视频| 91高跟美女在线播放| 首页中文字幕中文字幕免费| 久久久青青草| 操人妻逼91| 国产 丝袜 欧美中文 另类| 亚洲风情在线观看| 久久99手机免费视频| 久久‘黄片视频| 国产精品第一页国产大屁股视频免费区 | 大香蕉综合| 不卡av免费在线网址| 韩日巨乳美女免费视频在线观看| www久久99| 国产精品久久aV| 日韩专区久久久| 91oumei| 日本高清_区二区三区| 1024精品在线| 91国产美女丝袜足交精品视频| 极品色www影院| 97精品一区二区视频| 日本 情色 1区2区3区| 91在线免费观看处女| 国产精品久久久久久片| 国产一区在线播放| 久久久99999久网站| 女优视频第10页| 日本女优在线视频福利| 天天干天天操天天操夜夜操天天操| 蜜乳av一区二区三区四区不卡| 青青国产精品在线| 性爱乱伦一区| 老司机天天操| 日韩三级伊人| 中文字幕免费在线观看| 精品九九九九九九九| 久久久久13| 成人片在线播放| 欧美大香蕉同搞| 午夜性生活av免费在线看| 精品成人久久久人人亚洲| 国产精品视频播放| 一区二区三区 丝袜 高跟 美腿| 中国亚洲呦女专区| 一区操逼日比视频| 翔田千里爆乳巨臀无码| 蜜桃av色偷偷av老熟女| 又黄又硬又粗又长国产视频| 亚洲性图91| 白丝少妇一区二区| 一区黄二区黄| 精品久久青青草| 开心五月婷婷激情| 欧美性爱系列| 亚洲成?V人片在线观看福利| 熟女五十路一区二区三| 久久精品 六十路 熟女 欧美| 中文字幕三四区| 亚洲天堂资源网| 91亚洲图片| 中文字幕青青草| 91国产丝袜白虎| 人人妻人人色一区二区三区| 中文字幕文字幕无码一区二区三区电影99| 中文字幕免费观看| 操b网站亚洲无码| 天天碰操中国年青熟妇| 亚洲精品天天影视综合网| 91暧暧| 九月AV| 嗯嗯,好大,好爽,好骚| 大香伊人在线一区| 三级网站超变态精品| 综合天天网| 国产视频第2页| 操淫穴亚洲五月丁香| 午夜视频好爽啊| 99re公开精品免费视频| 亚洲精品第一| 欧美性爱另类综合| 97天堂| 精品久久久久,69国产成人精| 丝袜熟女2P| 欧美精品久久96人妻无码| 激情欧美日韩女同久久| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 国产精品福利视频播放| 视频黄色国产一级| 超碰成人国产| 天天影视色香色欲| 红桃视频高潮| 久久精品视| 91久热| 玖草在线视频| 中文字幕人成乱码熟女香港| 强歼乱伦资源网| 久久激情视频| 4141514逼喷水三级片| 欧美A√综合网| 亚洲人妻久久久| 国产日韩久久| 成 人片 黄色大片| 欧美一级A片在线看视频性色| 色五月婷婷麻豆在| 97色97好| 天天碰久久入| 免费观看日本操逼视频| 日韩精品免费高清视频在线| 91超级碰碰碰| 色盈盈影院| 国产精品69久久久久久久| 亚洲国产综合图区中文字幕| 丰满岳乱妇一区二区三区| 99色婷婷| 性色av一区二区| 国产日韩怡红院| 国产精品蜜臀久久久久无码AV| 探花激情视频| 欧美熟妇人体| 日本高清一本二本免费不卡| 欧美精品三区| 婬女免费一二三区A片| 97青青操视频| 亚洲双插| 久久久亚洲Av| 国产按摩一区二区三区| 人妻天天爽| 激情婷婷综合久久| 极品极品色影院| 1二区9| 亚洲国产丝袜熟女av| 天天日B夜夜干B时时操B| 在线天堂999| 五月天婷婷社区| 家庭乱伦性爱av| 少妇被玩视频二三区| 密臀在线视频| 探花熟女,姿勢到位,體驗感也到位| 1956日韩精品| 久草精品在线| 国产日韩在线播放| 久久久久久久久久久久黄色| 麻豆天美一区二区| 九九色图| 东北操逼| 成人av影院在线观看| 九九无码久久精品视频| 日曰骚久久精品| 国岛片视频| 欧美少妇色综合| 婷婷av在线中文字幕| 成人五月香网在线| 亚洲九九视频| 亚洲最大AV网| 九九九九免费高| 极品综合| 老熟女区| 成年人黄色视频免费| 久久香蕉国产传媒一区剧情天美| 校园春色美腿丝袜 | 欧美性爱一区二区三区| 高清无码国产亚洲| 国产少妇内射| 国产亚洲日本精品在线| 亚洲欧洲综合av在线| 日韩成人色图| 超碰97人妻| 丰满翘臀美女影院视频| 伊人国产成人av网站| 精品夜夜澡人妻无码| 东京热毛片177b2viP| 五月激情小说| 国产精品第一页国产大屁股视频免费区| www.99在线| 国产区在线| 日韩三级视频一区二区三区| 日韩大香蕉AV影片| 志村玲子视频一区二区| 91另类| 日韩av三四区| 亚洲精品乱码线路中文字幕| 农村妇女精品一区二区| 日韩亚洲中文字幕在线| 全球成人中文在线| 国产精品午夜高潮呻吟久久av| 日韩色图 一区二区| 亚洲成熟国产精品美女| 久久成人东京热人妻| 激情五月婷| 久久只有精品| 丝袜综合| 探花熟女,姿勢到位,體驗感也到位| 欧美第二页午夜| 欧美国产日韩高清在线| 啊啊啊爽爽| 天天看人人操屄犊摸阴| 51一区二区三区| 日韩欧美久久婷婷网站| 日韩人妻少妇 一区二区三区| 国产自制av蜜乳| 欧美韩国你懂得在线| 8050午夜少妇无码| 美女诱惑久久| 91艹逼精品| 日韩av影片在线观看| 97资源久久| 91久久堂| 91狠狠综合久久久久久| 精品无码一区二区三区色欲| 大香蕉之青青草原| 五月丁香婷婷色| 国产精品免费1区2区视频| 亚州欧美综合| 淫淫总合网| 97人人操人人摸| 亚州男人天堂| 超碰久久精品| 91大胆欧美| 中文字幕aⅴ在线视频| 97精| 五月天亚洲网| 亚洲情色1区| 亚欧高清在线| 日韩字幕一区| 0755午夜福利视频| 九九英色视频| 久久五月婷| 综合在线导航一区| 99re这里只有精品9| 毛片麻豆91糖心精品毛情片| 亚洲色人妻综合| 免费A V在线播放| 久久综合九色综合欧洲98| 精品女同一区| 欧美韩国你懂得在线 | 91狠狠色丁香婷婷综合久久| 久久天天艹| 欧洲精品一级二级精品综合视频综合| 夜夜 中文视频rt| 91精品国产综合久久久蜜臀| 女人午夜视频777| 亚洲精品成人动漫在线| 久久99国产精品| 国产精品电| 一区二区视频你懂的| 乱日视频| 五月婷婷综合激情| 18禁网站在线播放| 精品美女久久久久| 欧美色图亚洲激情| 亚洲 日本 不卡| 国产亚热在线久久| B049AV在线播放| 白丝少妇一区二区| 熟妇人妻一区二区| 欧美淫穴| 午夜免费视频1000| 日欧操屄视频| 久久6热视频免费观看| 这里只有精品视频在线观看麻豆| av一区二区三区不卡| 啊啊啊好想要| 中文字幕制服诱惑| 亚洲综合色图欧美| 五月天AV资源| 啊啊啊啊在线播放| 欧美中字不卡| 亚洲999综合| 加勒比五月天| 亚洲欧美日韩国产丝袜自拍中文| 久久欧洲| 国精综合一二三区影视| AV丝袜少妇| 国厂麻豆77q4| 操死我了嗯嗯嗯| 欧美熟女丝袜| 91欧美性| 久久视频,这里只有精品| 综合激情一一91| 亚洲精品黑丝| 色欧美色交综合| 97伊人超碰| 伊香蕉综合久久久久久久噜噜噜| 亚州欧美在线| 久久岛国| 丁香五月AV| 天天干美少妇一区| 嗯嗯啊操我| 欧美少妇一区二区三区| 天天综合影院91| 日韩中文字幕av在线播放| 97超视频在线观看| 后入式999|