成人sese/国产免费人成视频在线观看/九色 在线/免费观看又色又爽又黄的/啪在线视频/日日做日日摸夜夜爽

首頁 資訊 > 業界 > 正文

基于OpenHarmony 系統通過S7協議讀取西門子PLC數據

在eTS調用C++方法的過程中,需要使用到Node_API、Cmake等工具來做中間轉換。

想了解更多關于開源的內容,請訪問:


(資料圖片)

清一色開源基礎軟件社區

https://ost.51cto.com

DevEco創建項目和模塊

創建項目只要是API9就行。

基于OpenHarmony 系統通過S7協議讀取西門子PLC數據-開源基礎軟件社區

創建一個S7模塊要用到這個C++模板。

基于OpenHarmony 系統通過S7協議讀取西門子PLC數據-開源基礎軟件社區

應用架構。整個應用架構可以分為三部分:C++側、eTS側、工具鏈。

C側:包含各種文件的引用、C或者C代碼、Node_API將C++函數與JavaScript關聯的信息等。eTS側:包含界面UI、自身方法,調用引用包的方法等。工具鏈:包含Cmake打包工具在內的系列工具。在eTS調用C++方法的過程中,需要使用到Node_API、Cmake等工具來做中間轉換,整個架構及其關聯關系如下:

調用、打包流程。

基于OpenHarmony 系統通過S7協議讀取西門子PLC數據-開源基礎軟件社區

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

基于OpenHarmony 系統通過S7協議讀取西門子PLC數據-開源基礎軟件社區

移植SNAP7到OpenHarmony

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

庫文件:

基于OpenHarmony 系統通過S7協議讀取西門子PLC數據-開源基礎軟件社區

cpp文件:

基于OpenHarmony 系統通過S7協議讀取西門子PLC數據-開源基礎軟件社區

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

基于OpenHarmony 系統通過S7協議讀取西門子PLC數據-開源基礎軟件社區

把測試代碼執行起來

在add中加入s7_main函數。

基于OpenHarmony 系統通過S7協議讀取西門子PLC數據-開源基礎軟件社區

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

基于OpenHarmony 系統通過S7協議讀取西門子PLC數據-開源基礎軟件社區

在module.json5中添加網絡權限。

基于OpenHarmony 系統通過S7協議讀取西門子PLC數據-開源基礎軟件社區

運行調試

基于OpenHarmony 系統通過S7協議讀取西門子PLC數據-開源基礎軟件社區

基于OpenHarmony 系統通過S7協議讀取西門子PLC數據-開源基礎軟件社區

#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地址,機架號,插槽號                        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;}

想了解更多關于開源的內容,請訪問:

清一色開源基礎軟件社區

https://ost.51cto.com

關鍵詞:

最近更新

關于本站 管理團隊 版權申明 網站地圖 聯系合作 招聘信息

Copyright © 2005-2023 創投網 - www.zhigu.net.cn All rights reserved
聯系我們:39 60 29 14 2@qq.com
皖ICP備2022009963號-3

