在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

英創信息技術主板支持Modbus主控協議軟件

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2020-01-16 10:35 ? 次閱讀

1、簡述

Modbus 協議是一種已廣泛應用于當今工業控制領域的通用通訊協議。通過此協議,控制器相互之間、或控制器經由網絡(如以太網)可以和其它設備之間進行通信。Modbus協議使用的是主從通訊技術,即由主設備主動查詢和操作從設備。一般將主控設備方所使用的協議稱為Modbus Master,從設備方使用的協議稱為Modbus Slave。典型的主設備包括工控機和工業控制器等;典型的從設備如PLC編程控制器等。Modbus通訊物理接口可以選用串口(包括RS232RS485),也可以選擇以太網口。其通信遵循以下的過程:

? 主設備向從設備發送請求;
? 從設備分析并處理主設備的請求,然后向主設備發送結果;
? 如果出現任何差錯,從設備將返回一個異常功能碼。

英創公司提供的ARM9嵌入式主板系列產品,均帶有豐富的串口、網絡資源,同時具有強大的處理能力,非常適用于作為Modbus 主設備的開發應用,為了加快做這類應用的開發速度,英創公司特推出Linux下的Modbus主控軟件,該軟件的是以C函數靜態庫文件libmbusmaster.a的形式提供給客戶。主要特征如下:

? 非常適用于實時的工業應用,特別可以廣泛應用于對于PLC的控制。
?可以支持基于串口的Modbus協議或者基于TCP的Modbus協議。
? 支持RTU傳輸模式。
? 支持大多數的Modbus功能碼操作,包括對線圈、離散開關輸入的位操作,以及對寄存器的字節操作。
? 支持廣播地址。
? 可以獲取通訊中傳輸協議的錯誤代碼的詳細信息

2、Modbus Master API函數簡介

