久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Python實現CAN報文轉換工具教程

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

一、CAN報文簡介

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

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

Intel編碼格式

當一個信號的數據長度不超過1個字節(8位)并且信號在一個字節內實現(即該信號沒有跨字節實現):該信號的高位(S_msb)將被放在該字節的高位,信號的低位(S_lsb)將被放在該字節的低位。

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

Motorola編碼格式

當一個信號的數據長度不超過1個字節(8位)并且信號在一個字節內實現(即該信號沒有跨字節實現):該信號的高位(S_msb)將被放在該字節的高位,信號的低位(S_lsb)將被放在該字節的低位。

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

可以看出,當一個信號的數據長度不超過1Byte時,Intel與Motorola兩種格式的編碼結果沒有什么不同,完全一樣。當信號的數據長度超過1Byte時,兩者的編碼結果出現了明顯的不同。

二、CAN報文轉換工具需求分析

1、 支持標準幀的CAN報文的轉換,擴展幀暫不支持

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

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

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

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實現CAN報文轉換工具教程

三、交互模式

代碼如下:

import sysprint('----------------歡迎使用CAN報文轉換工具交互模式----------------')print('請輸入CAN信號,格式為:startBit:length:minValue:maxValue:setValue')print('例如:32:1:0:1:1')print('或者省略minValue和maxValue:35:1:::1')print('信號輸入結束請再按一次回車') #十進制轉換成二進制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('輸入格式錯誤,參數缺少setValue,請重新輸入!') continue if(input_str.split(':')[4]==''): print('setValue參數不能為空,請重新輸入!') 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數組存放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的情況且未跨字節的信號 if((startBit[i]%8 + length[i])<=8): for j in range(length[i]): bit = [] #setValue的二進制值按字節位從低到高填 octToBin(setValue[i],bit) #填滿字節長度值 if(CAN[startBit[i]+j]==-1): CAN[startBit[i]+j] = bit[j] #字節存在沖突 else: print(sig[i] + '字節位存在沖突,生成CAN報文失敗!!!') sys.stdin.readline() sys.exit() #跨字節的信號 else: #高位位數和低位位數 highLen = 8 - startBit[i]%8 lowLen = length[i] - highLen bit = [] #setValue的二進制值按字節位從低到高填 octToBin(setValue[i],bit) #先填進信號的高位 for j1 in range(highLen): if(CAN[startBit[i]+j1]==-1): CAN[startBit[i]+j1] = bit[j1] #字節存在沖突 else: print(sig[i] + '字節位存在沖突,生成CAN報文失敗!!!') sys.stdin.readline() sys.exit() #再填進信號的低位 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] #字節存在沖突 else: print(sig[i] + '字節位存在沖突,生成CAN報文失敗!!!') sys.stdin.readline() sys.exit()#剩余位默認值設為0for i in range(64): if(CAN[i]==-1): CAN[i] = 0#----------------將二進制list每隔8位轉換成十六進制輸出----------------#其中,map()將list中的數字轉成字符串,按照Motorola格式每隔8位采用了逆序# ’’.join()將二進制list轉換成二進制字符串,int()將二進制字符串轉換成十進制#hex()再將十進制轉換成十六進制,upper()轉換成大寫,兩個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))

運行截圖:

Python實現CAN報文轉換工具教程

錯誤提示:

Python實現CAN報文轉換工具教程

四、配置項模式

配置文件如下:

##注釋::start#編碼格式:0=Intel;1=MotorolaencodeType=1#幀格式:0=標準幀;1=擴展幀;canMode=0#幀類型:0=數據幀;...canType=0#默認初始值(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=標準幀;1=擴展幀;canMode=0#幀類型:0=數據幀;...canType=0#默認初始值(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數組存放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 #開始標記 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報文生成失敗!!!目前僅支持標準幀,暫不支持擴展幀!') logFile.write('%d. CAN報文生成失敗!!!目前僅支持標準幀,暫不支持擴展幀!n' % count) continue #幀類型 elif(line.find('canType')>=0): canType = line.split('=')[1] if(canType != '0'): isError = True print(str(count) + '. CAN報文生成失敗!!!目前僅支持數據幀,暫不支持其他幀!') logFile.write('%d. CAN報文生成失敗!!!目前僅支持數據幀,暫不支持其他幀!n' % count) continue #默認初始值 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) #----------------------------輸出標題信息---------------------------- 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) #----------------將二進制list每隔8位轉換成十六進制輸出---------------- #其中,map()將list中的數字轉成字符串,按照Motorola格式每隔8位采用了逆序 # ’’.join()將二進制list轉換成二進制字符串,int()將二進制字符串轉換成十進制 #hex()再將十進制轉換成十六進制,upper()轉換成大寫,兩個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() #十進制轉換成二進制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的情況且未跨字節的信號 if((startBit[i]%8 + length[i])<=8): for j in range(length[i]): bit = [] #setValue的二進制值按字節位從低到高填 octToBin(setValue[i],bit) #填滿字節長度值 if(CAN[startBit[i]+j]==-1): CAN[startBit[i]+j] = bit[j] #字節存在沖突 else: errMsg = ' 字節位存在沖突,生成CAN報文失敗!!!' #print(sigName[i] + errMsg) return '-1',errMsg #跨字節的信號 else: #高位位數和低位位數 highLen = 8 - startBit[i]%8 lowLen = length[i] - highLen bit = [] #setValue的二進制值按字節位從低到高填 octToBin(setValue[i],bit) #先填進信號的高位 for j1 in range(highLen): if(CAN[startBit[i]+j1]==-1): CAN[startBit[i]+j1] = bit[j1] #字節存在沖突 else: errMsg = ' 字節位存在沖突,生成CAN報文失敗!!!' #print(sigName[i] + errMsg) return '-1',errMsg #再填進信號的低位 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] #字節存在沖突 else: errMsg = ' 字節位存在沖突,生成CAN報文失敗!!!' #print(sigName[i] + errMsg) return '-1',errMsg #剩余位設為默認值 for i in range(64): if(CAN[i]==-1): CAN[i] = defaultValue #若無錯誤則返回正確值 return '0','success!' if __name__ == '__main__': #調用parseConfig()函數開始執行程序 parseConfig()

運行結果:

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

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

