成人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 創投網 - m.zhigu.net.cn All rights reserved
聯系我們:39 60 29 14 2@qq.com
皖ICP備2022009963號-3

主站蜘蛛池模板: 男人和女人上床的视频 | 久久精品欧美日韩精品 | 五月丁香六月综合av | 欧美日韩国产中文高清视频 | 黑鬼巨鞭白妞冒白浆 | 性色av一二三天美传媒 | 欧美一级免费片 | 精品久久国产 | 久久精品国产亚洲夜色av网站 | 粉嫩无套白浆第一次 | 久草中文视频 | 欧美午夜影院 | 亚洲精品国偷自产在线99人热 | 超碰97人人干 | 暴雨入室侵犯进出肉体免费观看 | 最新亚洲伦理中文字幕 | 成人午夜在线播放 | 青青草国产精品免费观看 | 乱码人妻一区二区三区 | 亚洲人成色7777在线观看不卡 | 婷婷色伊人 | 中文字幕日韩一区二区不卡 | 亚洲日韩在线中文字幕线路2区 | 国产av影片麻豆精品传媒 | 一本一道人人妻人人妻αv 亚洲视频欧美视频 | 色妞网欧美 | 日韩高清在线免费观看 | 小仙女异导航av福利尤物 | 亚洲精品少妇30p | 51福利视频| 99精品无人区乱码在线观看 | 久久网站免费 | 欧美寡妇性猛交 | 国产99s| 久久久www成人免费精品 | 亚洲伊人五月丁香激情 | 欧美一区二区三区粗大 | 久久精品国产99国产精2021 | 人妻在线日韩免费视频 | 亚洲最大天堂无码精品区 | 国产中年熟女高潮大集合 | 亚洲欧美精品一区 | 免费不卡的av| 日韩精品一区二区三区亚洲综合 | 91精品国产综合久久香蕉922 | 久9视频这里只有精品试看 黄色一级国产 | 人妻熟女一区二区aⅴ | 日韩人妻无码一区二区三区久久 | 一区欧美 | 色欲久久人妻内射 | 曰批免费视频播放免费直播 | 农民人伦一区二区三区剧情简介 | 国产乡下三级全黄三级bd | 动漫精品久久久久 | 成人精品一区二区三区网站 | 69免费视频 | 日本日本乱码伦专区 | av中文在线资源 | 人妻少妇精品视频二区 | 主站蜘蛛池模板: 蛛词}| 野外少妇愉情中文字幕 | 18禁黄网站禁片免费观看女女 | 国产午夜福利亚洲第一 | 亚洲作爱视频 | 国产做爰xxxⅹ高潮视频在线 | 国产美女口爆吞精普通话 | 国产白嫩护士被弄高潮 | 免费看成年人视频 | 国产日韩a | 亚洲国产精品va在线看黑人 | 国产农村乱子伦精品视频 | 韩日av免费| 三级三级久久三级久久18 | 免费黄色欧美 | 伊人伦理 | 天天插日日操 | 成人无码www免费视频 | 欧美在线观看一区二区三区 | 在线成人国产天堂精品av | 亚洲精品无码永久中文字幕 | 久久99这里只有是精品6 | 国产麻豆精品免费喷白浆视频 | 狠狠操图片| 免费国产玉足脚交视频 | 黄色免费观看视频网站 | 国产高潮自拍 | 精品少妇ay一区二区三区 | 亚洲毛片在线播放 | 成人一区二区在线观看视频 | 99精品久久99久久久久 | 国产精品_九九99久久精品 | 欧美在线视频精品 | 欧美三级在线视频 | 最新无码a∨在线观看 | 亚洲精品一区二区国产精华液 | 欧美黑人一区二区 | 9l视频自拍九色9l视频九色 | 欧美特大特白屁股ass | 他掀开裙子把舌头伸进去添视频 | 久久九九久久九九 | 日本三级免费看 | 久久久精品动漫 | 国产精品久久久久久久第一福利 | 97在线精品视频免费 | 免费无挡无摭十八禁视频 | 亚洲三级av | 免费日韩网站 | 欧美肉欲k8播放毛片欧美 | 五月激情四射婷婷 | 中文字幕av日韩 | 午夜中出| 超碰热久久 | 婷婷色六月天 | 天干天干天啪啪夜爽爽av网站 | 亚洲国产日韩一区三区 | 欧美激情一区二区三级高清视频 | 高清福利视频 | 日本中文字幕乱码aa高清电影 | 极品国产91在线网站 | 主站蜘蛛池模板: 蛛词}| 一本色道久久综合亚洲精品不卡 | 免费人成视频在线观看播放网站 | 手机看片福利日韩 | 极品少妇被猛得白浆直流草莓视频 | 日日嗨av一区二区三区四区 | 日批在线播放 | 国产免费又色又爽粗视频 | 日本丰满熟妇videossex8k 亚洲成av人片在 | 三级欧美日韩 | 九九热精品视频在线播放 | 同性女女黄h片在线播放 | 无码人妻aⅴ一区二区三区有奶水 | 久草视频在线资源 | 国产精品国产三级国产aⅴ浪潮 | 日韩人妻无码一区二区三区综合 | 依人在线视频 | 看国产一级片 | 日本无遮挡吸乳呻吟免费视频网站 | 日日爱69| 精品一区二区三区无码免费直播 | 国产成人无码av在线播放不卡 | 久草在线视频首页 | 久久免费少妇做爰 | 亚洲a无码综合a国产av中文 | 97色伦久久x88av | 黄色大片一区二区三区 | 在线观看免费黄色av | 美女露出奶头扒开尿口免费网站 | 天天综合色天天综合色h | 春宵福利网站 | 国产偷国产偷亚洲高清人白洁 | 亚洲福利一区二区 | 久久国产午夜精品理论片推荐 | 久久综合亚洲鲁鲁五月天69堂 | 欧美 日韩 国产 成人 在线 91 | 强被迫伦姧惨叫人妻系列 | 色宅男看片午夜大片啪啪 | 国产精品一区二区久久精品爱微奶 | 天堂а√在线地址中文在线 | 国产精选bt天堂 | 国产精品特级露脸av毛片 | 天天看天天摸天天操 | 在线天堂中文最新版www | 欧美在线网站 | 亚洲桃色天堂网 | 日韩在线中文字幕视频 | 亚洲国产精品悠悠久久琪琪 | 亚洲精品尤物av在线观看任我爽 | 99久久中文字幕三级久久日本 | 黑人巨大av在线播放无码 | 国产乱人伦精品免费 | 久久婷婷久久一区二区三区 | 看国产黄大片在线观看 | 亚洲成熟丰满一区二区三区 | 99精品一级欧美片免费播放 | 男人的天堂va | 爱情岛论坛成人永久网站在线观看 | 国产午夜精品久久久久久 | 伊人久久大香线焦av色 | 主站蜘蛛池模板: 蛛词}| 国产情侣自拍av | 亚洲依依成人综合网址 | 一级特黄视频 | 97久久精品午夜一区二区 | 国产精品系列无码专区 | 一本色道久久综合亚洲 | 国产精品免费一区二区 | 国产56页 | 97精品久久天干天天 | 国产精品一区二区三区四区五区 | 亚洲人成电影网站色www | 国产成人aaa | 99久久精品久久久久久ai换脸 | 男女做爰猛烈吃奶啪啪喷水网站 | 人人妻人人爽人人澡欧美一区 | 青青草久草在线 | 一区二区三区在线观看亚洲电影 | 久久视频免费观看 | 特级做a爰片毛片免费看无码 | 欧美成人aa久久狼窝五月丁香 | 午夜美女在线 | 色综合久久一区二区三区 | 中文字幕乱码久久午夜不卡 | 亚洲精品国产成人av蜜臀 | 一级国产20岁美女毛片 | 精品国产69| 久久久久国产免费 | 一本色道88久久亚洲综合加勒比 | 欧美亚洲一级片 | 天堂网视频 | 亚洲精品乱码久久久久久按摩观 | 免费人妻无码不卡中文字幕18禁 | 无码精品人妻一区二区三区免费看 | 免费看啪啪网站 | 国内少妇偷人精品视频免费 | 超碰在线| www.日本在线播放 | 嫩草嫩草嫩草嫩草 | 久久不见久久见免费影院小说 | 久久久久久久av | 一级国产国产一级 | 国产做受视频 | 欧美成人精品 | 国产精品一区二区人人爽79欧美 | www.九九精品 | 亚洲永久免费观看 | 无套无码孕妇啪啪 | 九色porny国产 | 国产亚洲久久久久久久 | 超碰夜夜 | 日韩黄色免费看 | 色噜噜狠狠色综合免费视频 | 日本a黄色片 | 久久久久久久性潮 | 日本簧片在线观看 | 路边理发店露脸熟妇泻火 | 999综合网 | 亚洲黄色成人 | 日本免费黄色 | 主站蜘蛛池模板: 蛛词}| 18黄男人女人色www | 欧美成人免费观看视频 | 日本精品巨爆乳无码大乳巨 | 婷婷网亚洲色偷偷男人的天堂 | 中文字幕无线码 | 欧美亚洲另类视频 | 久久婷婷国产综合尤物精品 | 国产免费一区二区三区香蕉精 | 一区二区不卡av免费观看 | 亚洲欧美一区二区三区不卡 | 蜜臀久久99精品久久一区二区 | 在线视频观看一区 | 性欧美激情aa在线看 | 国内精品久久久久久久97牛牛 | 韩国av不卡 | 精彩久久| 少妇毛片一区二区三区免费视频 | 69国产成人精品午夜福中文 | 国产精品揄拍100视频 | 亚洲精品av无码喷奶水网站 | 2019年国产精品看视频 | 热99精品香蕉视频 | 久久国产人妻一区二区免费 | 午夜精品喷水 | 日本综合在线 | 神马午夜福利不卡片在线 | 亚洲 激情| 一本之道高清无码视频 | 日韩av在线中文字幕 | 亚洲精品自拍视频在线观看 | 久久国产乱子伦精品免费午夜,浪货好紧 | 婷婷激情偷拍在线 | 小sao货cao得你舒服么顾杉 | 亚洲在线视频 | 无码中文av波多野吉衣迅雷下载 | 午夜福利三级理论电影 | 国产免费视频传媒 | 久久久精品日韩免费观看 | 欧美日韩aaa | 亚洲黄色一级网站 | 亚洲精品免费播放 | 秋霞在线观看片无码免费不卡 | 国产激情精品 | 嫩草研究院在线观看 | 亚洲 欧美 精品 | 久久亚洲精品无码观看 | 成人国产精品日本在线 | 人人妻人人澡人人爽精品日本 | 91精品网站| 国产成人亚洲综合色就色 | 粉嫩高中生无码视频在线观看 | 女fiee性zozo交体内谢 | 超碰97人人模人人爽人人喊 | 青青草手机在线视频 | 久久精品视频免费看 | 51自拍视频在线观看 | 亚洲青青操 | 任你躁x7x7x7x7在线观看 | 国产一区二区在线精品 |