黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術(shù)文章
文章詳情頁

Python實現(xiàn)CAN報文轉(zhuǎn)換工具教程

瀏覽:58日期:2022-07-26 13:01:46

一、CAN報文簡介

CAN是控制器局域網(wǎng)絡(luò)(Controller Area Network, CAN)的簡稱,是由以研發(fā)和生產(chǎn)汽車電子產(chǎn)品著稱的德國BOSCH公司開發(fā)的,并最終成為國際標(biāo)準(zhǔn)(ISO 11898),是國際上應(yīng)用最廣泛的現(xiàn)場總線之一。 在北美和西歐,CAN總線協(xié)議已經(jīng)成為汽車計算機(jī)控制系統(tǒng)和嵌入式工業(yè)控制局域網(wǎng)的標(biāo)準(zhǔn)總線,并且擁有以CAN為底層協(xié)議專為大型貨車和重工機(jī)械車輛設(shè)計的J1939協(xié)議。

CAN總線以報文為單位進(jìn)行數(shù)據(jù)傳送。CAN報文按照幀格式可分為標(biāo)準(zhǔn)幀和擴(kuò)展幀,標(biāo)準(zhǔn)幀是具有11位標(biāo)識符的CAN幀,擴(kuò)展幀是具有29位標(biāo)識符的CAN幀。按照幀類型可分為:1.從發(fā)送節(jié)點(diǎn)向其它節(jié)點(diǎn)發(fā)送數(shù)據(jù);2.遠(yuǎn)程幀:向其它節(jié)點(diǎn)請求發(fā)送具有同一識別符的數(shù)據(jù)幀;3.錯誤幀:指明已檢測到總線錯誤;4.過載幀:過載幀用以在數(shù)據(jù)幀(或遠(yuǎn)程幀)之間提供一附加的延時。共有兩種編碼格式:Intel格式和Motorola格式,在編碼優(yōu)缺點(diǎn)上,Motorola格式與Intel格式并沒有孰優(yōu)孰劣之分,只不過根據(jù)設(shè)計者的習(xí)慣,由用戶自主選擇罷了。當(dāng)然,對于使用者來講,在進(jìn)行解析之前,就必須要知道編碼的格式是哪一種,否則,就不能保證正確地解析信號的含義。以下就以8位字節(jié)編碼方式的CAN總線信號為例,詳細(xì)分析一下兩者之間的區(qū)別。

Intel編碼格式

當(dāng)一個信號的數(shù)據(jù)長度不超過1個字節(jié)(8位)并且信號在一個字節(jié)內(nèi)實現(xiàn)(即該信號沒有跨字節(jié)實現(xiàn)):該信號的高位(S_msb)將被放在該字節(jié)的高位,信號的低位(S_lsb)將被放在該字節(jié)的低位。

當(dāng)一個信號的數(shù)據(jù)長度超過1個字節(jié)(8位)或者數(shù)據(jù)長度不超過一個字節(jié)但是采用跨字節(jié)方式實現(xiàn)時:該信號的高位(S_msb)將被放在高字節(jié)(MSB)的高位,信號的低位(S_lsb)將被放在低字節(jié)(LSB)的低位。

Motorola編碼格式

當(dāng)一個信號的數(shù)據(jù)長度不超過1個字節(jié)(8位)并且信號在一個字節(jié)內(nèi)實現(xiàn)(即該信號沒有跨字節(jié)實現(xiàn)):該信號的高位(S_msb)將被放在該字節(jié)的高位,信號的低位(S_lsb)將被放在該字節(jié)的低位。

當(dāng)一個信號的數(shù)據(jù)長度超過1個字節(jié)(8位)或者數(shù)據(jù)長度不超過一個字節(jié)但是采用跨字節(jié)方式實現(xiàn)時:該信號的高位(S_msb)將被放在低字節(jié)(MSB)的高位,信號的低位(S_lsb)將被放在高字節(jié)(LSB)的低位。

可以看出,當(dāng)一個信號的數(shù)據(jù)長度不超過1Byte時,Intel與Motorola兩種格式的編碼結(jié)果沒有什么不同,完全一樣。當(dāng)信號的數(shù)據(jù)長度超過1Byte時,兩者的編碼結(jié)果出現(xiàn)了明顯的不同。

二、CAN報文轉(zhuǎn)換工具需求分析

1、 支持標(biāo)準(zhǔn)幀的CAN報文的轉(zhuǎn)換,擴(kuò)展幀暫不支持

2、 CAN報文支持Intel、motorola兩種編碼,先支持motorola格式,后期追加Intel格式

3、 工具具有一定的容錯處理能力、報告生成能力

4、 制定統(tǒng)一格式,方便使用者修改測試腳本

5、增加交互模式,鍵盤輸入,控制臺輸出;例如:

提示語:startBit:length:minValue:maxValue:setValue

輸入:35:1:0:1:1

或:35:1:::1

控制臺輸出:00 00 00 00 08 00 00 00

Intel和Motorola編碼舉例:

Python實現(xiàn)CAN報文轉(zhuǎn)換工具教程

三、交互模式

代碼如下:

import sysprint('----------------歡迎使用CAN報文轉(zhuǎn)換工具交互模式----------------')print('請輸入CAN信號,格式為:startBit:length:minValue:maxValue:setValue')print('例如:32:1:0:1:1')print('或者省略minValue和maxValue:35:1:::1')print('信號輸入結(jié)束請再按一次回車') #十進(jìn)制轉(zhuǎn)換成二進(jìn)制listdef octToBin(octNum, bit): while(octNum != 0): bit.append(octNum%2) octNum = int(octNum/2) for i in range(64-len(bit)): bit.append(0) sig = []startBit = []length = []setValue = []#輸入CAN信號while True: input_str = input() if not len(input_str): break if(input_str.count(':')<4): print('輸入格式錯誤,參數(shù)缺少setValue,請重新輸入!') continue if(input_str.split(':')[4]==''): print('setValue參數(shù)不能為空,請重新輸入!') continue sig.append(input_str)#解析CAN信號for i in range(len(sig)): startBit.append(int(sig[i].split(':')[0])) length.append(int(sig[i].split(':')[1])) setValue.append(int(sig[i].split(':')[4]))#CAN數(shù)組存放CAN報文值 CAN = []for i in range(64): CAN.append(-1)for i in range(len(startBit)): #長度超過1Byte的情況,暫不支持 if(length[i]>16): print('CAN信號長度超過2Byte,暫不支持!!!') sys.stdin.readline() sys.exit() #長度未超過1Byte的情況且未跨字節(jié)的信號 if((startBit[i]%8 + length[i])<=8): for j in range(length[i]): bit = [] #setValue的二進(jìn)制值按字節(jié)位從低到高填 octToBin(setValue[i],bit) #填滿字節(jié)長度值 if(CAN[startBit[i]+j]==-1): CAN[startBit[i]+j] = bit[j] #字節(jié)存在沖突 else: print(sig[i] + '字節(jié)位存在沖突,生成CAN報文失敗!!!') sys.stdin.readline() sys.exit() #跨字節(jié)的信號 else: #高位位數(shù)和低位位數(shù) highLen = 8 - startBit[i]%8 lowLen = length[i] - highLen bit = [] #setValue的二進(jìn)制值按字節(jié)位從低到高填 octToBin(setValue[i],bit) #先填進(jìn)信號的高位 for j1 in range(highLen): if(CAN[startBit[i]+j1]==-1): CAN[startBit[i]+j1] = bit[j1] #字節(jié)存在沖突 else: print(sig[i] + '字節(jié)位存在沖突,生成CAN報文失敗!!!') sys.stdin.readline() sys.exit() #再填進(jìn)信號的低位 for j2 in range(lowLen): if(CAN[(int(startBit[i]/8)-1)*8+j2]==-1): CAN[(int(startBit[i]/8)-1)*8+j2] = bit[highLen+j2] #字節(jié)存在沖突 else: print(sig[i] + '字節(jié)位存在沖突,生成CAN報文失敗!!!') sys.stdin.readline() sys.exit()#剩余位默認(rèn)值設(shè)為0for i in range(64): if(CAN[i]==-1): CAN[i] = 0#----------------將二進(jìn)制list每隔8位轉(zhuǎn)換成十六進(jìn)制輸出----------------#其中,map()將list中的數(shù)字轉(zhuǎn)成字符串,按照Motorola格式每隔8位采用了逆序# ’’.join()將二進(jìn)制list轉(zhuǎn)換成二進(jìn)制字符串,int()將二進(jìn)制字符串轉(zhuǎn)換成十進(jìn)制#hex()再將十進(jìn)制轉(zhuǎn)換成十六進(jìn)制,upper()轉(zhuǎn)換成大寫,兩個lstrip()將'0X'刪除,#zfill()填充兩位,輸出不換行,以空格分隔print(hex(int(’’.join(map(str,CAN[7::-1])),2)).upper().lstrip('0').lstrip('X').zfill(2) + ' ',end='')print(hex(int(’’.join(map(str,CAN[15:7:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2) + ' ',end='')print(hex(int(’’.join(map(str,CAN[23:15:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2) + ' ',end='')print(hex(int(’’.join(map(str,CAN[31:23:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2) + ' ',end='')print(hex(int(’’.join(map(str,CAN[39:31:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2) + ' ',end='')print(hex(int(’’.join(map(str,CAN[47:39:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2) + ' ',end='')print(hex(int(’’.join(map(str,CAN[55:47:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2) + ' ',end='')print(hex(int(’’.join(map(str,CAN[63:55:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2))

運(yùn)行截圖:

Python實現(xiàn)CAN報文轉(zhuǎn)換工具教程

錯誤提示:

Python實現(xiàn)CAN報文轉(zhuǎn)換工具教程

四、配置項模式

配置文件如下:

##注釋::start#編碼格式:0=Intel;1=MotorolaencodeType=1#幀格式:0=標(biāo)準(zhǔn)幀;1=擴(kuò)展幀;canMode=0#幀類型:0=數(shù)據(jù)幀;...canType=0#默認(rèn)初始值(0~1)defaultValue=0#MSG定義msgName=BCM_FrP01msgID=0x2CD#長度(BYTE)msgLength=8#signal定義#sigName=name:startBit:length:minValue:maxValue:setValue#sigName=ReverseSw:25:6:0:1:13#sigName=Trunk_BackDoor_Sts:33:2:0:1:2#sigName=DRVUnlockState:37:2:0:1:3#sigName=HeadLampLowBeam:40:8:0:1:60#sigName=HoodStatus:51:1:0:1:0#sigName=HeadLampHighBeam:52:1:0:1:0#sigName=RLDoorStatus:59:1:0:1:0#sigName=RRDoorStatus:58:1:0:1:0#sigName=PsgDoorStatus:57:2:0:1:0sigName=One:0:8:0:255:165sigName=Two:24:12:0:4095:1701sigName=Three:54:5:0:31:25::end::start#編碼格式:0=Intel;1=MotorolaencodeType=1#幀格式:0=標(biāo)準(zhǔn)幀;1=擴(kuò)展幀;canMode=0#幀類型:0=數(shù)據(jù)幀;...canType=0#默認(rèn)初始值(0~1)defaultValue=0#MSG定義msgName=BCM_FrPmsgID=0x2CD#長度(BYTE)msgLength=8#signal定義#sigName=name:startBit:length:minValue:maxValue:setValue#sigName=ReverseSw:25:6:0:1:13#sigName=Trunk_BackDoor_Sts:33:2:0:1:2#sigName=DRVUnlockState:37:2:0:1:3#sigName=HeadLampLowBeam:40:8:0:1:60#sigName=HoodStatus:51:1:0:1:0#sigName=HeadLampHighBeam:52:1:0:1:0#sigName=RLDoorStatus:59:1:0:1:0#sigName=RRDoorStatus:58:1:0:1:0#sigName=PsgDoorStatus:57:2:0:1:0sigName=One:35:1:0:1:1::end

代碼如下:

#!/usr/bin/pythondefaultValue = 0sigName = []startBit = []length = []minValue = []maxValue = []setValue = []#CAN數(shù)組存放CAN報文值CAN = []logFile = open('log.txt','w')def parseConfig(): config = open('Config.txt','r') count = 0 isError = False for line in config: line = line.strip() #注釋 if(line.find('#')>=0): continue #開始標(biāo)記 elif(line.find('::start')>=0): count = count + 1 isError = False if(count>1): sigName.clear() startBit.clear() length.clear() setValue.clear() continue else: continue elif(isError == True): continue #編碼格式 elif(line.find('encodeType')>=0): encodeType = line.split('=')[1] if(encodeType != '1'): isError = True print(str(count) + '. CAN報文生成失敗!!!目前僅支持Motorola編碼格式,暫不支持Intel編碼格式!') logFile.write('%d. CAN報文生成失敗!!!目前僅支持Motorola編碼格式,暫不支持Intel編碼格式!n' % count) continue #幀格式 elif(line.find('canMode')>=0): canMode = line.split('=')[1] if(canMode != '0'): isError = True print(str(count) + '. CAN報文生成失敗!!!目前僅支持標(biāo)準(zhǔn)幀,暫不支持?jǐn)U展幀!') logFile.write('%d. CAN報文生成失敗!!!目前僅支持標(biāo)準(zhǔn)幀,暫不支持?jǐn)U展幀!n' % count) continue #幀類型 elif(line.find('canType')>=0): canType = line.split('=')[1] if(canType != '0'): isError = True print(str(count) + '. CAN報文生成失敗!!!目前僅支持?jǐn)?shù)據(jù)幀,暫不支持其他幀!') logFile.write('%d. CAN報文生成失敗!!!目前僅支持?jǐn)?shù)據(jù)幀,暫不支持其他幀!n' % count) continue #默認(rèn)初始值 elif(line.find('defaultValue')>=0): global defaultValue defaultValue = int(line.split('=')[1]) #MSG名稱 elif(line.find('msgName')>=0): msgName = line.split('=')[1] #MSGID elif(line.find('msgID')>=0): msgID = line.split('=')[1] #MSG長度 elif(line.find('msgLength')>=0): msgLength = line.split('=')[1] #signal定義 elif(line.find('sigName')>=0): sigName.append(line.split(':')[0].split('=')[1]) startBit.append(int(line.split(':')[1])) length.append(int(line.split(':')[2])) #minValue.append(int(line.split(':')[3])) #maxValue.append(int(line.split(':')[4])) setValue.append(int(line.split(':')[5])) elif(line.find('::end')>=0): rV,errMsg = getCANMessage() if(rV == '-1'): isError = True print(str(count) + '. CAN報文生成失敗!!!' + errMsg) logFile.write('%d. CAN報文生成失敗!!!%sn' % (count,errMsg)) continue print(str(count) + '. CAN報文生成成功!!!') logFile.write('%d. CAN報文生成成功!!!n' % count) #----------------------------輸出標(biāo)題信息---------------------------- print('msgNamettmsgIDttmsgLenttmsgData') logFile.write('msgNamettmsgIDttmsgLenttmsgDatan') if(len(msgName)<8): print(msgName + 'tt',end='') logFile.write('%stt' % msgName) else: print(msgName + 't',end='') logFile.write('%st' % msgName) print(msgID + 'tt',end='') logFile.write('%stt' % msgID) print(msgLength + 'tt',end='') logFile.write('%stt' % msgLength) #----------------將二進(jìn)制list每隔8位轉(zhuǎn)換成十六進(jìn)制輸出---------------- #其中,map()將list中的數(shù)字轉(zhuǎn)成字符串,按照Motorola格式每隔8位采用了逆序 # ’’.join()將二進(jìn)制list轉(zhuǎn)換成二進(jìn)制字符串,int()將二進(jìn)制字符串轉(zhuǎn)換成十進(jìn)制 #hex()再將十進(jìn)制轉(zhuǎn)換成十六進(jìn)制,upper()轉(zhuǎn)換成大寫,兩個lstrip()將'0X'刪除, #zfill()填充兩位,輸出不換行,以空格分隔 print(hex(int(’’.join(map(str,CAN[7::-1])),2)).upper().lstrip('0').lstrip('X').zfill(2) + ' ',end='') print(hex(int(’’.join(map(str,CAN[15:7:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2) + ' ',end='') print(hex(int(’’.join(map(str,CAN[23:15:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2) + ' ',end='') print(hex(int(’’.join(map(str,CAN[31:23:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2) + ' ',end='') print(hex(int(’’.join(map(str,CAN[39:31:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2) + ' ',end='') print(hex(int(’’.join(map(str,CAN[47:39:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2) + ' ',end='') print(hex(int(’’.join(map(str,CAN[55:47:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2) + ' ',end='') print(hex(int(’’.join(map(str,CAN[63:55:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2)) logFile.write('%s ' % hex(int(’’.join(map(str,CAN[7::-1])),2)).upper().lstrip('0').lstrip('X').zfill(2)) logFile.write('%s ' % hex(int(’’.join(map(str,CAN[15:7:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2)) logFile.write('%s ' % hex(int(’’.join(map(str,CAN[23:15:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2)) logFile.write('%s ' % hex(int(’’.join(map(str,CAN[31:23:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2)) logFile.write('%s ' % hex(int(’’.join(map(str,CAN[39:31:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2)) logFile.write('%s ' % hex(int(’’.join(map(str,CAN[47:39:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2)) logFile.write('%s ' % hex(int(’’.join(map(str,CAN[55:47:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2)) logFile.write('%sn' % hex(int(’’.join(map(str,CAN[63:55:-1])),2)).upper().lstrip('0').lstrip('X').zfill(2)) config.close() #十進(jìn)制轉(zhuǎn)換成二進(jìn)制list def octToBin(octNum, bit): while(octNum != 0): bit.append(octNum%2) octNum = int(octNum/2) for i in range(64-len(bit)): bit.append(0) #獲取CAN報文值def getCANMessage(): CAN.clear() for i in range(64): CAN.append(-1) for i in range(len(startBit)): #長度超過1Byte的情況,暫不支持 if(length[i]>16): errMsg = ' CAN信號長度超過2Byte,暫不支持!!!' #print(sigName[i] + errMsg) return '-1',errMsg #長度未超過1Byte的情況且未跨字節(jié)的信號 if((startBit[i]%8 + length[i])<=8): for j in range(length[i]): bit = [] #setValue的二進(jìn)制值按字節(jié)位從低到高填 octToBin(setValue[i],bit) #填滿字節(jié)長度值 if(CAN[startBit[i]+j]==-1): CAN[startBit[i]+j] = bit[j] #字節(jié)存在沖突 else: errMsg = ' 字節(jié)位存在沖突,生成CAN報文失敗!!!' #print(sigName[i] + errMsg) return '-1',errMsg #跨字節(jié)的信號 else: #高位位數(shù)和低位位數(shù) highLen = 8 - startBit[i]%8 lowLen = length[i] - highLen bit = [] #setValue的二進(jìn)制值按字節(jié)位從低到高填 octToBin(setValue[i],bit) #先填進(jìn)信號的高位 for j1 in range(highLen): if(CAN[startBit[i]+j1]==-1): CAN[startBit[i]+j1] = bit[j1] #字節(jié)存在沖突 else: errMsg = ' 字節(jié)位存在沖突,生成CAN報文失敗!!!' #print(sigName[i] + errMsg) return '-1',errMsg #再填進(jìn)信號的低位 for j2 in range(lowLen): if(CAN[(int(startBit[i]/8)-1)*8+j2]==-1): CAN[(int(startBit[i]/8)-1)*8+j2] = bit[highLen+j2] #字節(jié)存在沖突 else: errMsg = ' 字節(jié)位存在沖突,生成CAN報文失敗!!!' #print(sigName[i] + errMsg) return '-1',errMsg #剩余位設(shè)為默認(rèn)值 for i in range(64): if(CAN[i]==-1): CAN[i] = defaultValue #若無錯誤則返回正確值 return '0','success!' if __name__ == '__main__': #調(diào)用parseConfig()函數(shù)開始執(zhí)行程序 parseConfig()

運(yùn)行結(jié)果:

1. CAN報文生成成功!!!msgNamemsgIDmsgLenmsgDataBCM_FrP010x2CD8A5 00 06 A5 00 06 40 002. CAN報文生成成功!!!msgNamemsgIDmsgLenmsgDataBCM_FrP0x2CD800 00 00 00 08 00 00 00