標簽: Python 編程
相關文章:
主站蜘蛛池模板: a国产在线 | 日韩a | 另类色| 亚洲成人一区 | 一级欧美| 九九国产精品视频 | 精品久久久久久久久久久久 | 久久久久亚洲精品 | 亚洲欧美国产精品久久 | 欧美一级免费在线观看 | 午夜精品久久久久久久久久久久久 | 色成人免费网站 | 亚洲三级在线观看 | 国产欧美高清在线观看 | 99精品一级欧美片免费播放 | 天天久| 99这里只有精品 | 免费成人在线观看视频 | 国产大学生援交视频在线观看 | 亚洲欧美中文字幕 | 日韩日韩日韩日韩日韩日韩日韩 | 国产h视频在线观看 | 国产高清在线精品一区二区三区 | 三级视频在线 | 青青草免费在线视频 | 亚洲精选一区二区 | av在线成人 | 久久久中文字幕 | 夜添久久精品亚洲国产精品 | 成人午夜精品 | 在线成人av | 美女一级黄| 成年人视频在线免费观看 | 国产综合亚洲精品一区二 | 黄色操视频 | 日本高清h色视频在线观看 日日干日日操 | 日韩一级免费在线观看 | 欧美久久久久久久久久 | 欧美久久久久久久久久 | 国产人妖一区二区 | 日韩国产欧美在线观看 | 久久久久久久一区二区 | 色婷婷综合久久久中文字幕 | 精品久久中文字幕 | 日韩视频在线观看一区 | 亚洲成人国产精品 | 亚洲视频在线看 | 精品一区二区在线观看 | 欧美最猛性xxxxx亚洲精品 | 欧美福利视频 | 日韩欧美中文字幕在线视频 | 在线视频久久 | 七七婷婷婷婷精品国产 | 国产久| 97伦理电影院 | 成人激情视频在线免费观看 | 99re在线观看视频 | 欧美全黄| 国产一区二区三区在线 | 中文字幕视频网站 | 黄色电影天堂 | 国产 欧美 日韩 一区 | 91久久久www播放日本观看 | 亚州中文| 婷婷激情五月 | 欧美a视频 | 中文字幕在线一区 | 91高清在线| 成人综合区 | 久久成人一区二区 | 伊人网在线视频 | 四季久久免费一区二区三区四区 | 三级网站在线播放 | 资源av| 亚洲国产精品一区二区第一页 | 亚洲成人av| 在线播放黄色片网站 | 久久草在线视频 | 日本黄色免费大片 | 七七婷婷婷婷精品国产 | 亚洲电影免费 | 日韩免费一区二区 | 亚洲视频在线免费观看 | 国产一级黄色大片 | 99re视频在线播放 | 欧美中文在线 | 国产亚洲一区二区三区 | 一级黄色影片在线观看 | 日韩在线观看视频一区二区三区 | 中文字幕国产一区 | 日韩欧美久久 | 九九热精品在线 | 欧美成人一区二区三区片免费 | 成人av一区二区三区 | 国产一区二区三区免费 | 欧美综合精品 | 久久99精品久久久 | www.久久 | 欧美日韩一区二区三区在线观看 | 国产成人精品一区一区一区 | 99国产精品久久久久久久 | 精品成人免费一区二区在线播放 | 男女羞羞视频在线免费观看 | 在线久草 | 日本高清h色视频在线观看 日日干日日操 | 香蕉av在线| 青草精品| 黄色片免费在线观看视频 | 日韩精品一区二区三区 | 国产传媒视频 | 一区二区三区免费在线 | 四虎影院网站 | 国产欧美在线视频 | 国产欧美日本 | 久久九九国产精品 | 日本精品免费 | 一道本一区 | 特级理论片 | 作爱视频免费看 | 91精品国产综合久久久久久漫画 | 一级片在线观看 | 久久久久久国产视频 | 在线视频这里只有精品 | 色视频www在线播放国产人成 | 国产96在线视频 | cao视频| 中文久久 | 亚洲精品9999 | 精品欧美一区二区三区久久久 | 国产一级一级特黄女人精品毛片 | 999国产在线视频 | 国产高清免费 | 久久一区二区三区四区 | 91精品日韩| 国产成在线观看免费视频 | 日韩有码在线观看 | 综合一区 | 密室大逃脱第六季大神版在线观看 | 中文字幕一区二区三区四区 | 国产成人午夜高潮毛片 | 免费黄色在线 | 精品国产一区二区三区在线观看 | 黑人巨大精品欧美一区二区小视频 | 亚洲一区中文字幕在线 | 奇米成人 | 一区二区日韩 | 日韩精品免费在线观看 | 97在线免费观看 | 黄色欧美视频 | 不卡黄色 | 国产成人一区二区三区 | 91.成人天堂一区 | 美女视频一区二区三区 | 性人久久久 | 97碰碰碰 | 久久免费在线观看 | 天天干天天摸 | 在线视频一区二区三区 | 欧美精品91 | 亚洲精品久久久 | 欧美黑人xx| 国产成人一区二区三区 | 日韩成人在线观看 | 国产一级免费视频 | 国产农村妇女精品一二区 | 中文字幕久久久 | 国产91亚洲精品久久久 | 麻豆亚洲 | 国产女人免费看a级丨片 | 亚洲精品一二三 | 91麻豆精品一二三区在线 | 黄色在线免费观看 | 亚洲视频在线观看免费 | 国产精品久久久久久久久免费 | 亚洲综合中文网 | 国产精品视频区 | 午夜影院色 | 久久精品不卡 | 亚洲综合色视频在线观看 | 日本成人三级 | 久久久国产精品 | 国产成人精品一区二区三区视频 | 成人久久精品 | 午夜欧美精品久久久久 | 色网站在线观看 | av在线免费观看一区二区 | 久久综合色视频 | 欧美日韩在线电影 | 日韩视频国产 | 欧美黑人xx| 伊人一二三区 | 一区小视频 | 久久人操 | 日韩欧美在线视频播放 | 国产精品一区二 | 国内精品视频一区二区三区 | 高清精品一区二区 | 国产欧美日韩精品在线 | 欧美视频第一页 | 狠狠艹| 91中文字幕在线观看 | 国产精品国产成人国产三级 | 国产3区 | 午夜在线 | 色婷婷亚洲| 一区二区在线视频 | 亚洲一区 中文字幕 | 欧美激情网站 | 羞羞视频免费观看入口 | 精品一区二区在线观看 | 日韩中文一区二区三区 | 99精品全国免费观看视频软件 | 天天干天天添 | 国产精品久久久久国产a级 99精品欧美一区二区三区综合在线 | 日韩在线区 | 天天干天天干天天干天天射 | 亚洲国产成人在线 | 中文字幕在线播放第一页 | 国产视频一区二区 | 欧洲成人午夜免费大片 | 亚洲成人免费在线观看 | 欧美日一级片 | 久久成人一区 | www.亚洲 | 天天操夜夜操av | 一级电影在线观看 | 欧美午夜一区二区三区免费大片 | 久久精品久久久 | 日韩成人一区二区 | 日韩五月 | 国产精品久久久 | 日韩欧美精品在线 | 男女啪啪无遮挡 | 亚洲精品久久久久久久久 | 国产精品成人3p一区二区三区 | 日韩欧美一区二区视频 | 亚洲一区二区三区久久 | 天天爽天天草 | 超碰天堂 | 日韩成人 | 亚洲三级网站 | 国产精品27页 | 久草在线免费福利资源 | 国产精品影视 | 久久一 | 99久久免费观看 | 亚洲成人在线视频网站 | 神马久久久久久 | 国产激情久久久久久 | 亚洲一区在线日韩在线深爱 | 免费一级黄色电影 | 久久综合一区二区三区 | 激情一区 | 亚洲精选免费视频 | 国产精品一区在线看 | 午夜影院免费视频 | 国产精品日韩 | 国产丝袜一区二区三区免费视频 | 欧美日韩一区二区三区 | 亚洲视频在线观看免费 | 欧美久久久 | 欧美日韩在线电影 | 久久艹久久 | 国产成人一级毛片 | 久久99精品视频 | 亚洲a视频| 国产精品久久久久久 | 国产在线精品一区二区三区 | 国产一区不卡视频 | 蜜桃精品久久久久久久免费影院 | 黑人精品xxx一区一二区 | 国产精品久久久久久婷婷天堂 | 欧美日韩高清在线一区 | 亚洲伊人网站 | 日韩成年人视频 | 午夜影院在线 | 欧美a在线看 | 香蕉大人久久国产成人av | 影音先锋资源av | 新疆少妇videos高潮 | 国产99久久精品 | 精品国产一区二区三区久久久蜜臀 | 成人av免费在线观看 | 可以在线观看的黄色 | 成av人在线 | 国产欧美精品一区二区三区 | 日韩av一区二区三区四区 | 中文字幕一区二区三区四区五区 | 91精品国产色综合久久 | 欧美日韩精品久久久久 | 久久99国产精品久久99大师 | 免费大片黄在线观看 | 久久天堂 | 91免费看| 免费欧美一级 | 蜜桃一区二区 | 精品成人免费一区二区在线播放 | 在线播放亚洲 | 精品久久久久久久久久久 | 中文字幕高清视频 | 精品国产一区二区三区成人影院 | 国产99久久精品一区二区永久免费 | 毛片激情永久免费 | 日本在线免费看 | 国产精品视频999 | 北条麻妃国产九九九精品小说 | 久久久91精品国产一区二区精品 | 激情91| 欧日韩不卡在线视频 | 中文字幕不卡在线 | 在线不卡a资源高清 | 日韩在线资源 | 国产精品一区二区av | 亚洲成人黄色 | a视频在线观看 | 欧洲精品久久久 | 在线看av网址 | 亚洲国产精品99久久久久久久久 | 在线干 | 天天操天天拍 | 99热播在线| 日韩在线观看视频一区二区三区 | 日韩免费视频 | www免费网站在线观看 | 午夜www| 欧美日韩精品一区 | 九九亚洲精品 | 亚洲精品在线免费观看视频 | 国产成人精品免费视频大全 | jizz在线看片 | 久久精品欧美一区二区三区不卡 | 久久精品欧美一区二区三区不卡 | 欧洲成人在线视频 | 极品久久 | 在线视频91| 久久69| 亚洲 中文 欧美 日韩 在线观看 | 国产在线综合视频 | 国产三级在线 | 羞羞视频在线免费观看 | 欧美一级电影免费观看 | 国产一区二区三区在线看 | 日精品| 午夜精| 午夜在线观看 | 91高清免费看 | 黄视频免费在线 | 国产中文视频 | 日韩精品一区二区三区视频播放 | 国产乱码精品一区二区三区手机版 | 三区在线 | 99精品欧美一区二区三区综合在线 | 欧美高清视频一区 | 九色在线观看 | 另类一区 | 日本 国产 欧美 | 日韩一区在线视频 | 亚洲欧美日韩在线一区 | 日韩三级| 91精品国产综合久久久久久 | 国产精品成人在线 | 日本一区二区成人 | 欧美 日韩 中文字幕 | 国产中文字幕在线观看 | 午夜视频网| 久久久久久亚洲 | 亚洲成人免费在线观看 | 另类免费视频 | 日韩在线不卡视频 | 国产欧美精品一区二区三区 | 国产免费观看一区二区三区 | 日韩精品一区二 | 美女h在线观看 | 国产精品久久一区二区三区 | 91aiai| 日韩国产一区二区 | 99精品免费视频 | 国产精品综合 | 天堂资源| 九九99九九精彩46 | 久久精品一 | 国产欧美日韩精品一区二区三区 | 一区二区免费在线播放 | 欧美成人精品一区二区三区在线看 | 亚洲人成人一区二区在线观看 | 日韩久久久久久久久久久 | 欧美videosex性欧美黑吊 | 女人久久久久久久 | 国产情侣自拍啪啪 | 自拍偷拍视频网站 | 亚洲久久 | 国产电影一区二区在线观看 | 久久人人爽人人爽人人片av不 | 国产精品日韩欧美 | 国产日韩精品一区 | 国内自拍视频在线观看 | 99福利视频| 久久久久久亚洲精品视频 | 日韩中文视频 | 人人射人人草 | 亚洲最大免费视频 | 黄色国产在线看 | 亚洲一区二区三区高清 | av三级在线免费观看 | 久久精品色欧美aⅴ一区二区 | 91精品国产日韩91久久久久久 | 亚洲精品在线播放 | 亚洲欧美在线播放 | 日韩欧美网 | 亚洲xx在线| 成年人福利 | 国产欧美精品区一区二区三区 | 国产成人精品一区二区在线 | 一本色道精品久久一区二区三区 | 中文字幕av第一页 | 国产在线小视频 | 成人av福利| 在线观看欧美日韩视频 | 超级碰在线视频 | 日韩精品一区二区三区视频播放 | 欧美一区二区三区 | 久久精av | 国产一区二区在线电影 | 国产91精品一区二区绿帽 | 免费在线成人 | 一区二区免费在线视频 | 欧美一区永久视频免费观看 | 成人夜晚看av | 伊人青青操| 国产一区二区精品 | 久久久久久国产精品mv | www中文字幕 | 天天干天天曰天天操 | a免费视频| 亚洲精品欧美视频 | 欧美激情欧美激情在线五月 | 综合色九九 | 精品国产黄a∨片高清在线 日韩一区二 | 中文字幕在线网址 | 91一区二区三区 | 欧美视频在线免费 | 午夜免费视频网站 | 91国在线高清视频 | 欧美二区三区 | 伊人天堂在线 | 国产高清视频一区 | 亚洲视频免费 | 我看午夜视频 | 精品国产乱码久久久久夜 | 不卡欧美 | 日韩精品网站在线观看 | 日韩免费激情视频 | 免费黄色片一区二区 | 国产精品一区在线 | 亚洲国产精品一区二区久久 | 欧美日韩一级二级三级 | 久久夜色精品国产 | 欧美性一区二区三区 | 日本中文字幕一区 | 国产免费av网站 | 中文字幕欧美激情 | 亚洲精品影院在线 | 国产一区二区三区四区 | 欧美理论片在线 | 四虎影院网 | 欧美肉体xxxx肉交高潮 | jizz国产免费 | 久久亚洲天堂 | www久久久| www.精品 | 国产精品久久久久久中文字 | 国产免费色| 最新日韩免费 | 依人成人综合网 | 日夜夜精品 | 互换娇妻呻吟hd中文字幕 | 91国内精品 | 中文字幕日韩在线 | 在线视频a | 91中文字幕在线观看 | 亚洲综合福利视频 | 精品久久久久久久久久久 | 欧美激情在线精品一区二区三区 | 亚洲福利精品 | 亚洲一区二区视频在线观看 | 日韩中文字幕在线看 | 久久国产欧美日韩精品 | 成人看片免费网站 | 久久精品这里热有精品 | 日本男人的天堂 | 一级欧美一级日韩 | 国产成人亚洲综合 | 久久都是精品 | 中文字幕一区二区在线观看 | 国产一区二区三区久久久久久久久 | 午夜影院色 | 动漫泳衣美女 | 一区二区三区免费 | 国产精品69久久久久水密桃 | 日韩在线资源 | 欧美一级特黄aaaaaaa色戒 | 国产日韩欧美 | 狠狠入ady亚洲精品经典电影 | 中文字幕av在线 | 久久精品国产99国产精品 | 一区中文字幕 | 不卡视频一区 | 欧美激情视频一区二区三区在线播放 | 欧美日韩一区二区在线播放 | 99久久免费观看 | 色爱综合网 | 日本人做爰大片免费观看一老师 | 91aiai| 老司机午夜免费精品视频 | 暖暖日本在线视频 | 日本精品一区二区三区视频 | 81精品国产乱码久久久久久 | 成人综合在线观看 | 精品999www | 亚洲综合首页 | 在线观看www | 日韩中文字幕一区二区 | 久久免费福利视频 | 99精品国产高清一区二区麻豆 | 嫩草视频网 | 中文字幕在线观看www | 亚洲精品视频在线观看免费 | 亚洲免费资源 | 国产午夜精品一区二区三区 | 在线播放高清视频www | 成人免费视频网 | www.99久 | 在线一区二区三区做爰视频网站 | 欧美一区二区三区四区五区 | a一级免费视频 | 国产一区日韩欧美 | 日韩国产一区二区 | 亚洲小视频 | 一区综合| 蜜桃一区二区 | 久久香蕉国产 | 亚洲三级视频 | 欧美激情一区二区三区 | 成人一区二区在线 | 密色视频 | 欧美在线激情 | 欧美精品一区二区在线观看 | 亚洲国产精品久久久久秋霞蜜臀 | 日韩成人一区 | 真人女人一级毛片免费播放 | 欧美成人激情 | 国产精品日韩 | 在线视频中文字幕 | 欧美精品免费在线 | 亚洲国产高清视频 | 成人av影视在线观看 | 日韩91 | 日韩精品1区 | 精品中文在线 | 黄网在线观看 | 作爱视频免费看 | 亚洲欧美中文字幕 | 亚洲精品一区二区在线观看 | 综合久久综合久久 | 中文字幕在线免费 | 国产中文字幕一区 | 亚洲欧美国产精品久久久久 | 亚洲日本中文 | 国产97在线 | 免费 | 日韩精品久久久久久 | 高清国产视频 | 成人精品福利视频 | 久久久久久久久久久精 | 亚洲激情欧美 | 久久91精品 | 91九色国产视频 | 午夜精品久久久久99蜜 | 91精品国产综合久久久蜜臀粉嫩 | 美女久久久久久久久久久 | 亚洲欧洲一区二区 | 国产精品99久久久久久大便 | 亚洲精久久| 欧美二区三区 | 龙珠z在线观看 | 91福利在线播放 | 亚洲一区二区在线 | 涩久久 | 日韩免费在线观看视频 | 日韩中文字幕一区二区 | 久久久tv | 成人性视频在线播放 | 玖玖精品 | 黄色片毛片| 成人av免费在线观看 | 日韩一区二区在线观看 | aaa级片| 国内精品久久久久久中文字幕 | 综合久久综合 | 欧美二区三区 | www.国产.com | 国产成人精品高清久久 | 欧美一区二区免费 | 欧美一区中文字幕 | av在线播放网站 | 亚洲色图88| 一级毛片在线免费看 | 亚洲国产成人在线观看 | 久草网站 | 亚洲xxxx3d| 男女羞羞羞视频午夜视频 | 在线视频91| 欧美日韩福利视频 | 精久久 | 久久精品在线视频 | 国产中文字幕一区 |