日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

matlab制作以太网数据接收上位机_Python制作串口通讯上位机

發(fā)布時(shí)間:2024/9/30 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab制作以太网数据接收上位机_Python制作串口通讯上位机 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

????串口通訊具有簡單易用的特點(diǎn)廣泛應(yīng)用于測(cè)試設(shè)備的通訊和數(shù)據(jù)傳遞、單片機(jī)與計(jì)算機(jī)的通訊等,本案例基于Python語言制作一個(gè)用于接收燃油質(zhì)量流量計(jì)的串口通訊上位機(jī),實(shí)現(xiàn)數(shù)據(jù)的讀取和保存。

1. 相關(guān)知識(shí)點(diǎn):

1.1 Python GUI庫

GUI開發(fā)是開發(fā)具有用戶圖形界面的程序,在打包成可執(zhí)行文件.exe之后,具有用戶界面的程序具有更好地交互性和易用性,Python中常用的GUI庫如下:

Tkinter:是Python內(nèi)置的GUI庫,小巧簡單,著名的Python IDLE就是用tkinter實(shí)現(xiàn)的,在Windows, MacOS和Linux平臺(tái)均可使用,適合用于開發(fā)界面簡單的程序。

PyQt: 功能強(qiáng)大的GUI開發(fā)庫,具有方便的周邊工具支持,如QtDesigner, Eric等;但由于其功能強(qiáng)大,因此安裝較為繁瑣,運(yùn)行也較為龐大,此外還需掌握一定的C++知識(shí),PyQt同樣可應(yīng)用于Windows,Mac OS和Linux平臺(tái);該GUI庫適合開發(fā)界面復(fù)雜、功能強(qiáng)大的程序。

wxPython: wxPython則是tkinter和PyQt的一個(gè)折中選擇,功能也介于兩者之間,也具有與PyQt類似的可視化開發(fā)工具。

對(duì)于GUI庫的選擇,需要根據(jù)自己的需求而定,本例中由于制作的串口通訊上位機(jī)界面和功能都較為簡單,因此選擇最易上手的tkinter庫制作。

1.2 類和對(duì)象

?????? 面向?qū)ο蟮某绦蛟O(shè)計(jì)往往是GUI程序設(shè)計(jì)的基礎(chǔ),讓程序具有更好地封裝性。類(class)是對(duì)象的一種抽象,描述了對(duì)象的特征,包括數(shù)據(jù)和操作;對(duì)象(object)是類的一個(gè)具體化,是由數(shù)據(jù)及能對(duì)其實(shí)施的操作所構(gòu)成的封裝體。也就是說,類不占用內(nèi)存,而對(duì)象占用內(nèi)存。例如:“狗”這個(gè)概念即可看作一個(gè)類,而名叫“小黃”的這條狗則是“狗”這個(gè)類的具體化對(duì)象,它具有類的特征,占用“內(nèi)存“。

? ?

?圖片來源:中國大學(xué)Mooc—用Python玩轉(zhuǎn)數(shù)據(jù)

1.3 串口通訊

?????? 串行接口簡稱串口(COM口),是采用串行通信方式的擴(kuò)展接口。串行接口(Serial Interface)是指數(shù)據(jù)一位一位地順序傳送。其特點(diǎn)是通信線路簡單,只要一對(duì)傳輸線就可以實(shí)現(xiàn)雙向通信,從而大大降低了成本,特別適用于遠(yuǎn)距離通信,但傳送速度較慢。目前常用的串口標(biāo)準(zhǔn)有RS-232、RS-422和RS-485,在功能上主要差別體現(xiàn)在抗干擾能力、最大傳輸速度和最大傳輸距離上。在目前計(jì)算機(jī)上使用串口通訊需要配備一根USB轉(zhuǎn)串口線(如下圖),在正確安裝通訊線的驅(qū)動(dòng)后,可在計(jì)算機(jī)的設(shè)備管理器中看到相應(yīng)的COM口。

????在Python編程語言中,pyserial庫封裝了串口通訊模塊,可以像文件讀寫一樣操作串口,如用read,write等函數(shù),極大地簡化了串口的操作。使用pyserial之前需要對(duì)這個(gè)庫進(jìn)行安裝,方法非常簡單,打開cmd命令提示符界面,輸入pip install pyserial等待片刻即可自動(dòng)安裝好pyserial庫。

1.4 線程

線程(英語:thread)是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位。它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單位。一條線程指的是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中可以并發(fā)多個(gè)線程,每條線程并行執(zhí)行不同的任務(wù)。(上述內(nèi)容摘抄自百度百科)

一個(gè)線程中可以對(duì)另一個(gè)線程進(jìn)行操作,如創(chuàng)建、停止等,同一進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。Threading模塊是python眾多線程模塊中功能強(qiáng)大,易于使用的線程管理模塊,對(duì)線程的支持較為完善,絕大多數(shù)情況下,只需要使用 threading 這個(gè)高級(jí)模塊就夠了。

本例制作用于接收串口信號(hào)的GUI程序至少需要兩個(gè)線程,一個(gè)線程用于響應(yīng)用于對(duì)于GUI程序的界面操作,如點(diǎn)擊按鈕,另一個(gè)線程用于不停地接收并顯示串口數(shù)據(jù)。

1.5 通訊協(xié)議

通訊協(xié)議指的是數(shù)據(jù)通訊的方式,即通訊雙方約定好的數(shù)據(jù)解讀方法,若通訊協(xié)議不正確會(huì)導(dǎo)致接收到的數(shù)據(jù)沒有被正確地“翻譯”而無法獲取所需的信息。正確的通訊協(xié)議包括了正確地?cái)?shù)據(jù)線接線、正確的波特率和正確的數(shù)據(jù)格式等。本例中采用RS422的5線制接線方式,波特率為2400,1位起始位,8位數(shù)據(jù)位,1位校驗(yàn)位(奇校驗(yàn)),1位停止位。具體來說就是在起始位和停止位之間的8位數(shù)據(jù)位用于傳輸一個(gè)字符信息,典型地為ASCII碼字符,而一組完整的數(shù)據(jù)往往由多個(gè)ASCII碼字符組成,也就是需要進(jìn)行多次傳輸才能完整地傳輸出一組完整信息。在本例中,數(shù)據(jù)格式如下圖所示,每位數(shù)據(jù)位之間間隔20 ms,每一組數(shù)據(jù)以回車結(jié)束;一組數(shù)據(jù)發(fā)送完后間隔50 ms:

? ? ? ?由于串口通訊的特性,數(shù)據(jù)只能一位一位地傳輸,因此我們讀取串口數(shù)據(jù)也需要從緩存區(qū)一位一位地讀取,可以根據(jù)每位數(shù)據(jù)傳輸?shù)臅r(shí)間間隔來設(shè)定緩存區(qū)的讀取間隔,如在本例中可采用10 ms讀取一次的方式,讀取到有數(shù)據(jù)之后將數(shù)據(jù)傳送到程序中,并清空緩存區(qū),等待下一次讀取。

2 串口通訊上位機(jī)制作流程

2.1 最終結(jié)果

?????? 首先看一下本例中制作的串口通訊上位機(jī)的最終結(jié)果,如下圖所示。該上位機(jī)程序包含四個(gè)功能模塊:左上角的串口通訊,左下角的原始數(shù)據(jù)顯示,右上角的實(shí)時(shí)數(shù)據(jù)顯示,右下角的文件保存。