主站蜘蛛池模板: 色五月丁香五月综合五月4438 | 精品国产国语对白久久免费 | 亚洲一级天堂 | 麻豆丰满少妇chinese | 亚洲欧美日本道视频 | 亚洲涩涩在线 | 免费在线观看亚洲 | 69天堂人成无码麻豆免费视频 | 中国精品偷拍区偷拍无码 | 一本一本久久a久久精品综合麻豆 | 国产无遮挡又爽又刺激的视频老师 | 人妻少妇乱子伦无码视频专区 | 久产久精国产品 | 无码人妻丰满熟妇啪啪7774 | 亚洲人久久久 | aa国产 | 成人免费一级片 | 国产四区视频 | 久久精品亚洲成在人线av麻豆 | 亚洲国产av无码男人的天堂 | 中文无码高潮到痉挛在线视频 | 揉少妇的双乳从后挺进视频 | 亚洲国产欧美在线人成app | 欧美一区二区三区成人片在线 | 人妻丰满av无码久久不卡 | 国产91原创 | 国产成人无码视频一区二区三区 | avt天堂网 | 最近高清中文字幕免费 | 蜜臀久久99精品久久久久宅男 | 乱码精品 | 国产激情综合在线观看 | 国产欧美日韩免费 | 2021无码最新国产在线观看 | 粗暴蹂躏av一区二区 | 日本乱偷人妻中文字幕 | 91九色国产ts另类人妖 | 免费国产va在线观看中文字 | 免费黄色小网站 | 亚洲精品a区 | 婷婷六月天丁香 | 免费看无码自慰一区二区 | 国产重口老太伦 | 97香蕉碰碰人人澡人人爱 | 国产日韩欧美一区二区久久精品 | 青青草视频偷拍 | 天堂在线资源8 | 日本黄色不卡 | 在线播放网址 | 两个男人吮她的花蒂和奶水视频 | 日本免费一区二区三区最新 | 又粗又猛又大爽又黄老大爷5 | 成人免费在线观看 | 精品久久伊人 | 电影内射视频免费观看 | 日韩高清不卡在线 | 男人的天堂伊人 | 精品人妻系列无码一区二区三区 | 国产精品美女久久久久久丫 | 主站蜘蛛池模板: 蛛词}| 欧美精品一区二区视频在线观看 | 免费萌白酱国产一区二区三区 | 欧美丰满大白屁股喷水xxxx | porny丨精品自拍视频 | 人妻丰满熟妇岳av无码区hd | 中文字幕在线观看精品 | 18禁女裸乳扒开免费视频 | 久久看视频只这 | 欧洲美洲精品一区二区三区 | 美女白嫩光屁屁网站 | 伦埋琪琪电影院久久 | 女人让男人桶爽30分钟 | 久久无码潮喷a片无码高潮 欧美成人视屏 | 久久精品国产福利一区二区 | 欧美制服丝袜亚洲另类在线 | www.亚洲高清 | jizz 亚洲大全 | 欧美成人精品三级在线观看 | 果冻传媒亚洲区二期 | 亚洲www久久久 | 国产在线无码播放不卡视频 | 99久久久国产精品免费牛牛 | 激情综合网激情 | 在线视频国产一区 | 美女福利视频在线 | 日本欧美一区二区免费视频 | 在线观看国产最新a视频 | 亚洲国产精品成人综合久久久久久久 | 337p粉嫩日本大胆瓣开下部 | 国产性色的免费视频网站 | 天天色啪 | 国产一区二区女内射 | 99欧美视频一区二区国产 | 少妇三级全黄在线播放 | 欧美极品免费 | 久久无码人妻一区二区三区午夜 | 欧美粗大视频 | 成人做爰999 | 欧美成人综合久久精品 | 久久中文字幕av | 女人18毛片水真多 | 青青青手机视频 | 性欧美又大又长又硬 | 少妇大叫受不了了爽爽爽摸摸视频 | 欧美日韩另类一区二区 | 国产白丝视频 | 国产调教av | 最新日本一道免费一区二区 | 性中文字幕 | 一区二区午夜 | 超碰青草 | 香港经典a毛片免费观看播放 | 97人人模人人爽人人少妇 | 日韩极品视频在线观看 | 超碰cao草棚gao进入蜜桃 | a毛片在线观看 | 日韩精品乱 | 久久久久久免费视频 | 精品国偷自产在线电影 | 主站蜘蛛池模板: 蛛词}| 精品视频一区二区三区四区戚薇 | 国产一级理论 | 在线亚洲精品国产成人av剧情 | 亚洲网站在线观看 | 欧美激情性xxxxx高清真 | 中文字幕日韩在线视频 | 综合狠狠 | 中国老妇荡对白正在播放 | 最近的中文字幕在线看视频 | 成 人 网 站 免 费 av | 黄色一大片 | 欧美bbb | 2018狠狠干| 亚洲精品一区久久久久久 | 白浆影院 | 亚洲日本va中文字幕亚洲 | av在线 亚洲 天堂 | 国产麻豆一精品一av一免费 | 亚洲视频中文字幕在线观看 | 国产精品97 | 亚洲毛片在线播放 | 天天看片天天av免费观看 | 国产7色在线 | 国产 | 夜夜嗨网址 | 日韩精品黄色片 | 亚洲一区在线观看视频 | 3atv精品不卡视频 | 久久精品无码专区免费青青 | 亚洲福利视频在线 | 国产无遮挡又黄又爽免费视频 | 国产精品9999 | 精品久久久久久无码中文字幕漫画 | 国产一区视频免费在线观看 | 熟女俱乐部五十路六十路av | 亚洲人成电影在线观看网色 | 西西人体大胆无码视频 | 国产av无码精品色午夜 | 777午夜福利理论电影网 | 欧美做爰性生交视频 | 久久天天躁狠狠躁夜夜躁app | 日本亚洲精品色婷婷在线影院 | 在线观看中文字幕一区二区 | 女人天堂av手机在线 | 免费人成无码大片在线观看 | 公妇乱淫中文字幕 | 色久综合网 | 少妇精品在线 | 日韩一区二区视频在线 | 激情com| 亚洲黑人巨大videos | 欧美xxxx黑人又粗又长 | 日本内射精品一区二区视频 | 一道本伊人 | 久久99国产综合精品免费 | 9l视频自拍九色9l视频九色 | 人妻有码av中文字幕久久琪 | 人妻少妇av中文字幕乱码 | 老司机在线免费视频 | 日韩精品在线播放 | 主站蜘蛛池模板: 蛛词}| aaaa级国产大片直接观看调教 | 国产成人午夜福利在线小电影 | 国产在观线免费观看久久 | 高清国产天干天干天干不卡顿 | 国产第一页在线播放 | 精品熟女少妇a∨免费久久 狂野3p欧美激情性xxxx | 成人美女视频在线观看 | 亚洲色欲一区二区三区在线观看 | 福利毛片| 欧美成人午夜在线观看视频 | 国产伦精品一区二区三区视频黑人 | 欧美激情在线一区 | 二女共侍一夫三级 | 成人日批视频 | 欧洲多毛裸体xxxxx | 五月精品夜夜春夜夜爽久久 | 日xxxx| 精品久久久久一区二区国产 | 末发育娇小性色xxxx | 一区二区三区在线免费观看 | 中文字幕无码精品亚洲35 | 精品久久久99大香线蕉 | 久久久久人 | 日日噜噜噜夜夜爽爽狠狠 | 国产福利高清在线视频 | 日本少妇高潮xxxxⅹ | 美女网站视频在线 | 色94色欧美sute亚洲线路二 | 久久精品日韩av无码 | 不卡无码av一区二区三区 | 秋霞电影网午夜鲁丝片无码 | 午夜爽爽久久久毛片 | 国产激情网址 | 久久久精品国产免费观看一区二区 | 黄色成人免费视频 | 国产精品va在线观看手机版hd | 久久久男女 | 性欧美肥臀大腚bbwhd | 久久成人免费精品网站 | 91插插| 天天影视插插插 | 中日韩亚洲人成无码网站 | 亚洲午夜网| 香蕉97超级碰碰碰视频 | 日韩av无码精品一二三区 | 久久影院视频 | 97蜜桃网 | 免费高清欧美一区二区三区 | 欧美性视频网 | 欧美性猛交xxxx三人 | 精品一区中文字幕 | 久久久中文字幕日本无吗 | 日韩精品无码一区二区三区av | 性欧美乱妇高清come | 超级碰人人 | 欧美日韩国产a | 亚洲国产成人久久综合碰 | 小雪奶水翁胀公吸的小说 | 精品国产露脸久久av | 主站蜘蛛池模板: 蛛词}| 忘忧草98| 97久久人澡人人添人人爽 | 国产亚洲色婷婷久久99精品 | 69国产成人精品二区 | 亚洲精品人成网线在线播放va | 色88久久久久高潮综合影院 | 亚洲激情区| 国产午夜亚洲精品国产成人小说 | 色欲αv一区二区三区天美传媒 | 亚洲欧美在线人成swag | 五月丁香久久综合网站 | 三级网站免费 | 久久伊人色av天堂九九小黄鸭 | 欧洲一区二区 | 免费人妻无码不卡中文字幕18禁 | 亚洲国产一区二区在线 | 女的被弄到高潮娇喘喷水视频 | av免播放器| 国产精品乱码一区二区三区四川人 | 免费国产玉足脚交视频 | 欧美-第1页-屁屁影院 | 羞羞视频免费入口网站 | 4438ⅹ亚洲全国最大色丁香 | 天干夜夜爽爽日日日日 | 97久久久久久久久久久久 | 成人在线观看亚洲 | 日本少妇色视频 | 国产男女免费完整视频在线 | 人与拘一级a毛片 | 凹凸国产熟女精品视频 | 色偷一区国产精品 | 成年人免费公开视频 | 中文字幕在线观看日韩 | 国产视频首页 | 少妇日韩 | 日韩va在线观看 | 一区二区免费在线视频 | 人妻av乱片av出轨 | 天堂俺去俺来也www色官网 | 久久99久久99精品免观看软件 | 亚洲欧洲成人a∨在线 | 亚洲午夜未满十八勿入 | 中文字幕2页 | 欧美特黄在线观看 | 国产精品久久人人做人人爽 | aaa极品在线 | 国产精品99无码一区二区 | 好吊妞人成免费视频观看 | 久久丫精品系列 | 一本大道区一区二区三乱码八 | 亚洲国产极品 | 黄色一级大片在线免费看产 | 免费毛片在线播放免费 | 欧美日韩在线观看成人 | 中文字幕3区 | 国产伊人网 | 日本不卡123 | 91看片免费| 亚洲黄色在线免费观看 |