以上這篇Python實現(xiàn)CAN報文轉(zhuǎn)換工具教程就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 欧美成人国产精品高潮 | 久久综合伊人77777麻豆最新章节 | 中文字幕精品久久一二三区红杏 | 精品久久久无码中文字幕边打电话 | 日韩欧美亚洲在线 | 麻豆视频免费入口 | 亚洲影音| 国产精品高潮呻吟av久久4虎 | 你懂的欧美 | 少妇爆乳无码专区 | 极品女神无套呻吟啪啪 | 久久精品国产999大香线蕉 | 一本色道久久精品 | 国产在线无码精品电影网 | 永久免费看啪啪的网站 | 夜夜动漫 | 波多野结衣网站 | 18成人片黄网站www | 亚洲国产精品久久久久秋霞 | 亚洲欧洲自拍偷拍 | 青娱乐国产视频 | 久久久综合香蕉尹人综合网 | 精品国产乱码久久久久久1区二区 | 国产精品人人爽 | 四虎永久在线精品免费网址 | 免费在线观看黄色av | 一本大道无码日韩精品影视_ | 欧美日韩不卡视频合集 | 欧美人与按摩师xxxx | 夜夜嗨av一区二区三区网页 | 五月天国色天香国语版 | 国产精品91久久久 | 欧美另类人妖 | 91免费网站在线观看 | 欧美精品91 | 国产第三区 | 国产乱码一区二区三区咪爱 | 免费精品一区二区三区第35 | 国产精品亚洲а∨天堂免在线 | 呻吟对白激情videos | 一区二区三区视频网站 | 日韩欧美黄色 | 性色av蜜臀av牛牛影院 | 国产一区二区三区av在线无码观看 | 国产真实乱人偷精品视频 | 中国av一区二区三区 | 女人扒开腿让男人桶到爽 | 台湾全黄色裸体视频播放 | 欧美肥婆性猛交xxxⅹ | 欧美色图片区 | 日韩成人在线一区 | www.蜜臀av.com | 性做久久| 日韩精品视频在线看 | 一区二区三区在线视频免费观看 | 岛国a视频| 西野翔之公侵犯中文字幕 | 亚洲精品1234 | 人妻中出受孕 中文字幕在线 | 男女一进一出超猛烈的视频不遮挡在线观看 | 久久九九精品99国产精品 | 少妇二级淫片免费放 | 全亚洲最大的免费影院 | 夜夜夜操操操 | 九九九九九热 | 成年人免费在线观看网站 | 国产精品久久久久久久成人午夜 | 视频日韩 | 看全色黄大色黄大片 视频 欧美深度肠交惨叫 | 大地资源在线观看官网第三页 | 粉嫩老牛aⅴ一区二区三区 粉嫩欧美一区二区三区 | 深夜福利院| 免费观看全黄做爰的视在线观看 | 岛国视频一区 | 久久亚洲精精品中文字幕早川悠里 | 国产午夜精品无码一区二区 | 逼逼av网站| 国产福利视频一区 | 日韩成人动漫在线观看 | 国产精品久久久久久久久久久久 | 国产在线精品一区二区 | 777久久精品一区二区三区无码 | 又湿又紧又大又爽a视频 | 亚色在线视频 | 久久小草成人av免费观看 | 天天拍夜夜操 | 亚洲自拍偷拍另类 | 欧美性视频在线 | 日本不卡1| 成人羞羞国产免费 | 爱射综合 | 亚洲va久久久噜噜噜久久男同 | 青草精品| 国产精品无码成人午夜电影 | 荡女淫春 在线观看69影院 | 国产av国片偷人妻麻豆 | 国产中文字幕二区 | 成人午夜电影福利免费 | av免播放器在线观看 | 91精品国产自产精品男人的天堂 | 疯狂做爰的爽文多肉小说王爷 | 激情伊人五月天久久综合 | 亚洲资源一区 | 久久网一区二区 | 天天干天天色天天 | 男女性杂交内射女bbwxz | 最新在线黄色网址 | 国产精品久久午夜夜伦鲁鲁 | 精品久久中文字幕97 | 欧美手机看片 | 就爱啪啪网站 | 无毒的av网站 | 交换配乱吟粗大农村大坑性事视频 | 另类综合二 | 欧美a级片视频 | 中文字幕av一区二区三区高 | 欧美激情69 | 又硬又粗又大一区二区三区视频 | 99色播| 中国黄色片视频 | 思九九爱九九 | 亚洲第9页| 九色视频丨porny丨丝袜 | 女朋友闺蜜奶好大下面好紧视频 | 国产一级80毛片古装片 | 一级片在线免费看 | 久久精品国产色蜜蜜麻豆 | 久久综合激激的五月天 | 国产人与禽zoz0性伦多活几年 | 一区二区三区在线视频播放 | 国产精品探花在线观看 | 成人免费aaa | 久久6精品| 国产日韩一区二区在线 | 日本亚洲免费 | 欧美成人乱码一二三四区免费 | 亚洲成人国产精品 | 国产免费av一区二区三区 | 欧美性网站 | 久久精品一 | 婷婷在线播放 | 国色天香社区在线视频 | 亚洲国产成人无码av在线影院 | 亚洲毛茸茸| av免费在线播放网址 | 久久精品美女视频 | 狠狠色狠狠色很很综合很久久 | 久久久久久久久久久久久9999 | 久久精品一区二区三区四区毛片 | 亚洲国产不卡 | 青青草香蕉 | 国产特级毛片aaaaaa | 国产精品av久久久久久无 | 福利在线一区 | 精品卡一卡二卡3卡高清乱码 | 国产无人区卡一卡二卡三网站 | 青青青国产精品一区二区 | 日一日干一干 | 自拍偷自拍亚洲精品偷一 | 日韩国产精品一区二区 | 蜜臀999| 美女一区二区三区四区 | 亚洲精品成人av在线观看爽翻天 | 亚洲羞羞 | 成人五区| 91美女高潮出水 | 日本一本在线观看 | 91av资源在线 | 在线天堂最新版资源 | 国产美女无遮挡免费软件 | 欧美青青草 | 天天爽天天操 | 噜噜噜久久亚洲精品国产品麻豆 | 欧洲女人性行为视频 | 国产精品久久久久婷婷二区次 | 136av福利视频导航入口 | 噜噜啪永久免费视频 | 中文字幕a一二三在线 | 精品久久国产字幕高潮 | 日本成人在线免费观看 | www.91视频聊天.com | 亚洲制服丝袜诱惑 | 国产精品久久久一区二区三区 | 性做久久久久久久久 | 国产在线国偷精品免费看 | 日韩精品免费一区二区夜夜嗨 | 丁香社区五月天 | 精品一区二区三区在线观看视频 | 激情五月视频 | 久久久久久久爱 | 青草视频免费在线观看 | 午夜精品久久久内射近拍高清 | 日韩视频在线免费观看 | 国产三级理论片 | 国产乱国产乱 | 都市激情男人天堂 | 亚洲一区二区三区 | 日本一区免费 | 五月天激情啪啪 | 国产三级国产精品国产普男人 | 91免费国产精品 | 黄色a一级视频 | 97成人精品区在线播放 | 国产又粗又猛又爽又黄的视频文字 | 久久久久av69精品 | 欧亚毛片| 国产无限制自拍 | 色综合视频一区二区三区 | 国产乱码久久久久 | 99九九久久| 天天舔天天插 | 欧洲亚洲国产精品 | 中国女人特级毛片 | 色拍拍欧美视频在线看 | 国产日产亚洲系列最新 | 狠狠撸在线观看 | 91国产免费看 | 热热色视频 | 毛片av在线播放 | 亚洲国产精品无码专区影院 | 亚洲永久精品视频 | 久久人人爽人人爽人人片ⅴ | 狠狠干狠狠撸 | 国产亚洲欧美视频 | 成人免费看片网站 | 欧美日韩喷水 | 4438xx亚洲最大五色丁香 | 亚洲欧美中文日韩v在线观看 | 人妻 丝袜美腿 中文字幕 | 国产精久久久 | 影虎的最新视频 | 日韩黄色一区 | 久久99精品国产麻豆宅宅 | 日本特黄一级大片 | 欧美成人免费网址 | 成人免费淫片aa视频免费 | 免费手机av | www成人网com| 国产草草影院ccyycom | 亚洲一区日韩精品 | 欧美精品久久96人妻无码 | 日本强好片久久久久久aaa | 亚洲乱码一区av春药高潮 | 久久这里只有精品23 | 56av国产精品久久久久久久 | 亚洲国产欧美在线成人 | 粉嫩久久久久久久极品 | 天堂在线亚洲 | 日韩美女网站 | 一区二区乱子伦在线播放 | 精品无人区一区二区三区 | 日韩中文字幕亚洲 | 日本a级在线播放 | 18禁无遮挡免费视频网站 | 中文字幕精品av一区二区五区 | 草草影院国产 | 婷婷久久久久 | 亚洲高清视频在线 | 在线h片| 91精品国| 国产乱码精品一区二区三区亚洲人 | 欧美黄色高清视频 | 国产高清在线不卡 | 国产色视频 | 成人性生交大片免费网站 | 欧美精品久久久久久久久久久 | 免费观看理伦片在线播放 | 爱爱视频网站免费 | 高h禁伦餐桌上的肉伦水视频 | 98涩涩国产露脸精品国产网 | 国产真实乱偷精品视频 | 亚洲砖区区免费 | 美女久久久久久久久 | 懂色a v | 在线麻豆av | 51免费动漫网永久入口 | 漂亮少妇videoshd忠贞 | 丁香五月亚洲综合在线 | 日韩欧美一区二区三区四区 | 亚洲干 | 视频一区二区三区在线 | 成人做受黄大片 | 成人午夜sm精品久久久久久久 | 双腿张开被9个男人调教 | 久久深夜福利 | 国产一级片免费在线观看 | 日韩中文字幕影院 | 偷拍激情视频一区二区三区 | 好看的中文字幕av | 中文字幕69页 | 久久99国产精品久久99果冻传媒新版本 | 艳妇乳肉豪妇荡乳在线观看 | 大战肉丝少妇在线观看 | xxxⅹ少妇少妇xxxx | 亚洲精品一区二区三区在线观看 | 免费福利片2019潦草影视午夜 | 精一区二区 | 操的网站 | 欧美性猛交丰臀xxxxx网站 | 日本成人精品在线 | 美女国产精品 | 老色鬼在线精品视频在线观看 | 无码乱人伦一区二区亚洲 | 91制片厂麻花 | 欧美在线视频免费观看 | 午夜久久 | 好紧好湿太硬了我太爽了视频 | 日韩黄视频 | 亚洲中久无码永久在线观看同 | 色偷偷88888欧美精品久久久 | 日韩av资源在线 | 性荡视频播放在线视频 | 2022精品国偷自产免费观看 | 动漫精品啪啪h一区二区网站 | 欧美日韩在线影院 | 女同av久久中文字幕字 | 91二区 | 欧美午夜精品一区二区三区电影 | 中国xxxx性xxxx产国 | 国产人妻鲁鲁一区二区 | 明星乱淫免费视频欧美 | 日韩熟女精品一区二区三区 | 国产精品中文字幕av | 亚洲人成小说 | 亚洲人的天堂 | 精品国产免费一区二区三区五区 | 国产欧亚州美日韩综合区 | 九九热在线观看视频 | 肉嫁高柳家在线看 | 3d成人精品动漫视频在线观看 | 少妇裸体性生交免费 | 国产色欲av一区二区三区 | 亚洲国产精品无码久久久久高潮 | 婷婷综合少妇啪啪喷水 | 欧美麻豆| 中文字幕久久熟女蜜桃 | 国产性xxxx18免费观看视频 | 欧美 变态 另类 人妖 | 国产精品视频入口麻豆 | 一级片小视频 | 国产91精 | 日本免费视频 | 青青草免费在线视频 | 久草免费新视频 | 亚洲蜜桃精久天干天干天啪啪夜l | 国产精品1区2区3区在线观看 | 13一15学生毛片视频软件 | www.夜色321.com | 亚洲精品久久久久午夜福禁果tⅴ | 中文字幕精品一区二区三区在线 | 亚洲国产另类久久久精品网站 | 亚洲欧洲成人 | 一本色道av立川理惠 | 国产老头和老头xxxxx免费 | 成人三级在线视频 | 成人激情视频网站 | 五月天婷婷导航 | 亚洲免费激情视频 | 91亚洲精品久久久蜜桃借种 | 亚洲精品久久久蜜桃 | 欧美牲交a免费 | 免费在线观看你懂的 | 国产综合久久久久鬼色 | 亚洲成亚洲成网 | 超碰资源在线 | 极品熟妇大蝴蝶20p 国产女人高潮叫床视频 | 国产成人无码专区 | 无遮挡啪啪摇乳动态图gif | 免费人成xvideoscom | 国产视频一二三区 | 麻豆成人久久精品二区三区小说 | 亚洲女人初尝黑人巨大 | 黄色毛片播放 | 极品少妇被啪到呻吟喷水 | 欲色网站 | 台湾十八成人网 | yy6080久久伦理一区二区 | av老司机在线播放 | 欧美老肥妇做.爰bbww视频 | 亚洲综合色成在线播放 | 狠狠色先锋资源网 | 蜜臀av在线免费观看 | 91九色丨porny丨丝袜 | 国产午夜禁区精品视频 | 九色琪琪久久综合网天天 | 久久久久青草 | 精品久久久久久成人av | 九九九亚洲 | 99riav国产精品 | 97成人在线观看 | 52avaⅴ我爱haose免费视频 | 国产成人福利 | 久久久.www| 成人免费看片&#39 | 亚洲毛片网站 | 黄色片视频免费观看 | 99热国产在线观看 | 黄瓜视频在线观看污 | 好吊色网站 | 亚洲码国产岛国毛片在线 | 日本大乳高潮视频在线观看 | 精品国产九九九 | 成人午夜又粗又硬又长 | bnb998成人免费 | 精品视频无码一区二区三区 | 五月婷婷在线视频 | 国产在线v| 亚洲一区精品人人爽人人躁 | 永久免费观看国产裸体美女 | 日韩av一区二区在线 | 久久99精品国产麻豆宅宅 | 中文有码在线播放 | 91麻豆精品91久久久久久清纯 | 黄色一级免费片 | 亚洲精品综合欧美二区变态 | 色欧美88888久久久久久影院 | 清草视频 | 精品国产一区三区 | 国产精品国产三级国产专播 | 日韩片在线观看 | 伊人国| a 'v片欧美日韩在线 | 午夜视频 | 国产性色av高清在线观看 | 欧美一级免费在线观看 | 亚洲国产精品成人综合在线 | 天天舔天天射 | 麻豆久久久久久 | 草久网| 色视频网站免费 | 福利资源导航 | 91精品国产综合久久精品图片 | 邻居少妇与水电工啪啪 | av小说在线观看 | 性娇小13――14欧美 | 浴室人妻的情欲hd三级国产 | 一本一道人人妻人人妻αv 自拍日韩亚洲一区在线 | 欧美激情亚洲综合 | 黑人巨大videos亚洲娇小 | 亚洲视频一区在线观看 | 天天爽天天插 | 一区二区精品在线观看 | 成长快手短视频在线观看 | 啦啦啦www在线观看免费视频 | 玖玖在线免费视频 | 亚洲一区二区图片 | 特级a毛片 | 色欲天天天综合网 | 国产精品看高国产精品不卡 | 久久人妻无码中文字幕 | 视频久久精品 | 张津瑜国内精品www在线 | 日韩中文字幕免费观看 | 亚洲一区无码中文字幕 | 97免费人妻无码视频 | 国产综合久久久久久鬼色 | 国产污视频在线 | 久久婷婷伊人 | 激情噜噜 | sm免费人成虐网站 | 国产精品第六页 | 亚洲国产精久久久久久久 | 久久国产综合 | 午夜大尺度做爰激吻视频 | 欧美乱妇高清无乱码在线观看 | 青青在线视频 | 激情小说中文字幕 | 以色列最猛性xxxxx视频 | 少妇淫真视频一区二区 | 国产精品欧美一区二区 | 欧美日韩在线免费播放 | 欧美精品在线视频 | 亚洲国产精品尤物yw在线观看 | 极品少妇xxxx精品少妇 | 免费爱爱视频网站 | 综合一区在线 | www17c亚洲蜜桃 | 蘑菇av| 性饥渴的农村熟妇 | 国产91精| 爱射综合| 一线天 粉嫩 在线播放 | 后宫妃h狠狠肉 | 亚洲高清免费视频 | 欧美va天堂在线电影 | 911香蕉视频 | 影音先锋国产资源 | 国产又色又爽又刺激在线观看 | 99久热在线精品996热是什么 | 日韩精品成人av | 亚色在线观看 | 欧美最猛黑人xxxx黑人猛交 | 亚洲色婷婷久久精品av蜜桃 | 无码aⅴ精品一区二区三区浪潮 | 色资源av | 日韩夜夜操 | 欧美乱妇高清无乱码免费 | 国产98色在线 | 日韩 | 人人爽人人射 | 成年人网站在线 | 裸体美女无遮挡免费网站 | 国产熟女一区二区三区五月婷 | 94久久国产乱子伦精品免费 | 国产精品国产免费无码专区不卡 | 国产国产国产 | 国产刚发育娇小性色xxxxx | 亚洲一区二区三区四 | 中文字幕国产日韩 | 欧美日韩亚洲在线 | 韩国19禁无遮挡啪啪无码网站 | 国产精品高潮呻吟av久久4虎 | 二区三区 | 亚洲精品一品区二品区三品区 | 在线观看欧美 | 亚洲字幕在线观看 | 成人一区二 | 免费爱爱网站 | 天天舔天天| 草裙社区精品视频播放 | youjizz.com国产| 国产美女无遮挡永久免费 | 色天堂在线视频 | 另类老妇奶性生bbwbbw | 午夜黄色剧场 | 久久久久久久久久久久久女国产乱 | 欧美va天堂在线电影 | 毛片久久久| 日本少妇毛茸茸 | 99国产精品久久久久久久成人 | 伊人久久成人 | 日本亚洲综合 | 女人张开腿让男人桶个爽 | 亚洲资源av无码日韩av无码 | 日韩在线一区二区 | 99久久精品国产一区二区蜜芽 | 操你啦免费视频 | 嫩草影院在线视频 | 国产韩国精品一区二区三区久久 | 92电影网午夜福利 | 谁有av网址| 美女黄色片子 | 18性欧美xxxⅹ性满足 | 永久免费精品精品永久-夜色 | 国产精品久久久久国产三级传媒 | 逼特逼视频在线观看 | 精品久久久久久久免费看女人毛片 | 精品在线一区二区 | 午夜视频1000 | 揉着我的奶从后面进去视频 | 天堂网av中文字幕 | 免费久久99精品国产婷婷六月 | 免费在线观看成年人视频 | 中文字幕免费视频 | av在线亚洲男人的天堂 | 国产精品久久久久久一区二区三区 | 嫩草影院污 | 午夜嘿嘿嘿影院 | 在线观看的av | 亲子伦一区二区三区观看方式 | 97久久人人超碰超碰窝窝 | 偷拍盗摄高潮叫床对白清晰 | 欧美成人精品三级网站 | 全部免费的毛片在线播放 | 色综合天天综合狠狠爱 | 明日叶三叶 | 性生活毛片 | 美女裸体十八禁免费网站 | 欧美三级在线播放 | 天天干夜夜艹 | 国产精品亚洲lv粉色 | 欧美色呦呦 | 免费久久日韩aaaaa大片 | 中文字幕日本一区 | 国产一卡二卡 | 中日韩精品视频在线观看 | 91精品国产欧美一区二区 | 丁香五香天堂综合小说 | 老头老夫妇自拍性tv | 久热re这里精品视频在线6 | av中文字幕一区 | 亚洲欧洲自拍偷拍 | 国产精品中文在线 | 91久久捆绑调教美女 | 中文字幕在线观看视频www | 国产在线精品二区 | 亚日韩欧美 | 国产中文字幕久久 | 91精品久久久久久久99软件 | 欧美乱大交aaaa片if | 久久精品欧美一区 | 免费视频网站在线观看入口 | 一区二区视频免费看 | 国产在线一区二区三区四区五区 | 涩涩久久| 狠狠色丁香婷婷久久综合五月 | 欧美69wwwcom | 黄色香蕉网 | 天堂岛av| 蜜臀av综合网 | 天堂在线www | 国产又粗又猛又爽视频上高潮69 | 又黄又爽又色的免费网站 | 欧美色视频在线观看 | 黄色大片毛片 | 国产精品高潮呻吟久久久 | a天堂中文在线 | 精品国产三级在线观看 | 欧美高清在线一区 | 中国性猛交xxxx乱大交3 | 黄色一级在线观看 | 国产又黄又猛又粗又爽的 | 中文字幕久久久久人妻中出 | 色七七网站 | 国产剧情av麻豆香蕉精品 | 亚洲一线二线三线久久久 |