????具體的使用流程和功能如下圖:啟動(dòng)軟件后,首先需要選擇或者輸入串口號(hào),這里利用下拉菜單動(dòng)態(tài)識(shí)別可用串口;點(diǎn)擊開始采集之后,開始采集以及串口配置區(qū)域變?yōu)椴豢捎?#xff0c;停止采集按鈕變?yōu)榭捎?#xff0c;同時(shí)左下角的數(shù)據(jù)接收框開始顯示接收到的原始數(shù)據(jù),右上角的數(shù)據(jù)顯示框顯示轉(zhuǎn)換之后的數(shù)據(jù)信息;在想要保存采集數(shù)據(jù)時(shí),設(shè)置好右下角區(qū)域的路徑、文件名、數(shù)據(jù)名和采集數(shù)量之后,點(diǎn)擊記錄數(shù)據(jù)即可將當(dāng)前數(shù)據(jù)寫入到文件。在程序運(yùn)行過程中,原始數(shù)據(jù)區(qū)域會(huì)不斷地接收信號(hào),為了避免長時(shí)間的數(shù)據(jù)堆積導(dǎo)致運(yùn)行速度變慢,在數(shù)據(jù)滿300行或者點(diǎn)擊清空內(nèi)容按鈕時(shí),該數(shù)據(jù)框?qū)崿F(xiàn)一次清空操作;當(dāng)然,也可手動(dòng)點(diǎn)擊清空按鈕。

????在上面這張操作演示圖中,由于手邊沒有硬件設(shè)備,這里用了虛擬串口(左下軟件)和串口調(diào)試助手(左上軟件)來模擬實(shí)際的儀器所發(fā)送的串口數(shù)據(jù);右上角軟件為本文開發(fā)的采集軟件,其用到的串口也事先由虛擬串口配置好了。右下角是保存數(shù)據(jù)所在的文件夾。

2.2 堆代碼的枯燥過程

2.2.1 類的定義

?????? 對(duì)于GUI編程,通常將界面的控件、變量和函數(shù)封裝成一個(gè)類,在使用時(shí)實(shí)例化一個(gè)該類的具體對(duì)象,進(jìn)行相關(guān)的操作。通常而言,一個(gè)類的定義需要包含一個(gè)初始化函數(shù)和若干變量以及函數(shù),在類的對(duì)象實(shí)例化時(shí)自動(dòng)執(zhí)行初始化函數(shù)中的內(nèi)容;為了保證無論在類中哪個(gè)函數(shù)下定義的變量都具有整個(gè)類的作用域,往往需要在定義的變量前加self進(jìn)行聲明。如self.x這個(gè)變量的作用域是整個(gè)類,而直接定義的變量x作用域只有當(dāng)前函數(shù)中。在本例中類進(jìn)行如下的定義。更具體地,在后面將分模塊、分功能對(duì)代碼進(jìn)行解讀。

class myGUI: def__init__(self): #定義窗口界面、控件、變量、執(zhí)行的操作 #Self.varname defReadUART(self): #串口讀取操作 defSavetofile(self): #保存文件的操作GUI = myGUI() #實(shí)例化對(duì)象

2.2.2 窗口和控件的定義

?????? 在Tkinter中,界面的生成需要依靠代碼實(shí)現(xiàn),一個(gè)控件大約需要2-4行代碼即可,一般界面和控件的生成需要在初始化函數(shù)中完成,界面生成和部分控件的生成代碼如下:

def__init__(self): self.window = tk.Tk() self.window.title("油耗采集_byJianxiong Hua") self.APPlabel = ttk.Label(self.window, text = "FCM油耗采集軟件",font = ('黑體', 20)) self.APPlabel.grid(row = 1, column = 1, rowspan = 2, columnspan = 4,sticky = tk.N) self.frame_COMinf = tk.Frame(self.window) self.frame_COMinf.grid(row=3, column=1) self.RunInf = tk.StringVar(value = '請(qǐng)選擇串口號(hào)!') # TK變量,儲(chǔ)存提示信息 self.labelInf = ttk.Label(self.frame_COMinf, textvariable = self.RunInf) self.labelInf.grid(row = 3, column = 2, padx = 5, pady = 3)

????在上述代碼中,首先用self.window=tk.Tk()生成一個(gè)窗口,用于承載所有的控件,然后設(shè)置其title特性;然后以self.window為載體定義了一個(gè)叫做self.APPlabel的標(biāo)簽(Label)控件,該控件僅用于顯示信息,可對(duì)其text內(nèi)容和字體等進(jìn)行設(shè)置,然后用grid函數(shù)將其固定(若不固定則不會(huì)顯示在window上);同理,接下來定義了一個(gè)名叫self.frame_COMinf的Frame框,然后以這個(gè)Frame又定義了一個(gè)用于顯示運(yùn)行狀態(tài)信息的label。這里涉及到控件的變量傳遞:在Tkinter中控件之間傳遞變量需要用到TK變量,這里的tk.StringVar就是一個(gè)字符類型的TK變量,它與self.labelInf中的textvariable特征關(guān)聯(lián)起來了,在程序運(yùn)行中若想要更改self.labelInf顯示的信息只需要修改對(duì)應(yīng)的TK變量,這里是名叫self.RunInf的這個(gè)StringVar變量。更多的變量傳遞用法在后面有更詳細(xì)地介紹。

????除了label控件,還需要用到輸入框(Entry), 按鈕(Button), 下拉框(Combobox)等。值得一提的是,本例中的Entry, Button, Label和Combobox控件用的是ttk而非tk,二者在用法上幾乎相同,而ttk的界面顯示更加美觀,符合win7和win10的系統(tǒng)風(fēng)格。下面以Combobox為例,再介紹一下控件的定義:

???????self.labelBaudrate?=?ttk.Label(self.frame_COMinf,?text?=?'波特率:') self.Baudrate = tk.IntVar(value = 2400) #定義TK中的整數(shù)變量,存儲(chǔ)波特率 self.comboBaudrate = ttk.Combobox(self.frame_COMinf, width = 12,textvariable = self.Baudrate) self.comboBaudrate["values"] = (100, 300, 600, 1200, 2400,4800, 9600, 14400, 19200, 38400, 56000) self.labelBaudrate.grid(row = 5, column = 1, padx = 5, pady = 3) self.comboBaudrate.grid(row = 5, column =2, padx = 5, pady = 3)

?????? 上述代碼中combobox默認(rèn)的值為2400,若點(diǎn)擊下拉箭頭將出現(xiàn)數(shù)組中定義的100,300,……,56000等數(shù)值。

2.2.3 自動(dòng)查詢可用串口號(hào)

?????? 自動(dòng)查詢可用串口號(hào)即點(diǎn)擊串口的下拉框時(shí)動(dòng)態(tài)刷新可用串口,要想實(shí)現(xiàn)該功能需要在初始化函數(shù)中定義combobox時(shí)將對(duì)應(yīng)的函數(shù)與下拉框動(dòng)作相綁定,然后將動(dòng)態(tài)刷新串口功能在對(duì)應(yīng)的函數(shù)中實(shí)現(xiàn),具體如下:

def__init__(self): …… self.COM = tk.StringVar(value = '') #定義TK中的字符變量,存儲(chǔ)一個(gè)串口號(hào) self.comboCOM = ttk.Combobox(self.frame_COMinf, width = 12, textvariable= self.COM, postcommand = self.Port_List) #單機(jī)下拉時(shí)觸發(fā)self.Port_List方法 self.comboCOM.grid(row = 4, column = 2, padx = 5, pady = 3) …… def Port_List(self): port_list = list(serial.tools.list_ports.comports()) port_serial = [] #*******以下提取COM口的端口號(hào)******* if len(port_list) <= 0: self.RunInf.set("未找到端口!") else: for i in range(len(port_list)): port_serial.append(list(port_list[i])[0]) self.comboCOM["values"] = port_serial

?????? 上述代碼中涉及到兩個(gè)函數(shù),即__initial__()和Port_List(),前者為類的初始化函數(shù),后者為動(dòng)態(tài)獲取可用串口號(hào)并將其賦值給相應(yīng)的下拉框的功能函數(shù)。該函數(shù)通過postcommand=self.Port_List語句與下拉框的下拉操作相綁定。

2.2.3 按鈕的執(zhí)行函數(shù)綁定和串口打開

