亚洲免费成人av电影_日韩av免费在线看_国产精品久久久久久久久久_日韩成人在线电影网_久久精品视频播放_日本久久久a级免费_欧美午夜性色大片在线观看_国产精品69久久_黑人精品xxx一区一二区_1769国内精品视频在线播放_日韩大陆毛片av_日本久久精品视频_日韩av不卡电影_欧美性生活大片免费观看网址_91性高湖久久久久久久久_久久99_亚洲乱码国产乱码精品精

首頁 資訊 > 業(yè)界 > 正文

基于OpenHarmony 系統(tǒng)通過S7協(xié)議讀取西門子PLC數(shù)據(jù)

在eTS調(diào)用C++方法的過程中,需要使用到Node_API、Cmake等工具來做中間轉(zhuǎn)換。

想了解更多關(guān)于開源的內(nèi)容,請訪問:


(資料圖片)

清一色開源基礎(chǔ)軟件社區(qū)

https://ost.51cto.com

DevEco創(chuàng)建項目和模塊

創(chuàng)建項目只要是API9就行。

基于OpenHarmony 系統(tǒng)通過S7協(xié)議讀取西門子PLC數(shù)據(jù)-開源基礎(chǔ)軟件社區(qū)

創(chuàng)建一個S7模塊要用到這個C++模板。

基于OpenHarmony 系統(tǒng)通過S7協(xié)議讀取西門子PLC數(shù)據(jù)-開源基礎(chǔ)軟件社區(qū)

應(yīng)用架構(gòu)。整個應(yīng)用架構(gòu)可以分為三部分:C++側(cè)、eTS側(cè)、工具鏈。

C側(cè):包含各種文件的引用、C或者C代碼、Node_API將C++函數(shù)與JavaScript關(guān)聯(lián)的信息等。eTS側(cè):包含界面UI、自身方法,調(diào)用引用包的方法等。工具鏈:包含Cmake打包工具在內(nèi)的系列工具。在eTS調(diào)用C++方法的過程中,需要使用到Node_API、Cmake等工具來做中間轉(zhuǎn)換,整個架構(gòu)及其關(guān)聯(lián)關(guān)系如下:

調(diào)用、打包流程。

基于OpenHarmony 系統(tǒng)通過S7協(xié)議讀取西門子PLC數(shù)據(jù)-開源基礎(chǔ)軟件社區(qū)

在eTS調(diào)用C++方法的過程中,調(diào)用、打包流程如下:

基于OpenHarmony 系統(tǒng)通過S7協(xié)議讀取西門子PLC數(shù)據(jù)-開源基礎(chǔ)軟件社區(qū)

移植SNAP7到OpenHarmony

SNAP7移植框架文件在此開源倉庫的cpp文件夾里面。

庫文件:

基于OpenHarmony 系統(tǒng)通過S7協(xié)議讀取西門子PLC數(shù)據(jù)-開源基礎(chǔ)軟件社區(qū)

cpp文件:

基于OpenHarmony 系統(tǒng)通過S7協(xié)議讀取西門子PLC數(shù)據(jù)-開源基礎(chǔ)軟件社區(qū)

把上面文件加入編譯,加入hilog。

基于OpenHarmony 系統(tǒng)通過S7協(xié)議讀取西門子PLC數(shù)據(jù)-開源基礎(chǔ)軟件社區(qū)

把測試代碼執(zhí)行起來

在add中加入s7_main函數(shù)。

基于OpenHarmony 系統(tǒng)通過S7協(xié)議讀取西門子PLC數(shù)據(jù)-開源基礎(chǔ)軟件社區(qū)

修改IP地址,機(jī)架號,插槽號,和DB塊讀取的地址。

基于OpenHarmony 系統(tǒng)通過S7協(xié)議讀取西門子PLC數(shù)據(jù)-開源基礎(chǔ)軟件社區(qū)

在module.json5中添加網(wǎng)絡(luò)權(quán)限。