為了方便應用程序的使用,對不同的通訊介質保持一致的代碼形式,英創所提供的ModBus主控軟件包的API函數可以同時支持基于串口和TCP的Modbus Master協議,應用程序只需要在調用初始化函數時,用不同參數區分即可。有關Modbus通訊的具體使用方法,請參考Modbus標準文獻以及被控設備的通訊接口數據手冊。以下介紹英創Modbus主控軟件的相關API函數,各個函數的定義如下:

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述:通過串口或者網絡TCP打開ModBus協議,連接到ModBus設備。對于串口方式,通過該函數打開串口,并設置相應串口的通訊參數,以滿足數據和控制命令的通訊;對于TCP方式,通過該函數和ModBus設備建立基于Socket方式的TCP連接,利用該連接進行數據和控制命令的通訊。
輸入參數 pPortName:
該參數為CHAR類型的字符串,該字符串中包含了打開ModBus協議的需要設置的通訊參數信息。對于串口模式和TCP兩種模式分別采用不同的格式的字符串。
(1) 串口模式:
字符串必須以ttyS作為開頭,后面再帶上需要設置的串口通訊參數。格式為: ttySIdx:baudRate-dataBits-stopBits-parity
其中Idx為串口序號,':' 后為串口通訊參數,各個通訊參數均用整型數據來表示,依次為波特率、數據位、停止位、校驗位,校驗位 0-無校驗 1-奇校驗 2-偶校驗。
如串口3作為通訊的協議口,波特率:9600bps、8為數據位、1個停止位、無校驗。其格式如下:
'ttyS3:9600-8-1-0' ;
也可以直接就用 'ttyS3' 來表示,表明串口所用的為缺省參數:波特率 9600bps 數據位 8 停止位 1 無奇偶校驗。
(2) TCP模式:
字符串以IP地址作為開頭,':'后為指定TCP連接的特殊端口號,ModBus協議中缺省端口為502。如果不需要指定特殊端口,可以不帶此參數。格式如:
'192.168.201.178' ,使用端口號為502;
'192.168.201.178:2000' ,使用端口號為2000;
返回值 = NULL: 連接ModBus設備失敗。
!= NULL: 連接ModBus設備成功,并返回相應的操作句柄。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(1) HANDLE mbusMaster_OpenPortProtocol( char* pPortName );

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 關閉ModBus設備連接,同時釋放使用的系統資源。
輸入參數 hPort: 連接ModBus設備返回的有效操作句柄。
返回值 = FALSE: 關閉操作失敗。 = TRUE: 關閉操作成功。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(2) int mbusMaster_ClosePortProtocol( HANDLE hPort );

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 設置ModBus通訊的超時時間,單位為毫秒。并返回實際設置的超時時間。
輸入參數 hPort: 連接ModBus設備返回的有效操作句柄。
milliseconds: ModBus通訊超時時間,單位為毫秒。
返回值 < 0: 操作失敗。 > 0: 實際設置的超時時間。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(3) int mbusMaster_SetTimeout( HANDLE hPort, int milliseconds );

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 讀取ModBus從機設備的線圈值,實現ModBus功能碼1。
輸入參數 hPort: 連接ModBus設備返回的有效操作句柄。
slaveAddr: ModBus從機設備的地址,地址范圍為: 1~255
startRef: 需要讀取線圈的起始值,其范圍為: 1~0x10000
bitArr: 存放讀取線圈數據的數組
refCnt: 需要讀取的線圈數量,其范圍為: 1~2000
返回值 != 0: 該功能操作失敗,返回值為相應的出錯代碼。 = 0: 該功能操作成功。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(4) int mbusMaster_ReadCoils( HANDLE hPort, UCHAR slaveAddr, UINT16 startRef, int bitArr[], UINT16 refCnt);

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 讀取ModBus從機設備離散量的輸入值,實現ModBus功能碼2。
輸入參數 hPort: 連接ModBus設備返回的有效操作句柄。
slaveAddr: ModBus從機設備的地址,地址范圍為: 1~255
startRef: 需要讀取離散量的起始值,其范圍為: 1~0x10000
bitArr: 存放讀取離散量輸入數據的數組
refCnt: 需要讀取的離散量數量,其范圍為: 1~2000
返回值 != 0: 該功能操作失敗,返回值為相應的出錯代碼。 = 0: 該功能操作成功。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(5) int mbusMaster_ReadInputDiscretes( HANDLE hPort, UCHAR slaveAddr, UINT16 startRef, int bitArr[], UINT16 refCnt);

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: ModBus從機設備的單個線圈的寫入操作,實現ModBus功能碼5。
輸入參數 hPort: 連接ModBus設備返回的有效操作句柄。
slaveAddr: ModBus從機設備的地址,地址范圍為: 1~255
bitAddr: 需要操作的線圈地址,其范圍為: 1~0x10000
bitVal: 寫入線圈的值, 1-置位(ON) 0-清(OFF)
返回值 != 0: 該功能操作失敗,返回值為相應的出錯代碼。= 0: 該功能操作成功。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(6) int mbusMaster_WriteCoil( HANDLE hPort, UCHAR slaveAddr, UINT16 bitAddr, int bitVal );

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: ModBus從機設備的多個線圈的寫入操作,實現ModBus功能碼15。
輸入參數 hPort: 連接ModBus設備返回的有效操作句柄。
slaveAddr: ModBus從機設備的地址,地址范圍為: 1~255
startRef: 需要設置的線圈起始值,其范圍為: 1~0x10000
bitArr: 需要設置線圈數據的數組
refCnt: 需要設置的線圈數量,其范圍為: 1~800
返回值 != 0: 該功能操作失敗,返回值為相應的出錯代碼。 = 0: 該功能操作成功。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(7) int mbusMaster_ForceMultipleCoils( HANDLE hPort, UCHAR slaveAddr, UINT16 startRef, int bitArr[], UINT16 refCnt);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 讀取ModBus從機設備多個寄存器值,實現ModBus功能碼3。
輸入參數 hPort: 連接ModBus設備返回的有效操作句柄。
slaveAddr: ModBus從機設備的地址,地址范圍為: 1~255
startRef: 需要讀取寄存器的起始值,其范圍為: 1~0x10000
regArr: 存放讀取寄存器值的數組
refCnt: 需要讀取的寄存器數量,其范圍為: 1~125
返回值 != 0: 該功能操作失敗,返回值為相應的出錯代碼。 = 0: 該功能操作成功。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(8) int mbusMaster_ReadMultipleRegisters( HANDLE hPort, UCHAR slaveAddr, UINT16 startRef, UINT16 regArr[], UINT16 refCnt );

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 讀取ModBus從機設備輸入寄存器值,實現ModBus功能碼4。
輸入參數 hPort: 連接ModBus設備返回的有效操作句柄。
slaveAddr: ModBus從機設備的地址,地址范圍為: 1~255
startRef: 需要讀取輸入寄存器的起始值,其范圍為: 1~0x10000
regArr: 存放讀取輸入寄存器值的數組
refCnt: 需要讀取的輸入寄存器數量,其范圍為: 1~125
返回值 != 0: 該功能操作失敗,返回值為相應的出錯代碼。 = 0: 該功能操作成功。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(9) int mbusMaster_ReadInputRegisters( HANDLE hPort, UCHAR slaveAddr, UINT16 startRef, UINT16 regArr[], UINT16 refCnt);

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: ModBus從機設備多個寄存器的寫操作,實現ModBus功能碼16。
輸入參數 hPort: 連接ModBus設備返回的有效操作句柄。
slaveAddr: ModBus從機設備的地址,地址范圍為: 1~255
startRef: 需要讀取寄存器的起始值,其范圍為: 1~0x10000
regArr: 需寫入寄存器值的數組
refCnt: 需要操作的寄存器數量,其范圍為: 1~100
返回值 != 0: 該功能操作失敗,返回值為相應的出錯代碼。 = 0: 該功能操作成功。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(10) int mbusMaster_WriteMultipleRegisters( HANDLE hPort, UCHAR slaveAddr, UINT16 startRef, UINT16 regArr[], UINT16 refCnt);

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 對ModBus從機設備單個寄存器的寫操作,實現ModBus功能碼6。
輸入參數 hPort: 連接ModBus設備返回的有效操作句柄。
slaveAddr: ModBus從機設備的地址,地址范圍為: 1~255
regAddr: 需要操作寄存器的地址,其范圍為: 1~0x10000
regVal: 需寫入寄存器的值
返回值 != 0: 該功能操作失敗,返回值為相應的出錯代碼。 = 0: 該功能操作成功。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(11) int mbusMaster_WriteSingleRegister( HANDLE hPort, UCHAR slaveAddr, UINT16 regAddr, UINT16 regVal );

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 功能描述: 對ModBus從機設備屏蔽寫寄存器,實現ModBus功能碼22。
輸入參數 hPort: 連接ModBus設備返回的有效操作句柄。
slaveAddr: ModBus從機設備的地址,地址范圍為: 1~255
regAddr: 需要操作寄存器的地址,其范圍為: 1~0x10000
andMask: 屏蔽寫與數據
orMask: 屏蔽寫或數據
返回值 != 0: 該功能操作失敗,返回值為相應的出錯代碼。 = 0: 該功能操作成功。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(12) int mbusMaster_MaskWriteRegister( HANDLE hPort, UCHAR slaveAddr, UINT16 regAddr, UINT16 andMask, UINT16 orMask);

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 對ModBus從機設備讀寫多個寄存器操作,實現ModBus功能碼23。
輸入參數 hPort: 連接ModBus設備返回的有效操作句柄。
slaveAddr: ModBus從機設備的地址,地址范圍為: 1~255
readRef: 需要讀取多個寄存器的起始值,其范圍為: 1~0x10000
readArr: 存放讀取寄存器值的數組
readCnt: 需要讀取的寄存器數量,其范圍為: 1~125
writeRef: 需要寫入多個寄存器的起始值,其范圍為: 1~0x10000
writeArr: 寫入寄存器值的數組
writeCnt: 需要寫入的寄存器數量,其范圍為: 1~125
返回值 != 0: 該功能操作失敗,返回值為相應的出錯代碼。 = 0: 該功能操作成功。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(13) int mbusMaster_ReadWriteRegisters( HANDLE hPort, UCHAR slaveAddr, UINT16 readRef,UINT16 readArr[],UINT16 readCnt, UINT16 writeRef, UINT16 writeArr[], UINT16 writeCnt);

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 獲取ModBus軟件包的版本信息。
返回值 : CHAR類型的字符串,為ModBus軟件包的版本信息。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(14) char * mbusMaster_GetPackageVersion( );

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 根據錯誤代碼獲取錯誤文本信息。
返回值 : CHAR類型的字符串,為錯誤文本信息。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(15) char * mbusMaster_GetErrorText( int errCode );