?????? 與下拉框綁定執(zhí)行函數(shù)的方法類似,對(duì)于按鈕控件則必須綁定相應(yīng)的函數(shù),以執(zhí)行點(diǎn)擊按鈕時(shí)的操作。這里以開始采集和停止采集按鈕為例進(jìn)行說明,具體代碼如下:

def __init__(self): …… #開始和停止按鈕 self.buttonStart = ttk.Button(self.window, text = "開始采集", command = self.Start) self.buttonStart.grid(row = 8, column = 1, padx = 5, pady = 3, sticky =tk.E) self.buttonStop = ttk.Button(self.window, text = "停止采集", command = self.Stop) self.buttonStop.grid(row = 8, column = 3, padx = 5, pady = 3) self.buttonStop.configure(state = 'disabled') self.ser = serial.Serial() #串口變量 …… def Start(self): self.ser.port = self.COM.get() #端口號(hào) self.ser.baudrate = self.Baudrate.get() #波特率 self.ser.timeout = 1 #超時(shí)設(shè)置,1s未讀取到數(shù)據(jù)則返回結(jié)果 strParity = self.Parity.get() #校驗(yàn)形式 if (strParity == "NONE"): self.ser.parity = serial.PARITY_NONE elif (strParity=="ODD"): self.ser.parity = serial.PARITY_ODD elif(strParity=="EVEN"): self.ser.parity = serial.PARITY_EVEN elif(strParity=="MARK"): self.ser.parity = serial.PARITY_MARK elif(strParity=="SPACE"): self.ser.parity = serial.PARITY_SPACE strStopbits = self.Stopbits.get() #停止位 if (strStopbits == "1"): self.ser.stopbits = serial.STOPBITS_ONE elif (strStopbits == "1.5"): self.ser.stopbits =serial.STOPBITS_ONE_POINT_FIVE elif (strStopbits == "2"): self.ser.stopbits = serial.STOPBITS_TWO self.RunInf.set("串口打開失敗!") self.ser.open() #打開串口 if (self.ser.isOpen()): #判斷是否成功打開 self.buttonStart.configure(state = 'disabled') self.buttonStop.configure(state = 'normal') self.comboCOM.configure(state = 'disabled') self.comboBaudrate.configure(state = 'disabled') self.comboParity.configure(state ='disabled') self.comboStopbits.configure(state = 'disabled') self.RunInf.set("已成功打開串口") self.uartState = True self.ReadUART() #調(diào)用讀取串口的程序 def Stop(self): #關(guān)閉串口 self.t.cancel() #停止定時(shí)器 if (self.ser.isOpen()): self.ser.close() self.buttonStop.configure(state = 'disabled') self.buttonStart.configure(state = 'normal') self.comboCOM.configure(state = 'normal') self.comboBaudrate.configure(state = 'normal') self.comboParity.configure(state = 'normal') self.comboStopbits.configure(state = 'normal') self.RunInf.set("已關(guān)閉串口!") self.uartState = False

? ? ? ?這段代碼列出了兩個(gè)按鈕(開始采集和停止采集)的功能函數(shù),具體通過定義Button控件時(shí)的command=self.Start/Stop屬性將Start/Stop函數(shù)與對(duì)應(yīng)的按鈕進(jìn)行了綁定,這樣在點(diǎn)擊按鈕時(shí)即可執(zhí)行對(duì)應(yīng)的函數(shù)。在initial函數(shù)中還需要聲明一個(gè)串口變量ser,然后再Start函數(shù)中對(duì)ser變量中的端口號(hào)port、波特率baudrate、校驗(yàn)parity、停止位stopbits、超時(shí)時(shí)間等進(jìn)行賦值,然后通過ser.open()打開串口,在判斷串口成功打開后,執(zhí)行串口讀取函數(shù)self.ReadUART()。該函數(shù)涉及到線程的使用,在2.2.4節(jié)進(jìn)行介紹。在Stop函數(shù)中需要執(zhí)行的操作就簡單得多,即停止掉線程的定時(shí)器以結(jié)束串口讀取線程,然后關(guān)閉串口,更改按鈕等控件的狀態(tài)。Normal為可用狀態(tài),disabled為不可更改的狀態(tài)(灰色)。

2.2.4 多線程

?????? 前面已經(jīng)提到,線程是在一個(gè)主程序下并行執(zhí)行的一些操作,在執(zhí)行時(shí)不受主線程的影響,尤其是在主程序需要執(zhí)行循環(huán)語句的情況下,往往需要啟動(dòng)新的線程去執(zhí)行其他任務(wù)。這里簡單介紹兩種基于python的多線程方法。

方法一:

import threadingimport timedef test_thread (): print(“testing thread”) time.sleep(0.5)thread1 = threading.Thread(target=test_thread)thread1.start()

?????? 方法一首先需要定義一個(gè)需要新線程執(zhí)行的函數(shù),這里是test_thread()函數(shù),然后利用threading.Thread語句聲明一個(gè)線程,目標(biāo)屬性為test_thread函數(shù),再用start方法啟動(dòng)該線程即可。線程啟動(dòng)后即反復(fù)不停地執(zhí)行test_thread()函數(shù),在主程序停止時(shí)線程也停止。可以用相應(yīng)方法

方法二:

import threadingdef test_thread (): print(“testing thread”) globaltimer1 timer1= threading.Timer(0.5, test_thread) timer1.start()timer1 = threading.Timer(0.5, test_thread)timer.start()

?????? 在方法二中,并沒有像方法一中那樣聲明線程對(duì)象,而是利用構(gòu)建線程定時(shí)器的方法實(shí)現(xiàn)新線程的構(gòu)建。在主程序中首先第一次構(gòu)建線程定時(shí)器并啟動(dòng)后,在執(zhí)行函數(shù)中也需要構(gòu)建線程定時(shí)器,這樣每次函數(shù)執(zhí)行完畢后都會(huì)有一個(gè)線程定時(shí)器對(duì)象對(duì)函數(shù)自身進(jìn)行調(diào)用,這樣也實(shí)現(xiàn)了線程的功能。這種方式較為靈活,用于簡單的線程操作,還可以用timer1.cancel()方法終止該線程。在本例中即采用的這種方式構(gòu)建串口線程。

? ? 本例中的串口線程關(guān)鍵代碼如下:

def Start(self): …… #打開串口的操作 ……????self.ReadUART()??#調(diào)用讀取串口的程序def ReadUART(self): …… #讀取串口數(shù)據(jù)的操作 …… self.t=threading.Timer(0.005,self.ReadUART) self.t.start() #啟動(dòng)定時(shí)器

????同理,檢測(cè)數(shù)據(jù)接收框長度并自動(dòng)清零的線程構(gòu)建如下:

def __init__(self):???????……??????#控件和變量的定義???????……???????self.MonitorText()??#啟動(dòng)文本框監(jiān)視器線程,到達(dá)一定數(shù)量后自動(dòng)清零???????self.window.mainloop() def MonitorText(self): if len(self.OutputText.get('1.0',tk.END)) > 500: #超過一定長度后自動(dòng)清零 self.OutputText.delete(1.0,tk.END) self.monitor=threading.Timer(0.1,self.MonitorText) self.monitor.start()

2.2.5 原始數(shù)據(jù)接收框

?????? 程序的左下角的文本框即為原始數(shù)據(jù)接收框,用于接收并顯示原始信號(hào),這是一個(gè)簡單的控件、按鈕、線程的結(jié)合使用。點(diǎn)擊清空內(nèi)容按鈕可清空接收框的內(nèi)容,或者在接收框接收到的數(shù)據(jù)長度超過500時(shí)自動(dòng)清空內(nèi)容。具體代碼如下:

???def?__init__(self): …… #其他控件和變量的定義操作 …… #**********************數(shù)據(jù)接收框************ self.frame_Recv = ttk.Frame(self.window) self.frame_Recv.grid(row = 9, column = 1) self.labelRecvName = ttk.Label(self.frame_Recv, text = '接收到的原始數(shù)據(jù):') self.labelRecvName.grid(row = 1, column = 1, padx = 5, pady = 1, sticky= tk.W) self.frameTransSon = tk.Frame(self.frame_Recv) #同一個(gè)frame用了grid不能用pack,因此建立一個(gè)子frame self.frameTransSon.grid(row = 10, column =1, rowspan = 6, columnspan =2, padx = 5, pady = 1) self.scrollbarTrans = tk.Scrollbar(self.frameTransSon) self.scrollbarTrans.pack(side = tk.RIGHT, fill = tk.Y) self.OutputText = tk.Text(self.frameTransSon, wrap = tk.WORD, width =30, height = 8, yscrollcommand = self.scrollbarTrans.set, font =('TimesNewRoman', 8)) self.OutputText.pack() self.buttonClearText = ttk.Button(self.frame_Recv, text = "清空內(nèi)容", command = self.ClearText) self.buttonClearText.grid(row = 17, column = 1, columnspan = 2, padx =5, pady = 1, sticky = tk.N) ……???????self.MonitorText()??#啟動(dòng)文本框監(jiān)視器線程,到達(dá)一定數(shù)量后自動(dòng)清零???????…… def ClearText(self): self.OutputText.delete(1.0,tk.END) def MonitorText(self): if len(self.OutputText.get('1.0',tk.END)) > 500: #文本超過一定長度后自動(dòng)清零 self.OutputText.delete(1.0,tk.END) self.monitor=threading.Timer(0.1,self.MonitorText) self.monitor.start() #啟動(dòng)定時(shí)器monitor

2.2.6 數(shù)據(jù)傳遞和計(jì)算

?????? 在本例的串口程序中,數(shù)據(jù)傳遞主要包括兩類,一類是控件間的數(shù)據(jù)傳遞,即將數(shù)據(jù)傳遞給控件用于顯示或者獲取控件上顯示的數(shù)據(jù);另一類是讀取串口緩存區(qū)的數(shù)據(jù),并做相應(yīng)的類型轉(zhuǎn)換后進(jìn)行相關(guān)的計(jì)算操作。

?????? 控件間的數(shù)據(jù)傳遞主要依靠的是一類叫做TK變量的特殊數(shù)據(jù)類型,其定義方式為a=tk.StringVar(value=’astring’),然后將該TK變量與相應(yīng)控件的textvariable屬性相綁定,如label1=ttk.Label(window, textvariable=a)。如此一來,在程序中無論何時(shí)何處只要對(duì)變量a (TK變量)進(jìn)行了修改,那么在label1上顯示的內(nèi)容也會(huì)隨之更改。除了StringVar類型外,TK變量還有tk.DoubleVar,tk.IntVar等類型,在使用時(shí)應(yīng)該注意給這些變量賦值時(shí)需要數(shù)據(jù)類型正確,否則會(huì)出錯(cuò)。

?????? 對(duì)于TK變量值的修改和讀取與傳統(tǒng)的變量有所不同,需要用到set和get方法。例如將剛才定義的a變量進(jìn)行值的修改,應(yīng)寫為:a.set(‘this is a string’),要獲取a的數(shù)據(jù)則應(yīng)寫為:b = a.get()。另外,除了TK變量外,對(duì)于包含內(nèi)容的控件來說,也可以直接用get和set方法來獲取和修改對(duì)應(yīng)控件的值。

?????? 對(duì)于第二類串口緩存區(qū)的變量,則需要用到python中的串口操作,用.read()函數(shù)讀取緩存區(qū)的變量,一般而言串口以SACII碼方式發(fā)送數(shù)據(jù),因此需要將數(shù)據(jù)解碼,然后進(jìn)行后續(xù)的操作。本例中的串口讀取部分代碼如下:

?? def?__init__(self): …… self.ser = serial.Serial() self.data = [] …… def ReadUART(self): if (self.uartState): try: ch = self.ser.read() self.RunInf.set("正在采集數(shù)據(jù)") ch =ch.decode('ASCII') #油耗儀中數(shù)據(jù)傳輸為ASCII,需要解碼 self.OutputText.insert(tk.END,ch) if ch == 'F': self.ch_flag = 1 #串口數(shù)據(jù)標(biāo)志位為1,表示是需要的數(shù)據(jù) if self.ch_flag == 0: self.data.clear() if self.ch_flag == 1: #如果是需要的數(shù)據(jù)則執(zhí)行以下操作 if ch != 'T': #讀取到T為止 self.data.append(ch) if ch == 'T': #所需要的數(shù)據(jù)是T之前的5位 self.ch_flag =0 #把標(biāo)志位置0 except: self.RunInf.set("發(fā)生錯(cuò)誤!") self.t=threading.Timer(0.005,self.ReadUART) self.t.start() #啟動(dòng)定時(shí)器

? ? ? ?在這部分代碼中,在初始化函數(shù)中聲明了一個(gè)串口操作變量ser,利用該變量可對(duì)串口進(jìn)行操作(2.2.3中介紹了如何打開串口)。在ReadUART函數(shù)中用ser.read()方法進(jìn)行串口讀取,一次讀取一個(gè)字符,然后用decode(‘ASCII’)函數(shù)進(jìn)行解碼(內(nèi)置的函數(shù)),將其插入到數(shù)據(jù)接收框中。接下來判斷讀取到的數(shù)據(jù)是否在后續(xù)計(jì)算中會(huì)用到,如果會(huì)用到則將其添加到data列表變量中(data.append(ch))。這樣一次讀取一個(gè)字符,然后該線程一直重復(fù)該過程即完成了串口數(shù)據(jù)的傳遞和計(jì)算。

2.2.7 文件保存

?????? 在本例中文件保存的邏輯如下:點(diǎn)擊保存按鈕后,在與之綁定的函數(shù)中將保存標(biāo)志位置為1;由于串口線程獨(dú)立于主線程并且無限循環(huán),因此在串口線程中檢測(cè)保存標(biāo)志位是否為1,否則不保存,是1則保存當(dāng)前的數(shù)據(jù)。具體地,保存數(shù)據(jù)時(shí)需要獲取路徑、文件名、寫入的內(nèi)容、寫入的數(shù)量等參數(shù),然后每保存一次,采集計(jì)數(shù)+1,直到保存的數(shù)量與設(shè)定的數(shù)量相等時(shí),將保存標(biāo)志位置0。具體代碼如下:

def ReadUART(self): if (self.uartState): try: ch = self.ser.read() self.RunInf.set("正在采集數(shù)據(jù)") …… if self.issave== 1: #判斷保存標(biāo)志位 self.Savefile() #執(zhí)行Savefile函數(shù) self.testCount.set(int(self.testCount.get())+ 1) ifint(self.testCount.get()) == int(self.testNum.get()): self.testCount.set('0') self.issave = 0 self.buttonSavetofile.config(state = 'normal') self.data.clear() #接收完數(shù)據(jù)后清空 except: self.RunInf.set("發(fā)生錯(cuò)誤!") self.t=threading.Timer(0.005,self.ReadUART) self.t.start() #啟動(dòng)定時(shí)器 def Savefile(self): filepath = self.filePath.get() filename = self.fileName.get() wholename = os.path.join(filepath, filename) #完整的路徑+文件名(無后綴) condition = self.conditionName.get() if os.path.exists(filepath) == False: os.mkdir(filepath) with open(wholename+'.txt', 'a') as f1: ls = [condition + '\t' + str(self.AvgFuel.get()) + '\n'] f1.writelines(ls)#===========保存按鈕執(zhí)行的函數(shù)============= def StartSave(self): self.issave = 1 self.buttonSavetofile.config(state = 'disabled')

2.2.8 生成可執(zhí)行程序

?????? 生成exe需要用到pyinstaller,因此需要首先利用pip install pyinstaller安裝該庫,具體生成exe步驟:

1. 啟動(dòng)命令提示符;

2. 在命令提示符中進(jìn)入到包含.py文件和.co文件的文件夾;(直接輸入E:可進(jìn)入磁盤,輸入cd 文件夾路徑即可進(jìn)入文件夾)

3. 輸入pyinstaller -D-i ?圖標(biāo)名稱.ico ?文件名稱.py --noconsole? (--noconsole作用是生成的exe文件在執(zhí)行時(shí)不出現(xiàn)黑色的dos界面)

4. 在dist文件夾中即可找到生成的可執(zhí)行文件,注意-D是生成一個(gè)包含多個(gè)文件的文件夾,若將-D替換為-F即可生成只有一個(gè)exe的可執(zhí)行文件,但其啟動(dòng)速度比-D的文件夾形式更慢.

在后臺(tái)回復(fù)“FCM”或“串口GUI”或“串口程序”可獲取本例的完整代碼、可執(zhí)行程序、虛擬串口軟件和串口調(diào)試助手的下載鏈接。

留言區(qū)

總結(jié)

以上是生活随笔為你收集整理的matlab制作以太网数据接收上位机_Python制作串口通讯上位机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

99色99| 人人插人人澡 | 在线看国产精品 | 日韩精品中文字幕有码 | 在线播放视频一区 | 色婷婷av一区 | 国产精品一区二区视频 | 五月婷婷中文网 | 欧美一性一交一乱 | 欧美最猛性xxxxx免费 | 天天操比 | 日日干视频| 国产69精品久久久久99 | 2020天天干夜夜爽 | 国产精品观看在线亚洲人成网 | 91精品国产福利在线观看 | 国产精品九九久久久久久久 | 九九九九九九精品任你躁 | 亚洲毛片在线观看. | 五月综合激情网 | 日韩在线视频播放 | 免费精品视频在线观看 | 精品久久九九 | 三级a毛片 | a级国产毛片 | 亚洲欧美视频一区二区三区 | 久久av中文字幕片 | 黄色三级网站在线观看 | 亚洲做受高潮欧美裸体 | 国产性天天综合网 | 国内精品一区二区 | 久久天天躁狠狠躁夜夜不卡公司 | 69夜色精品国产69乱 | 国产精品视频99 | 一级片免费观看 | 国产色道 | 亚洲高清免费在线 | 一级一级一片免费 | 日韩免费高清在线观看 | 亚洲精品玖玖玖av在线看 | 国产日韩欧美网站 | 久久99精品国产麻豆婷婷 | 五月婷婷在线观看 | 国产日韩精品久久 | 丁香久久综合 | 免费午夜在线视频 | 婷婷综合av | 亚洲一区精品二人人爽久久 | 日韩精品高清不卡 | 国产精品aⅴ | 国产午夜精品免费一区二区三区视频 | 久久精品视频网 | 国产丝袜 | 国产精品福利无圣光在线一区 | 国产精品h在线观看 | 婷婷六月天丁香 | 欧美日韩在线观看一区 | 91久久国产露脸精品国产闺蜜 | 日韩欧美一区二区三区视频 | 九色精品在线 | 久久精品99久久久久久2456 | 在线黄色国产 | 女人高潮一级片 | 国产69精品久久99不卡的观看体验 | 亚州五月| 99九九99九九九视频精品 | 69精品久久 | 亚洲视频1 | 夜夜躁狠狠躁日日躁视频黑人 | 久久激情综合网 | 中文字幕 国产视频 | 久久免费国产视频 | 一级片视频在线 | 网站在线观看日韩 | 三上悠亚在线免费 | 免费视频在线观看网站 | 亚洲色图色 | 亚洲闷骚少妇在线观看网站 | 尤物一区二区三区 | 久久国产经典视频 | 狠狠色丁香久久综合网 | 国产精品高潮久久av | 免费一级日韩欧美性大片 | 一区二区三区四区五区在线 | 国产系列 在线观看 | www.91av在线 | 91精品国产92久久久久 | 国产亚洲精品女人久久久久久 | 一区二区三区四区不卡 | 婷婷久久五月天 | 国产亚洲精品久久久久久无几年桃 | 97爱爱爱 | 午夜精品久久久久久99热明星 | 精品一区二区免费在线观看 | 夜夜躁日日躁 | 色综合久久精品 | 9999精品| 在线观看国产日韩欧美 | 色噜噜噜 | 国产精品久久久久久久久久久久久久 | 天天操天天操 | 午夜久久久精品 | 国内精品毛片 | www免费看片com| 日韩色视频在线观看 | 中文视频在线 | 亚洲aⅴ一区二区三区 | 成人网页在线免费观看 | 久草精品视频在线播放 | 六月天综合网 | www.亚洲精品在线 | 婷婷综合av| 免费高清看电视网站 | 午夜国产福利在线观看 | 欧美成人aa | 丁香婷婷激情啪啪 | 9色在线视频 | av免费网站观看 | 色婷婷综合久久久 | 国产91全国探花系列在线播放 | 99国产成+人+综合+亚洲 欧美 | 国产视频中文字幕在线观看 | 福利av影院 | 久久这里有精品 | 久久天天拍 | 波多野结衣日韩 | 久久精品亚洲一区二区三区观看模式 | 国产系列 在线观看 | 精品久久久久久久久久久久久久久久久久 | 三级av中文字幕 | 久久免费在线观看 | 18做爰免费视频网站 | 亚洲国产片色 | 日韩av看片 | 91激情视频在线 | 美女网站视频久久 | a v在线视频 | 999电影免费在线观看 | 日韩精品在线观看av | 亚洲在线视频观看 | 日韩欧美高清不卡 | 在线韩国电影免费观影完整版 | 日本不卡一区二区 | 国产黄色片免费看 | 国产精品久久久久9999 | 国产精品自产拍在线观看桃花 | 黄色免费高清视频 | 玖玖精品在线 | 91九色综合| 日韩在线免费视频 | 婷婷色婷婷 | 五月天高清欧美mv | 美女黄久久 | 日韩综合第一页 | 天天干天天操天天爱 | www.av在线播放 | 亚洲专区欧美专区 | 久久成人综合视频 | 国产手机在线观看 | 日韩一区二区三区高清在线观看 | 91| 久久精品国产成人 | 91在线免费播放 | 九九久久精品视频 | 成人免费看片98欧美 | 久久精品精品电影网 | 亚洲免费在线播放视频 | 国产一区在线免费观看 | 国产免费亚洲高清 | 日韩成人免费在线观看 | 新版资源中文在线观看 | 又黄又刺激 | 婷婷久月 | 天天人人综合 | 成人久久久精品国产乱码一区二区 | 国内精品视频在线 | www黄免费| 欧美性极品xxxx做受 | 97色综合| 久久伊人八月婷婷综合激情 | 日韩一级成人av | 久久久久国产a免费观看rela | 手机色站| 93久久精品日日躁夜夜躁欧美 | 日日干日日色 | 黄色小视频在线观看免费 | 美女黄色网在线播放 | 国产视频在 | 日韩视频专区 | 五月婷婷中文字幕 | 国产精品久久久久毛片大屁完整版 | 一区二区三区www | 国产精品乱码久久久久久1区2区 | 日韩免费小视频 | 久久精彩 | 久久久精选 | 日韩免费播放 | 99色| 国产精品少妇 | 国内外成人免费在线视频 | 国产黄色片免费观看 | 精品一区二三区 | 久久伦理 | 国产精品成人久久久久久久 | 国产系列精品av | а中文在线天堂 | 97在线精品视频 | 天天射天 | 特级西西444www大胆高清无视频 | 综合久久精品 | 日韩成人欧美 | 日日操天天爽 | 久草在线最新免费 | 国产精品视频内 | 国产精品手机看片 | 亚洲国产精品va在线看黑人 | 91精品国产91久久久久福利 | 97免费在线观看视频 | 91精品国产乱码久久 | 国产精品久久久久久久久大全 | 高清视频一区二区三区 | 九九九热视频 | 麻豆91精品91久久久 | 91精品国产综合久久福利 | 黄色在线观看污 | 久久精品99国产精品亚洲最刺激 | 久久97久久97精品免视看 | 亚洲精品美女久久久久网站 | 99r在线 | 婷婷色视频| 亚洲精品乱码白浆高清久久久久久 | 亚洲精品视频大全 | 香蕉精品视频在线观看 | 日韩欧美在线国产 | 久久一区二区免费视频 | 国产盗摄精品一区二区 | 97人人精品 | 国产一级免费观看视频 | 中国一级片在线观看 | 欧美激情视频一二三区 | 亚洲成a人片77777潘金莲 | 国产欧美三级 | 视频在线99 | 亚洲欧美激情精品一区二区 | 亚洲成人一二三 | 亚洲高清91| 欧美网址在线观看 | 亚洲成色 | 亚洲精品国产区 | 欧美91成人网| www.国产在线视频 | 久久精品视频在线观看免费 | 91porny九色91啦中文 | 久久伊人婷婷 | 久久亚洲私人国产精品 | 国产精品视频免费在线观看 | 探花视频网站 | 成人免费在线播放视频 | 日本爱爱免费视频 | 麻豆影视网 | 日韩有码在线播放 | 国内精品久久久久久久久久久久 | 国产香蕉av | 最近最新中文字幕视频 | 亚洲免费成人 | 日日日爽爽爽 | 91传媒免费观看 | 在线有码中文 | 欧美一区二区三区在线播放 | 天天久久综合 | 麻豆影视在线播放 | 久久高清 | 一级特黄aaa大片在线观看 | 97国产精品 | 欧美日韩午夜在线 | 毛片网站在线看 | 成年免费在线视频 | www.久久免费视频 | 国产精品毛片久久久久久久久久99999999 | 日韩欧美在线免费观看 | 在线一区电影 | 九九99 | 久久影视一区二区 | 国产高清中文字幕 | 69国产盗摄一区二区三区五区 | 婷婷视频在线 | 国产精久久久 | 中文字幕成人网 | 6080yy精品一区二区三区 | 亚洲国产精品99久久久久久久久 | 欧美老女人xx| 国产美女在线观看 | 成人a级免费视频 | 久久久影院一区二区三区 | 在线影视 一区 二区 三区 | 免费黄色看片 | 中文av免费 | 国产精品21区 | 美女视频免费一区二区 | 久久综合成人网 | 高清久久久 | 免费看三级网站 | 免费人成在线观看网站 | 91精品国产99久久久久久红楼 | 欧美做受xxx | 国产呻吟在线 | 美女视频黄的免费的 | 国产精品99久久免费观看 | av在线电影网站 | 欧美一区二区三区在线 | 国产淫片 | 中文字幕91 | 超碰日韩 | 999久久国产| 日韩r级电影在线观看 | 婷婷综合视频 | 天天操天天综合网 | 免费性网站 | 国产亚洲综合性久久久影院 | 中文字幕精品三区 | 天天艹天天操 | 一二三久久久 | 一级免费av | 五月天综合网站 | 国产精品 视频 | 国产一级电影网 | 在线看黄色的网站 | 精品1区二区 | 91一区在线观看 | 欧美伦理一区二区三区 | 国产精品s色 | 日日操天天爽 | 国产精品一区二区三区四区在线观看 | 免费看污在线观看 | 久久99亚洲精品 | 国产精品99久久久精品免费观看 | 99久热在线精品视频观看 | 精品视频在线看 | 黄色av电影在线观看 | 婷婷久操 | 久久精品视频免费 | 一本一道波多野毛片中文在线 | 免费在线观看国产黄 | 懂色av懂色av粉嫩av分享吧 | 久久精品xxx| 国产精品久久久久久模特 | 91av视频网站| 国产小视频在线 | 成人免费网站视频 | 911国产在线观看 | 久久激五月天综合精品 | 五月天久久久久 | 99c视频高清免费观看 | av成人免费在线看 | 香蕉视频国产在线观看 | 91亚洲精品乱码久久久久久蜜桃 | 欧美精品在线免费 | 亚洲春色综合另类校园电影 | 久久久久免费精品国产小说色大师 | 欧美黄色成人 | 五月天综合 | 亚洲人成人在线 | 国精产品满18岁在线 | 亚洲男男gaygay无套 | 久草精品电影 | 日韩乱码在线 | 日韩欧美观看 | 欧美精品亚州精品 | 一级一片免费看 | 丁香九月激情 | 日韩视频免费播放 | 丁香视频全集免费观看 | 久久色视频 | 成 人 黄 色 视频免费播放 | 91免费在线 | 久久久综合九色合综国产精品 | av播放在线| 欧美精品黑人性xxxx | 一区二区三区在线影院 | 五月黄色 | 国产精品一区二区在线观看免费 | 亚洲精品乱码久久久久久久久久 | 三三级黄色片之日韩 | 日韩专区一区二区 | 国产美女免费视频 | 黄色免费观看 | 人成电影网 | 中文字幕资源网在线观看 | 福利av在线| 国产一区福利 | 在线91播放 | 欧美日韩高清国产 | 天天操天天添天天吹 | 日韩av中文在线 | 国产拍揄自揄精品视频麻豆 | 亚洲精品午夜久久久 | 五月婷婷国产 | 美女网站一区 | 九九九九精品 | a视频免费在线观看 | 欧美成人按摩 | 亚洲欧美日韩精品久久奇米一区 | 国产精品视频内 | 99热国产在线中文 | 亚洲精品在线播放视频 | 国精产品满18岁在线 | 三级av在线播放 | 午夜在线看片 | 日本中文字幕影院 | 亚洲欧洲一区二区在线观看 | 91亚色视频在线观看 | 在线一区观看 | 久久综合免费视频影院 | 天天激情| 美女视频黄免费的 | www免费黄色 | 久久爱导航 | www.天天综合 | 免费观看v片在线观看 | 国产日本在线播放 | 精品 一区 在线 | 欧美激情精品一区 | 探花视频在线观看 | 久久香蕉影视 | 亚洲国产资源 | 久久免费精品一区二区三区 | 久草在线视频看看 | 久久老司机精品视频 | 国产99视频在线观看 | 91麻豆产精品久久久久久 | 91精品久久久久久久久久久久久 | 久久tv视频 | 亚洲va欧美va人人爽春色影视 | 制服丝袜亚洲 | 日韩在线视 | 黄色成人影院 | 免费看片网站91 | 五月婷婷综合激情网 | 视频一区久久 | 国产亚洲无 | 久久亚洲精品国产亚洲老地址 | 日韩精品在线视频 | 日韩精品一卡 | 色综合久久88色综合天天人守婷 | 丁香网五月天 | 中文字幕的 | 国产精品久久久久久久久毛片 | 一级理论片在线观看 | 黄色精品视频 | 国产精品色 | 久久久精品免费看 | 午夜av一区 | 最近中文字幕免费 | 手机成人在线 | 久久综合影视 | 中文有码在线视频 | 97在线观看免费高清 | 天天干天天在线 | 国产精品色视频 | www.玖玖玖| 欧洲一区二区三区精品 | 人人爽人人 | 最近中文字幕在线中文高清版 | 婷婷六月综合亚洲 | 国产在线综合视频 | 九九热免费在线视频 | 亚洲欧美日韩在线一区二区 | 91av短视频 | 国产精品二区三区 | 亚洲一区二区高潮无套美女 | 亚洲国产精品一区二区久久,亚洲午夜 | 久久最新视频 | 天天干天天综合 | 99在线免费视频 | 日韩久久精品一区二区 | 国产精品久久久久久久久久免费 | 黄色免费网站 | 亚洲乱码精品 | 天天操夜夜想 | 一区二区三区av在线 | 日韩欧美有码在线 | 国产又粗又硬又爽视频 | 免费av福利 | 91大神电影 | 国内三级在线观看 | 欧美精品二区 | 欧美精品午夜 | 视频在线观看国产 | 国产视频在线播放 | 免费看一级 | 成人va天堂 | 国产三级在线播放 | 在线黄色国产 | 亚洲视频资源在线 | 91天天视频 | 热久久免费视频 | 国产精品一区二区三区电影 | 国产视频在线播放 | 久久久久国产视频 | 亚州av网站| 日韩精品2区 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 国产小视频在线看 | 久久夜av| 黄色影院在线免费观看 | 正在播放国产一区 | 成人黄色小说在线观看 | 天天躁日日躁狠狠 | 亚洲最新av网址 | 日日爽视频 | 黄色app网站在线观看 | 国产精品久久久久久久久久了 | 久久一精品| 九九精品在线观看 | 人人舔人人干 | 国产精品一区二区果冻传媒 | 性色av免费在线观看 | 国产成人精品亚洲日本在线观看 | 9色在线视频 | 国产女v资源在线观看 | 国产精品1区2区在线观看 | 狠狠色丁香婷综合久久 | 少妇性bbb搡bbb爽爽爽欧美 | 综合精品久久 | 狠狠狠狠狠狠狠狠 | 国产 一区二区三区 在线 | 日韩av区 | 91在线免费公开视频 | 日批视频在线播放 | 国内精品久久久久久中文字幕 | 又色又爽又黄 | 国产在线观看a | 91高清一区| 99久久综合狠狠综合久久 | 欧美日韩高清不卡 | 久草在线在线视频 | 久久公开免费视频 | 麻豆免费在线视频 | 一区 在线 影院 | 最近2019好看的中文字幕免费 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 亚洲精品乱码久久久一二三 | 中文字幕 国产精品 | 久久免费国产电影 | 国产精品 中文字幕 亚洲 欧美 | 中文一二区 | 丁香资源影视免费观看 | 国产在线观看免费 | 欧美大片在线观看一区 | 亚洲婷久久 | 国产在线免费av | 最新国产中文字幕 | 欧美日韩一区二区免费在线观看 | 狠狠躁天天躁综合网 | 亚洲精品在线视频播放 | 欧美精品在线观看免费 | 国产又粗又猛又色又黄网站 | 一区二区中文字幕在线播放 | 911国产| 欧洲视频一区 | 久久视频二区 | 一区二区三区免费在线观看 | 99视频一区 | 免费成人黄色 | 精品嫩模福利一区二区蜜臀 | 国产高清不卡av | 五月天天av | 日本一区二区三区免费观看 | 日本精品免费看 | 久99视频| 国产精品久久久久久久久久久免费 | 人人干人人超 | 日韩成人av在线 | 日韩性xxxx | 中文字幕免费观看视频 | 午夜久久视频 | 久精品在线观看 | 五月天丁香| 欧美成人精品三级在线观看播放 | 久草视频在线新免费 | 天天色天天色 | 久久精品99精品国产香蕉 | 国产亚洲精品久久久久久移动网络 | 日韩aⅴ视频 | 2018亚洲男人天堂 | 狠狠色狠狠色合久久伊人 | 亚洲日本精品 | 久久免费av电影 | 在线观看v片 | 日韩欧美成 | 在线观看精品视频 | 亚洲国产福利视频 | 国产亚洲精品久久网站 | av电影在线不卡 | 日韩视频一二三区 | 日本福利视频在线 | 色在线视频 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 国产伦理剧 | 91免费观看视频在线 | 福利视频导航网址 | 亚洲码国产日韩欧美高潮在线播放 | 九九在线视频 | 天天躁天天操 | 成人午夜剧场在线观看 | 亚洲一区二区天堂 | 久草视频99 | 99热在线免费观看 | 久久视影 | 午夜精品剧场 | 91在线观 | 91av在线看 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 在线观看av网 | 国产剧在线观看片 | 国产精品日韩在线观看 | 欧美精品在线一区二区 | www.五月激情.com | 三级免费黄色 | 九九免费视频 | 日韩在线免费视频观看 | 激情黄色一级片 | 久久国产欧美日韩精品 | 日韩视频在线播放 | 9999国产| 欧美成人在线网站 | 中文高清av | 色在线视频网 | 碰超在线97人人 | 91在线porny国产在线看 | 69国产在线观看 | www国产一区| 色婷婷免费 | 人九九精品 | 9幺看片 | 91精品对白一区国产伦 | 日韩视频精品在线 | 超碰伊人网 | 色婷婷狠狠干 | 99国产视频 | 亚洲一区精品二人人爽久久 | 国产91精品一区二区麻豆亚洲 | 欧美爽爽爽 | 中文乱幕日产无线码1区 | 国产亚洲一区二区在线观看 | 69视频在线 | 中文字幕999 | 国产精品一区二区久久精品 | 91中文字幕永久在线 | 国产精品女主播一区二区三区 | 美女网站在线观看 | 久久女教师 | 观看免费av| 亚洲精品视频免费观看 | 国产黄| 午夜在线免费观看视频 | 亚洲精品一区二区在线观看 | 黄色网大全 | 亚洲一二三在线 | 最近中文字幕视频完整版 | 日本一区二区三区免费看 | 成人在线观看影院 | 黄色三级免费片 | 久久免费视频2 | www免费看片com| 欧美va电影| 亚洲aⅴ在线观看 | 六月丁香色婷婷 | 成人超碰97| 精品欧美一区二区在线观看 | 亚洲综合激情 | 麻豆91在线观看 | 美女视频久久久 | 韩日三级在线 | 久久激情视频 | 91九色视频网站 | 亚洲特级片 | 狠狠狠干| 亚洲成a人片在线观看网站口工 | 亚洲激情婷婷 | 久久手机看片 | 成人在线你懂得 | 国内精品久久久久久久影视麻豆 | 午夜国产一区 | 精品国产伦一区二区三区观看体验 | 欧美a级免费视频 | 日韩有码在线播放 | 成人国产综合 | 国产成人精品久久久 | 国产午夜在线观看视频 | 高清有码中文字幕 | 天天干天天射天天操 | 日本婷婷色 | 欧美日韩在线观看不卡 | 欧美在线观看视频一区二区 | 中文字幕电影在线 | 国内外成人在线视频 | 麻豆免费看片 | 蜜臀av夜夜澡人人爽人人 | 精品久久影院 | 日一日操一操 | 欧美在线视频日韩 | 中文在线a∨在线 | 美女av免费看 | 精品久久久久久久久久久久久久久久 | 婷婷丁香色综合狠狠色 | 久草在线视频新 | 在线成人国产 | a级国产毛片 | 精品久久国产精品 | 婷婷六月综合亚洲 | 欧美日韩国产二区 | 午夜精品成人一区二区三区 | 丁香av| 美女免费视频一区二区 | 99久久激情 | 亚洲资源网 | a久久免费视频 | aav在线| 国产视频2区 | 国产精品无av码在线观看 | 免费视频久久久久久久 | av日韩中文 | 色片网站在线观看 | 欧美精品一区二区免费 | 69热国产视频 | 久久综合爱 | 国产18精品乱码免费看 | 99精品欧美一区二区三区 | 五月天综合婷婷 | 中文字幕丝袜 | 欧美精品久久久久久久免费 | 在线免费av网站 | 天天操比 | 狠狠色伊人亚洲综合网站野外 | 91精品爽啪蜜夜国产在线播放 | 91精品视频网站 | 久草视频观看 | 激情片av| 摸bbb搡bbb搡bbbb| 国产一级淫片在线观看 | 欧洲不卡av | 久久久www成人免费毛片 | 香蕉视频免费看 | 久久草草热国产精品直播 | 久久一久久 | 欧美精品久久久久久久 | av一区二区三区在线 | 97碰碰视频| 久草网在线观看 | 久久精品79国产精品 | 国产精品69av | 伊人伊成久久人综合网小说 | 国产一级片网站 | 亚洲精品乱码久久久久久蜜桃动漫 | 国产精品999久久久 久产久精国产品 | 国产精品九九久久久久久久 | 国产一区二区电影在线观看 | 日批在线观看 | 国产高清 不卡 | 丁香婷婷电影 | 日韩成人免费在线电影 | 亚洲在线网址 | 久久亚洲私人国产精品 | 日韩综合视频在线观看 | 久草免费手机视频 | 成人h动漫精品一区二 | 欧美 日韩 视频 | 7777xxxx | 最近能播放的中文字幕 | 中文字幕在线免费观看视频 | 美女久久久久久久久久久 | 欧美日韩一区二区视频在线观看 | 天天色播| 久久精品人 | 亚洲另类交 | 色资源在线观看 | 日韩欧美视频一区 | 丁香花在线观看视频在线 | 丁香九月婷婷 | 日本黄色大片免费看 | 久久第四色 | 安徽妇搡bbbb搡bbbb | a视频免费在线观看 | 美女视频是黄的免费观看 | 色偷偷人人澡久久超碰69 | 黄在线免费看 | 97精品国自产拍在线观看 | 精品一区91 | 99久久久久国产精品免费 | 91成人免费视频 | 免费涩涩网站 | 2000xxx影视| 日韩激情av在线 | 婷婷激情五月 | 一区二区三区在线免费观看视频 | 国产不卡在线观看 | 中文字幕在线观看1 | 欧美性黄网官网 | 久久草在线精品 | 久久这里只有精品久久 | 欧美一区免费在线观看 | 黄色91免费观看 | 午夜精品电影一区二区在线 | 黄色三级免费 | 亚洲午夜久久久久久久久电影网 | 精品国产人成亚洲区 | 中文字幕精品一区二区三区电影 | 四虎在线观看精品视频 | 久久艹综合 | 国产精品久久久久久吹潮天美传媒 | 毛片播放网站 | 99精品国产免费久久久久久下载 | 在线电影 一区 | 人人爱在线视频 | 天天操天天干天天综合网 | 精品一二三四视频 | 色噜噜狠狠色综合中国 | 丁香花在线观看免费完整版视频 | 中午字幕在线 | 激情中文在线 | 亚洲高清不卡av | 韩国av电影在线观看 | 黄网站免费大全入口 | 国产成人a亚洲精品v | 亚洲精品午夜视频 | 18女毛片| 国产一级特黄电影 | 欧美日韩免费网站 | 国产只有精品 | 亚洲视频在线观看免费 | 日韩在线观看网址 | 欧美日韩国产一区二区三区在线观看 | 免费电影播放 | 欧洲精品久久久久毛片完整版 | 久久精品99视频 | 国产精品亚洲综合久久 | 狠狠躁日日躁 | 看毛片网站 | 久久久国产网站 | 国产成人精品日本亚洲999 | 在线观看91视频 | 91激情视频在线观看 | 欧美爽爽爽| 成人国产精品久久久春色 | 视频国产精品 | 亚洲精品在线观看中文字幕 | 久久色在线观看 | 91精品老司机久久一区啪 | 亚洲国产精品久久久久久 | 精品久久久久久亚洲综合网站 | 91视频3p | 久久久久久久久网站 | 在线免费观看黄色大片 | 国产色视频123区 | 国产精品高潮呻吟久久av无 | 97在线视频网站 | 久久精品二区 | 99热在线国产 | 日韩欧美成人网 | 波多野结衣一区二区三区中文字幕 | 日韩av网页 | 欧美人体xx| 国产精品毛片久久 | 国产不卡在线观看 | 成人av片免费看 | 国产精品电影在线 | 在线观看色网站 | 久久久综合香蕉尹人综合网 | 青青河边草免费观看 | 特黄特色特刺激视频免费播放 | 中文字幕在线观看视频免费 | 韩国av三级 | 国产欧美日韩一区 | 久久精品资源 | 黄视频网站大全 | 免费国产一区二区视频 | 久久综合精品一区 | 日韩精品久久久久久久电影99爱 | 国产一区二区在线播放 | 国产成人在线免费观看 | 天天干夜夜 | 九九九国产 | 精品国产99国产精品 | 91黄在线看 | 国产一区二区三区免费观看视频 | 日韩精品免费一区二区 | 青春草视频在线播放 | 亚洲精品乱码久久久久久9色 | 中文字幕精品三区 | 天天综合人人 | 一区二区三区 亚洲 | 黄色软件在线观看免费 | www.色婷婷.com | 中日韩欧美精彩视频 | 看v片| 天天干天天玩天天操 | 欧美一级在线看 | 九九爱免费视频 | 狠狠网 | 天天干天天射天天爽 | 国产精品久久久久久久久免费看 | 日三级在线 | 国产激情电影综合在线看 | 黄色片网站免费 | 久久精品视频免费观看 | 色资源网免费观看视频 | 免费观看成年人视频 | 97看片网 | 国产精品黑丝在线观看 | 又黄又刺激的视频 | 干av在线| 亚洲狠狠丁香婷婷综合久久久 | a天堂最新版中文在线地址 久久99久久精品国产 | 久久中文字幕在线视频 | 人人艹人人 | 中文字幕亚洲欧美日韩 | 欧美另类v| 欧亚久久| 久久久久久黄 | 天天爱天天操天天干 | 欧美精品久久久久a | 999视频在线观看 | 人人草在线视频 | 欧美巨大荫蒂茸毛毛人妖 | 亚洲精品免费在线播放 | 美女视频黄免费网站 | 国产精品18久久久久久首页狼 | 天天做天天爱天天爽综合网 | 久久tv| 91成人网在线观看 | 中文字幕在线观看亚洲 | 国内精品美女在线观看 | 黄色软件视频网站 | 在线观看成人一级片 | 亚洲欧美日韩不卡 | 开心激情网五月天 | 日韩在线不卡视频 | 婷婷在线观看视频 | 又黄又爽又色无遮挡免费 | 草久在线| av一区二区三区在线观看 | 国产在线中文字幕 | 中文字幕av电影下载 | 日韩电影在线观看一区二区三区 | 国产a免费 | 日韩一区二区免费播放 | 日韩精品一区二区三区三炮视频 | 国产精品久久视频 | 久久专区 | 欧美极品少妇xbxb性爽爽视频 | 在线综合 亚洲 欧美在线视频 | 日韩在线观看av | 亚洲热视频 | 五月天久久婷婷 | 激情综合网天天干 | 免费在线观看av片 | 久久露脸国产精品 | 欧美午夜a| 亚洲欧美日韩不卡 | 一区二区三区视频在线 | 精品久久综合 | 中文乱码视频在线观看 | 国产麻豆电影在线观看 | 欧美性久久久 | 亚洲精品久久久久58 | 日韩精品一区二区三区免费视频观看 | 久草国产在线观看 | 伊在线视频 | 亚洲精品视频网 | 九九视频在线 | 狠狠色丁香婷婷综合最新地址 | 久草在在线视频 | 久久综合五月 | 天天玩天天干 | 国产精品免费观看久久 | 国产女人免费看a级丨片 | 国产伦精品一区二区三区… | 黄色成人91 | 国产精品午夜av | 国产黄色精品 | 国产一区在线免费 | 少妇bbb搡bbbb搡bbbb | 91高清免费在线观看 | 欧美精品乱码久久久久久 | 欧洲激情在线 | 成人欧美亚洲 | 国产精品18久久久久久久久久久久 | 伊人久久电影网 | www欧美日韩| 日韩精品最新在线观看 | 在线日韩视频 | 婷婷五月情 | 又黄又刺激的网站 | 国产黄在线 | 韩国av一区二区 | 国产精品免费视频久久久 | 国产精品免费视频网站 |