基于OpenHarmony 系統(tǒng)通過S7協(xié)議讀取西門子PLC數(shù)據(jù)-開源基礎(chǔ)軟件社區(qū)

運(yùn)行調(diào)試

基于OpenHarmony 系統(tǒng)通過S7協(xié)議讀取西門子PLC數(shù)據(jù)-開源基礎(chǔ)軟件社區(qū)

基于OpenHarmony 系統(tǒng)通過S7協(xié)議讀取西門子PLC數(shù)據(jù)-開源基礎(chǔ)軟件社區(qū)

#include #include #include "snap7/snap7.h"#include "snap7/client.h"#include "hilog/log.h"#ifdef OS_WINDOWS# define WIN32_LEAN_AND_MEAN# include #endif     TS7Client *Client; byte Buffer[65536]; // 64 K buffer     int SampleDBNum = 1000;     char *Address = "10.168.100.2";     // PLC IP Address     int Rack = 0,Slot = 1; // Default Rack and Slot     int ok = 0; // Number of test pass     int ko = 0; // Number of test failure     bool JobDone=false;     int JobResult=0;//------------------------------------------------------------------------------//  Async completion callback //------------------------------------------------------------------------------// This is a simply text demo, we use callback only to set an internal flag...void S7API CliCompletion(void *usrPtr, int opCode, int opResult){    JobResult=opResult;    JobDone = true;}//------------------------------------------------------------------------------// SysSleep (copied from snap_sysutils.cpp) multiplatform millisec sleep//------------------------------------------------------------------------------void SysSleep(longword Delay_ms){#ifdef OS_WINDOWS    Sleep(Delay_ms);#else    struct timespec ts;    ts.tv_sec = (time_t)(Delay_ms / 1000);    ts.tv_nsec =(long)((Delay_ms - ts.tv_sec) * 1000000);    nanosleep(&ts, (struct timespec *)0);#endif}//------------------------------------------------------------------------------//  Usage Syntax//------------------------------------------------------------------------------void Usage(){    printf("Usage\n");    printf("  client  [Rack=0 Slot=2]\n");    printf("Example\n");    printf("  client 192.168.1.101 0 2\n");    printf("or\n");    printf("  client 192.168.1.101\n");    getchar();}//------------------------------------------------------------------------------// hexdump, a very nice function, it"s not mine.// I found it on the net somewhere some time ago... thanks to the author ;-)//------------------------------------------------------------------------------#ifndef HEXDUMP_COLS#define HEXDUMP_COLS 16#endifvoid hexdump(void *mem, unsigned int len){        unsigned int i, j;        for(i = 0; i < len + ((len % HEXDUMP_COLS) ? (HEXDUMP_COLS - len % HEXDUMP_COLS) : 0); i++)        {                /* print offset */                if(i % HEXDUMP_COLS == 0)                {                        printf("0x%04x: ", i);                }                /* print hex data */                if(i < len)                {                        printf("%02x ", 0xFF & ((char*)mem)[i]);                }                else /* end of block, just aligning for ASCII dump */                {                        printf("   ");                }                /* print ASCII dump */                if(i % HEXDUMP_COLS == (HEXDUMP_COLS - 1))                {                        for(j = i - (HEXDUMP_COLS - 1); j <= i; j++)                        {                                if(j >= len) /* end of block, not really printing */                                {                                        putchar(" ");                                }                                else if(isprint((((char*)mem)[j] & 0x7F))) /* printable char */                                {                                        putchar(0xFF & ((char*)mem)[j]);                                }                                else /* other char */                                {                                        putchar(".");                                }                        }                        putchar("\n");                }        }}//------------------------------------------------------------------------------// Check error//------------------------------------------------------------------------------bool Check(int Result, const char * function){    printf("\n");    printf("+-----------------------------------------------------\n");    printf("| %s\n",function);    printf("+-----------------------------------------------------\n");    if (Result==0) {        printf("| Result         : OK\n");        printf("| Execution time : %d ms\n",Client->ExecTime());        printf("+-----------------------------------------------------\n");        ok++;    }    else {        printf("| ERROR !!! \n");        if (Result<0)            printf("| Library Error (-1)\n");        else            printf("| %s\n",CliErrorText(Result).c_str());        printf("+-----------------------------------------------------\n");        ko++;    }    return Result==0;}//------------------------------------------------------------------------------// Multi Read//------------------------------------------------------------------------------void MultiRead(){     // Multiread buffers     byte MB[16]; // 16 Merker bytes     byte EB[16]; // 16 Digital Input bytes     byte AB[16]; // 16 Digital Output bytes     word TM[8];  // 8 timers     word CT[8];  // 8 counters     // Prepare struct     TS7DataItem Items[5];     // NOTE : *AMOUNT IS NOT SIZE* , it"s the number of items     // Merkers     Items[0].Area     =S7AreaMK;     Items[0].WordLen  =S7WLByte;     Items[0].DBNumber =0;        // Don"t need DB     Items[0].Start    =0;        // Starting from 0     Items[0].Amount   =16;       // 16 Items (bytes)     Items[0].pdata    =&MB;     // Digital Input bytes     Items[1].Area     =S7AreaPE;     Items[1].WordLen  =S7WLByte;     Items[1].DBNumber =0;        // Don"t need DB     Items[1].Start    =0;        // Starting from 0     Items[1].Amount   =16;       // 16 Items (bytes)     Items[1].pdata    =&EB;     // Digital Output bytes     Items[2].Area     =S7AreaPA;     Items[2].WordLen  =S7WLByte;     Items[2].DBNumber =0;        // Don"t need DB     Items[2].Start    =0;        // Starting from 0     Items[2].Amount   =16;       // 16 Items (bytes)     Items[2].pdata    =&AB;     // Timers     Items[3].Area     =S7AreaTM;     Items[3].WordLen  =S7WLTimer;     Items[3].DBNumber =0;        // Don"t need DB     Items[3].Start    =0;        // Starting from 0     Items[3].Amount   =8;        // 8 Timers     Items[3].pdata    =&TM;     // Counters     Items[4].Area     =S7AreaCT;     Items[4].WordLen  =S7WLCounter;     Items[4].DBNumber =0;        // Don"t need DB     Items[4].Start    =0;        // Starting from 0     Items[4].Amount   =8;        // 8 Counters     Items[4].pdata    =&CT;     int res=Client->ReadMultiVars(&Items[0],5);     if (Check(res,"Multiread Vars"))     {        // Result of Client->ReadMultivars is the "global result" of        // the function, it"s OK if something was exchanged.        // But we need to check single Var results.        // Let shall suppose that we ask for 5 vars, 4 of them are ok but        // the 5th is inexistent, we will have 4 results ok and 1 not ok.        printf("Dump MB0..MB15 - Var Result : %d\n",Items[0].Result);        if (Items[0].Result==0)            hexdump(&MB,16);        printf("Dump EB0..EB15 - Var Result : %d\n",Items[1].Result);        if (Items[1].Result==0)            hexdump(&EB,16);        printf("Dump AB0..AB15 - Var Result : %d\n",Items[2].Result);        if (Items[2].Result==0)            hexdump(&AB,16);        printf("Dump T0..T7 - Var Result : %d\n",Items[3].Result);        if (Items[3].Result==0)            hexdump(&TM,16);         // 8 Timers -> 16 bytes        printf("Dump Z0..Z7 - Var Result : %d\n",Items[4].Result);        if (Items[4].Result==0)            hexdump(&CT,16);         // 8 Counters -> 16 bytes     };}//------------------------------------------------------------------------------// List blocks in AG//------------------------------------------------------------------------------void ListBlocks(){    TS7BlocksList List;    int res=Client->ListBlocks(&List);    if (Check(res,"List Blocks in AG"))    {        printf("  OBCount  : %d\n",List.OBCount);    printf("  FBCount  : %d\n",List.FBCount);   printf("  FCCount  : %d\n",List.FCCount);   printf("  SFBCount : %d\n",List.SFBCount);   printf("  SFCCount : %d\n",List.SFCCount);   printf("  DBCount  : %d\n",List.DBCount);   printf("  SDBCount : %d\n",List.SDBCount);    };}//------------------------------------------------------------------------------// CPU Info : catalog//------------------------------------------------------------------------------void OrderCode(){     TS7OrderCode Info;     int res=Client->GetOrderCode(&Info);     if (Check(res,"Catalog"))     {          printf("  Order Code : %s\n",Info.Code);          printf("  Version    : %d.%d.%d\n",Info.V1,Info.V2,Info.V3);     };}//------------------------------------------------------------------------------// CPU Info : unit info//------------------------------------------------------------------------------void CpuInfo(){     TS7CpuInfo Info;     int res=Client->GetCpuInfo(&Info);     if (Check(res,"Unit Info"))     {          printf("  Module Type Name : %s\n",Info.ModuleTypeName);          printf("  Serial Number    : %s\n",Info.SerialNumber);          printf("  AS Name          : %s\n",Info.ASName);          printf("  Module Name      : %s\n",Info.ModuleName);     };}//------------------------------------------------------------------------------// CP Info//------------------------------------------------------------------------------void CpInfo(){     TS7CpInfo Info;     int res=Client->GetCpInfo(&Info);     if (Check(res,"Communication processor Info"))     {          printf("  Max PDU Length   : %d bytes\n",Info.MaxPduLengt);          printf("  Max Connections  : %d \n",Info.MaxConnections);          printf("  Max MPI Rate     : %d bps\n",Info.MaxMpiRate);          printf("  Max Bus Rate     : %d bps\n",Info.MaxBusRate);     };}//------------------------------------------------------------------------------// PLC Status//------------------------------------------------------------------------------void UnitStatus(){     int res=0;     int Status=Client->PlcStatus();     if (Check(res,"CPU Status"))     {          switch (Status)          {              case S7CpuStatusRun : printf("  RUN\n"); break;              case S7CpuStatusStop: printf("  STOP\n"); break;              default             : printf("  UNKNOWN\n"); break;          }     };}//------------------------------------------------------------------------------// Upload DB0 (surely exists in AG)//------------------------------------------------------------------------------void UploadDB0(){     int Size = sizeof(Buffer); // Size is IN/OUT par                                // In input it tells the client the size available                                // In output it tells us how many bytes were uploaded.     int res=Client->Upload(Block_SDB, 0, &Buffer, &Size);     if (Check(res,"Block Upload (SDB 0)"))     {          printf("Dump (%d bytes) :\n",Size);          hexdump(&Buffer,Size);     }}//------------------------------------------------------------------------------// Async Upload DB0 (using callback as completion trigger)//------------------------------------------------------------------------------void AsCBUploadDB0(){     int Size = sizeof(Buffer); // Size is IN/OUT par                                // In input it tells the client the size available                                // In output it tells us how many bytes were uploaded.     JobDone=false;     int res=Client->AsUpload(Block_SDB, 0, &Buffer, &Size);          if (res==0)     {         while (!JobDone)         {             SysSleep(100);         }         res=JobResult;     }         if (Check(res,"Async (callback) Block Upload (SDB 0)"))     {          printf("Dump (%d bytes) :\n",Size);          hexdump(&Buffer,Size);     }}//------------------------------------------------------------------------------// Async Upload DB0 (using event wait as completion trigger)//------------------------------------------------------------------------------void AsEWUploadDB0(){     int Size = sizeof(Buffer); // Size is IN/OUT par                                // In input it tells the client the size available                                // In output it tells us how many bytes were uploaded.     JobDone=false;     int res=Client->AsUpload(Block_SDB, 0, &Buffer, &Size);          if (res==0)     {         res=Client->WaitAsCompletion(3000);     }         if (Check(res,"Async (Wait event) Block Upload (SDB 0)"))     {          printf("Dump (%d bytes) :\n",Size);          hexdump(&Buffer,Size);     }}//------------------------------------------------------------------------------// Async Upload DB0 (using polling as completion trigger)//------------------------------------------------------------------------------void AsPOUploadDB0(){     int Size = sizeof(Buffer); // Size is IN/OUT par                                // In input it tells the client the size available                                // In output it tells us how many bytes were uploaded.     JobDone=false;     int res=Client->AsUpload(Block_SDB, 0, &Buffer, &Size);          if (res==0)     {         while (!Client->CheckAsCompletion(&res))         {             SysSleep(100);         };              }         if (Check(res,"Async (polling) Block Upload (SDB 0)"))     {          printf("Dump (%d bytes) :\n",Size);          hexdump(&Buffer,Size);     }}//------------------------------------------------------------------------------// Read a sample SZL Block//------------------------------------------------------------------------------void ReadSzl_0011_0000(){     PS7SZL SZL = PS7SZL(&Buffer);  // use our buffer casted as TS7SZL     int Size = sizeof(Buffer);     // Block ID 0x0011 IDX 0x0000 normally exists in every CPU     int res=Client->ReadSZL(0x0011, 0x0000, SZL, &Size);     if (Check(res,"Read SZL - ID : 0x0011, IDX 0x0000"))     {        printf("  LENTHDR : %d\n",SZL->Header.LENTHDR);        printf("  N_DR    : %d\n",SZL->Header.N_DR);        printf("Dump (%d bytes) :\n",Size);        hexdump(&Buffer,Size);     }}//------------------------------------------------------------------------------// Unit Connection//------------------------------------------------------------------------------bool CliConnect(){    Client->SetConnectionType(3);    int res = Client->ConnectTo(Address,Rack,Slot);    if (Check(res,"UNIT Connection")) {          printf("  Connected to   : %s (Rack=%d, Slot=%d)\n",Address,Rack,Slot);          printf("  PDU Requested  : %d bytes\n",Client->PDURequested());          printf("  PDU Negotiated : %d bytes\n",Client->PDULength());    };    return res==0;}//------------------------------------------------------------------------------// Unit Disconnection//------------------------------------------------------------------------------void CliDisconnect(){     Client->Disconnect();}//------------------------------------------------------------------------------// Perform readonly tests, no cpu status modification//------------------------------------------------------------------------------void PerformTests(){     OrderCode();     CpuInfo();     CpInfo();     UnitStatus();     ReadSzl_0011_0000();     UploadDB0();     AsCBUploadDB0();     AsEWUploadDB0();     AsPOUploadDB0();     MultiRead();}//------------------------------------------------------------------------------// Tests Summary//------------------------------------------------------------------------------void Summary(){    printf("\n");    printf("+-----------------------------------------------------\n");    printf("| Test Summary \n");    printf("+-----------------------------------------------------\n");    printf("| Performed : %d\n",(ok+ko));    printf("| Passed    : %d\n",ok);    printf("| Failed    : %d\n",ko);    printf("+----------------------------------------[press a key]\n");    getchar();}float GetPLCData(){    float value0 = 0;    byte value1[4]= {0};    Client->DBRead(1,1244,4,value1);    *((byte*)&value0 + 0) = value1[3];    *((byte*)&value0 + 1) = value1[2];    *((byte*)&value0 + 2) = value1[1];    *((byte*)&value0 + 3) = value1[0];            return value0;}//------------------------------------------------------------------------------// Main              //------------------------------------------------------------------------------float s7_main(){        float result = 0;                Client = new TS7Client();        Client->SetConnectionType(3);        Client->ConnectTo("192.168.1.2", 0, 1); //PLC的IP地址,機(jī)架號,插槽號                        OH_LOG_Print(LOG_APP, LOG_INFO, 0xFF00, "PluginManager", "[S7 CONNECT]Connected");                if(Client->Connected() == true){            OH_LOG_Print(LOG_APP, LOG_INFO, 0xFF00, "PluginManager", "[S7 CONNECT]連接成功");        }                float value0 = 0;        byte value1[4]= {0};        Client->DBRead(1,1111,4,value1);        *((byte*)&value0 + 0) = value1[3];        *((byte*)&value0 + 1) = value1[2];        *((byte*)&value0 + 2) = value1[1];        *((byte*)&value0 + 3) = value1[0];            result = value0;                                delete Client;            return result;}