3、應用例程

對于應用來說,所建立的應用程序工程只需要包含modbus_Master.h、libmbusmaster.a文件即可方便實現對于modbus Master協議API函數的調用。以下代碼為一個簡單的調用例程:

// MbusMasterTest.cpp : Defines the entry point for the application.
//
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include 'modbus_Master.h'
//char *hostName = '192.168.201.178';
//char *hostName = 'ttyS3:9600-8-1-0';
char hostName[80];
int main( int argc,char* argv[] )
{
int i1, result;
int portno, baudRate;
UINT16 dataArr[8];
char str[200];
HANDLE hPort;
// 解析命令行參數:串口號 波特率
if( argc > 1 )
portno = atoi( argv[1] );
else
portno = 3;
if( argc > 2 )
baudRate = atoi( argv[2]);
else
baudRate = 9600;
printf( 'port:%d baudrate:%d\n', portno, baudRate);
sprintf( hostName, 'ttyS%d:%d-8-1-0', portno, baudRate );
// 啟動ModBus協議,連接到Modbus設備
hPort = mbusMaster_OpenPortProtocol( hostName );
if( hPort==INVALID_HANDLE_VALUE )
{
printf( 'Open fail!\n');
return -1;
}
//進入主循環
for( ; ; )
{
result = mbusMaster_ReadMultipleRegisters( hPort, 1, 1,dataArr,sizeof(dataArr) / 2);
//result = mbusMaster_WriteCoil( hPort, 1, 1, 1 );
if (result == 0)
{
for (i1 = 0; i1 < int(sizeof(dataArr) / 2); i1++)
{
printf('[%d]: %hd\n', i1 + 1, dataArr[i1]);
}
}
else
{
strcpy( str,mbusMaster_GetErrorText( result ) );
i1 = strlen( str );
if( i1>0 )
{
printf( '%s!\n', str );
}
}
sleep(1);
}
mbusMaster_ClosePortProtocol( hPort );
return 0;
}