想了解更多關(guān)于開源的內(nèi)容,請訪問:

清一色開源基礎(chǔ)軟件社區(qū)

https://ost.51cto.com

關(guān)鍵詞:

最近更新

關(guān)于本站 管理團(tuán)隊 版權(quán)申明 網(wǎng)站地圖 聯(lián)系合作 招聘信息

Copyright © 2005-2023 創(chuàng)投網(wǎng) - www.474933.com All rights reserved
聯(lián)系我們:39 60 29 14 2@qq.com
皖I(lǐng)CP備2022009963號-3

嫩草视频免费在线观看| 精品国产乱码久久久久久1区2匹| 九九在线高清精品视频| 紧缚奴在线一区二区三区| 国产精品久久久久久影院8一贰佰| 来吧亚洲综合网| 国产精品波多野结衣| 国产在线播精品第三| 亚洲欧美日本视频在线观看| 亚洲剧场午夜在线观看| 三级做a全过程在线观看| 国产a级一级片| 一区二区三区四区欧美| 性疯狂做受xxxx高清视频| 97香蕉碰碰人妻国产欧美| 国产三级理论片| 亚洲国产视频一区| 国产亚洲在线观看| 91久久午夜| 在线亚洲免费| 91亚洲无吗| 91香蕉亚洲精品| av网站在线播放| jizzjizz日本护士视频| 成人中文字幕在线播放| 日本久久久久久久久久久久| 九九精品在线观看视频| 精品无码一区二区三区| 免费成人深夜蜜桃视频| 美女黄视频在线播放| 久久精品视频在线观看免费| 九色蝌蚪国产| 欧美婷婷久久| 久久久久无码国产精品不卡| 成人影视亚洲图片在线| 日韩电影免费观看在线观看| av亚洲精华国产精华精华| 亚洲在线电影| 亚洲在线观看一区| 在线观看免费黄网站| 免费国产一区| 青青草视频成人| 日本亚洲最大的色成网站www| 女人在下体塞跳蛋在线观看| 波多野结衣一区二区三区四区| 久久精品免费av| 亚洲av成人精品一区二区三区| 亚洲综合日韩欧美| 久久九九精品视频| 日韩中文首页| 日韩在线第二页| 灌醉mj刚成年的大学平面模特| 啊啊啊射了视频网站| 亚洲黄色尤物视频| 91精品国产91久久综合| 欧美日韩高清一区二区| 亚洲aⅴ日韩av电影在线观看| 欧美精品日韩一本| 亚州欧美一区三区三区在线| 欧美日韩人妻精品一区二区三区| 97久久夜色精品国产| 自拍偷拍亚洲天堂| 亚洲电影第三页| 国产传媒国产传媒| 欧美亚洲第一区| 欧美视频一区二区在线| 午夜精品久久17c| 天堂av中文在线资源库| 日本亚洲视频在线| 欧美va亚洲va| 橘梨纱av一区二区三区在线观看| 日韩亚洲国产中文字幕欧美| 日韩av最新在线观看| 精品国产91乱码一区二区三区四区| 中文字幕乱码人妻综合二区三区| 免费在线黄网站| 星空大象在线观看免费播放| 午夜时刻免费入口| 国产精品视频网站| 99色在线观看| 欧美中在线观看| www黄色在线观看视频| 国产精品入口日韩视频大尺度| 五月天国产精品| 曰本色欧美视频在线| 国产人成精品一区二区三| 男人捅女人免费视频| 国产5g成人5g天天爽| 在线电影中文日韩| 亚洲第一免费看片| 亚洲激情黄色| 免费裸体视频网站| 久久99久久98精品免观看软件| 青青青免费视频在线2| 踪合国产第二页| 国产精品一级在线观看| 性生活三级视频| 欧洲s码亚洲m码精品一区| 国产精品chinese| 麻豆视频免费看| 欧美精品九九99久久| 久久久久久久久亚洲精品| 人人插人人射| jizzjizzjizz亚洲女| 日本道中文字幕| 91麻豆精品国产自产在线| 91精品国产自产在线老师啪| 国产午夜亚洲精品午夜鲁丝片| 一区二区三区黄| 久久黄色片视频| 亚洲国产精品推荐| 欧美一区二区在线观看视频| 国产麻豆欧美日韩一区| 奇米影视四色在观看线| 日韩片欧美片| 日韩中文在线视频| ass精品国模裸体欣赏pics| 久久伊人成人网| 东方aⅴ免费观看久久av| 成人影院大全| 日本网站在线播放| 一区二区在线视频观看| 五月天六月丁香| 国产精品美女| 草碰在线视频| 成人精品影视| 精品国产乱码久久久久久浪潮| 播九公社成人综合网站| 欧美aa国产视频| 精品欧美一区二区久久| av成人在线网站| 久久综合久久美利坚合众国| 无码人妻精品一区二区三区蜜桃91| 久久高清免费| 亚洲国产精品一区二区三区| 在线观看亚洲国产| 爱爱的免费视频| 久久电影网站| 色综合久综合久久综合久鬼88| 中文字幕亚洲欧美日韩高清| 欧美男男video| 拔插拔插华人永久免费| 玉足女爽爽91| 日韩av在线影院| 国产在线观看免费视频软件| 99久久久国产| 国产日韩亚洲欧美综合| 中文字幕人妻无码系列第三区| 懂色av蜜臀av粉嫩av喷吹| 日日夜夜一区二区| 日本乱码高清不卡字幕| 牛牛热在线视频| 亚洲一级影院| 免费成人动漫| 一区二区不卡视频在线观看| 精品大片一区二区| 欧美成人一区二区三区四区| 国产精品x453.com| 三区精品视频观看| 国内拍拍自拍视频在线观看| 日韩美女在线观看| 直接看的黄色网址| 国产精品白嫩白嫩大学美女| 欧美日韩成人免费| 97中文字幕在线观看| 欧美一级高潮片| 第四色在线一区二区| 久久久久久久久久久久久久久久av| 男女av一区三区二区色多| 国产精品久久亚洲| 欧美高清xxxxxkkkkk| 日韩av三级在线观看| av男人的天堂网| 欧美一级特黄aaaaaa| 国产激情无套内精对白视频| 日韩欧美成人精品| 黄色片在线观看网站| 欧美一二三四区在线| 欧美日韩一级黄色片| 亚洲国产精品一区二区三区| 成人国产精品免费视频| 欧美高清免费| 亚洲色图偷拍视频| 97色伦图片97色伦在线电影| 成人免费在线观看av| 又黄又爽无遮挡| 欧美日韩电影在线播放| 国产成人精品亚洲777人妖| 欧美男男freegayvideosroom| 国产精品免费区二区三区观看| 在线观看一区二区精品视频| 激情欧美亚洲| 国产黑丝在线观看| 97视频免费| 国产精品嫩草99a| 国产精品久久综合| 激情五月婷婷在线| 中文字幕精品久久久| 久久久久久三级| 99在线首页视频| 日本中文字幕第一页| 国产极品一区二区三区| 久久人人爽人人爽人人片av免费| 8848hh四虎| 欧洲精品在线观看| 偷拍中文亚洲欧美动漫| 粉嫩av一区二区三区| 日韩成人高清视频| 亚洲成人一区二区| 免费电影日韩网站| 欧美丝袜美女中出在线| 91久久精品一区二区| 找av导航入口| 97se亚洲国产一区二区三区| 一本一道波多野毛片中文在线| 欧美大片在线看免费观看| 色偷偷久久人人79超碰人人澡| 久久亚洲专区| 国产欧美成人xxx视频| 丁香综合五月| 91网站免费观看| 国产精品1000部啪视频| 欧美日韩美女在线| 欧美在线播放一区二区| 免费观看一级一片| 中文精品电影| 小小的日本在线观看免费色网| 午夜国产福利在线| 你懂的在线观看视频网站| 91av在线免费播放| 国产av一区二区三区传媒| 麻豆精品国产自产在线| 91久久久久久久久久久| 97久久人人超碰caoprom| 我不卡伦不卡影院| 日本一区网站| 久久免费区一区二区三波多野| 一区二区三区四区中文字幕| 在线观看黄色av| 国产精品videossex久久发布| 国卡一卡二卡三免费网站| 欧美日韩国产综合在线| 69精品无码成人久久久久久| 国产成人精品一区二区三区四区| 欧美色片在线观看| 国产aaa精品| 在线观看h网| 翔田千里一区二区| 自拍偷拍亚洲| 久久精品国产精品亚洲毛片| 精品国产美女在线| 亚洲电影av在线| 666av成人影院在线观看| 日本高清视色| 国产成人免费高清视频| 国产va在线视频| 天堂成人免费av电影一区| 日本熟妇一区二区| 嫩草研究院在线观看| 欧美精品粉嫩高潮一区二区| 精品国产一区二区三区久久久蜜月| 情事1991在线| 亚洲精品国产品国语在线app| 99成人精品| 九九热免费在线视频| 成网站在线观看人免费| www.豆豆成人网.com| 亚洲第一成人在线视频| 免费男女羞羞的视频网站在线观看| 亚洲精品视频在线观看网站| 男女爱爱视频免费| 久久综合九色综合欧美狠狠| 欧美日韩高清一区| 亚洲一区二区高清视频| 亚洲一级一级97网| 欧美图片第一页| 日韩视频久久| 日韩有码一区二区三区| 国产精品变态另类虐交| 国产成人精品一区二三区| 日韩vs国产vs欧美| 国产大学生校花援交在线播放| 在线视频 日韩| 好吊日在线视频| 国产一区二区三区免费看| 免费久久精品视频| 色综合欧美在线视频区| 中国黄色片视频| 欧美激情电影| 成人在线免费视频观看| 偷偷www综合久久久久久久| 涩爱av在线播放一区二区| 日韩伦理视频| www.夜夜爽| 欧美三日本三级少妇三99| 三级ai视频| 亚洲精品国产高清久久伦理二区| bt天堂新版中文在线地址| 91精品国产吴梦梦| 久久亚洲精品大全| 91丝袜美腿高跟国产极品老师| 亚洲女与黑人做爰| 欧美日韩国产中文精品字幕自在自线| 亚洲激情77| 青青草原在线免费观看视频| 午夜精品一区二区三区在线| 丝袜美腿一区二区三区| 男男h黄动漫啪啪无遮挡软件| 国产在线视频在线观看| 亚洲国产精彩视频| 国产亚洲精品91在线| 头脑特工队2在线播放| 欧美一区二区三区的| 亚洲欧美日本在线观看| 亚洲观看黄色网| 欧美高跟鞋交xxxxxhd| eeuss在线播放| 国产激情网址| 肉色超薄丝袜脚交| 日本视频免费高清一本18| 懂色aⅴ精品一区二区三区蜜月| 男人添女荫道口喷水视频| 成人一二三区| 在线播放亚洲一区| 亚州av一区二区| 三叶草欧洲码在线| 午夜一级在线看亚洲| 影音先锋男人资源在线观看|