該工程文件中用到專用靜態庫libmbusmaster.a,在eclipse環境對此程序編譯時,需要設置相應的編譯屬性。在Project Explorer視窗下,選擇需要設置的工程文件,然后點擊鼠標右鍵,選擇 Properties項,在窗口中選擇C/C++ Build -> Settings -> Tool Settings -> Sourcery G++ C++ Linker -> Libraries,如下圖所示。其中的一個窗口用于指定庫文件的名稱,一個用于指定庫文件的路徑。

相關閱讀:Linux下的Modbus設備方協議軟件介紹

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11310

    瀏覽量

    209618
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6085

    瀏覽量

    35367
收藏 人收藏

    評論

    相關推薦

    飛騰助力首屆教育信息技術應用創新大賽圓滿落幕

    近日,由中國教育技術協會主辦,教育部教育管理信息中心教育信實驗室、公安部第三研究所、中國電子工業標準化技術協會信工委會
    的頭像 發表于 12-24 09:57 ?123次閱讀

    中科達榮獲2024年軟件信息技術服務優秀企業

    及前百家企業”名單。中科達憑借非凡的技術實力與持續的創新能力,成功入選“2024年度軟件信息技術服務競爭力百強企業”以及“2024年軟件
    的頭像 發表于 10-30 11:44 ?490次閱讀

    Modbus網關如何實現Modbus RTU與Modbus TCP協議的數據采集?

    隨著工業自動化技術的快速發展,數據采集與實時監控已成為提升生產效率、降低故障率的重要手段。Modbus作為一種廣泛應用的通信協議,憑借其開放、簡單、可靠的特點,在工業自動化領域發揮
    的頭像 發表于 10-22 15:57 ?291次閱讀

    Modbus協議網關簡介

    在工業自動化領域,設備間的通信與數據交換是實現高效、智能控制的關鍵。Modbus協議作為一種廣泛應用的通信協議,自1971年由Modicon公司首次推出以來,便以其標準、開放、支持多種電氣接口等特點
    的頭像 發表于 09-23 14:51 ?262次閱讀
    <b class='flag-5'>Modbus協議</b>網關簡介

    串口IEC101、Modbus調試軟件、調試助手

    一款支持串口、網口可以按照需求自定義協議的通訊軟件,目前軟件庫內有處理好的101、104、modbus協議
    的頭像 發表于 09-02 09:55 ?462次閱讀
    串口IEC101、<b class='flag-5'>Modbus</b>調試<b class='flag-5'>軟件</b>、調試助手

    使用Modbus、樓宇自控、電力協議Modbus協議網關實現生產設備的遠程監控和管理

    Modbus網關BL120ML的下行采集協議支持Modbus RTU、DLT645、BACnet MS/TP、Lonworks協議、IEC1
    的頭像 發表于 08-08 17:29 ?390次閱讀
    使用<b class='flag-5'>Modbus</b>、樓宇自控、電力<b class='flag-5'>協議</b>轉<b class='flag-5'>Modbus協議</b>網關實現生產設備的遠程監控和管理

    鋇錸技術Modbus轉MQTT網關:橋接Modbus協議與MQTT協議

    提供了一鍵對接亞馬遜云平臺的解決方案。 BL101網關是鋇錸技術研發的一款高性能工業物聯網設備,通過橋接Modbus協議與MQTT通信協議,實現了工業設備與云端平臺之間的高效互聯。支持
    的頭像 發表于 07-30 16:28 ?396次閱讀
    鋇錸<b class='flag-5'>技術</b><b class='flag-5'>Modbus</b>轉MQTT網關:橋接<b class='flag-5'>Modbus協議</b>與MQTT<b class='flag-5'>協議</b>

    ModBus Scan32模擬軟件的使用方法

    Modbus采用主從式通信,日常使用較多的是Modbus RTU和Modbus TCP/IP兩種協議。我司儀表較多為Modbus RTU
    發表于 07-24 08:04

    esp32 idf支持modbus ascii協議的主機模式嗎?

    esp32 idf 支持 modbus ascii協議的主機模式嗎?
    發表于 06-25 06:25

    Modbus轉EtherCAT協議支持開發定制

    EtherCAT網關BL123 下行采集協議支持: BL123的下行采集協議支持Modbus RTU和M
    的頭像 發表于 05-27 11:25 ?418次閱讀
    <b class='flag-5'>Modbus</b>轉EtherCAT<b class='flag-5'>協議</b><b class='flag-5'>支持</b>開發定制

    BE102下行采集協議支持Modbus RTU

    Modbus轉IEC104網關BE102是一款專為Modbus協議的設備、傳感器、儀器儀表對接電力系統設計的協議轉換網關。Modbus轉IEC104網關BE102配備2/6個RS485
    的頭像 發表于 05-23 17:17 ?427次閱讀
    BE102下行采集<b class='flag-5'>協議</b><b class='flag-5'>支持</b><b class='flag-5'>Modbus</b> RTU

    Modbus協議的工作原理、優缺點及應用

    在當今工業物聯網(IIoT)的浪潮中,Modbus協議無疑是連接傳統工業設備與現代信息技術的橋梁。作為一位工業物聯網的資深工程師,我深感有責任向傳統行業解釋這一重要協議的工作原理、優缺點以及廣泛
    的頭像 發表于 05-21 17:06 ?1406次閱讀
    <b class='flag-5'>Modbus協議</b>的工作原理、優缺點及應用

    BL124采集Modbus RTU和Modbus TCP協議

    Modbus網關BL120是一款專注于Modbus協議之間相互轉換的通信設備。Modbus網關BL120支持多種下行采集協議,包括
    的頭像 發表于 04-29 16:28 ?456次閱讀
    BL124采集<b class='flag-5'>Modbus</b> RTU和<b class='flag-5'>Modbus</b> TCP<b class='flag-5'>協議</b>

    Modbus協議網關是什么?Modbus協議網關的功能

    Modbus協議網關是一種專門用于工業自動化環境中的網絡設備,其主要功能是實現不同通信協議之間的轉換,尤其是將基于Modbus協議的設備或系統與使用其他協議的設備、控制系統或
    的頭像 發表于 04-11 15:51 ?756次閱讀

    軟通動力與捷技術簽訂戰略合作協議

    近日,軟通動力信息技術(集團)股份有限公司(以下簡稱“軟通動力”)與寧波捷技術股份有限公司(以下簡稱“捷技術”)正式簽訂戰略合作
    的頭像 發表于 02-03 16:35 ?1122次閱讀
    主站蜘蛛池模板: 日本人69xxx| 亚洲综合色吧| 很黄的网站在线观看| 啪啪免费小视频| 好爽好紧好大的免费视频国产| xxxx日| 日本一区二区三区在线观看视频| 乱欲小说又粗又大| 成人18毛片| 在线国产播放| 国产免费一级高清淫日本片| 高清性色生活片久久久| 伊人成年综合网| 免费三级pq| 丁香六月综合激情| 中文字幕一精品亚洲无线一区| 婷婷综合色| 六月丁香婷婷激情| 在线免费视频手机版| 久草资源在线播放| 一区二区三区免费在线| 一级毛片免费在线观看网站| 日产精品卡二卡三卡四卡乱码视频| 亚洲第一区第二区| 日本黄色视屏| 国产网红主播chinese| 午夜资源| 在线观看免费午夜大片| 日本免费一区二区在线观看| 亚洲swag精品自拍一区| 免费视频淫片aa毛片| 综合黄色| 在线观看视频免费入口| 怡红院黄色| 免费人成动漫在线播放r18| 18视频免费网址在线观看| 国产精品露脸脏话对白| 高清一区二区在线观看| 欧美乱论视频| 天天天综合| 57pao成人永久免费视频|