国产一区二区三区毛片_亚洲乱码AV中文一区二区_亚洲精品无码专区在线播放_日韩欧美一二_咪咪av影院_欧久久av一区二区

wjun7610
級別: 略有小成
精華主題: 0
發帖數量: 127 個
工控威望: 249 點
下載積分: 708 分
在線時間: 35(小時)
注冊時間: 2007-09-16
最后登錄: 2025-05-07
查看wjun7610的 主題 / 回貼
樓主  發表于: 2007-09-22 12:49
一、最新三菱PLC FX系列PLC編程口通信協議動態鏈接庫DLL(以下簡稱DLL),是為滿足工業通信需要,針對工業領域要求上位機對PLC實時采集與控制的組態編程而設計。本DLL是采用Delphi語言開發的標準串口通訊庫,具有以下特點:
1)、實時性、可靠性好,可根據通信數據量自行調整通信時間;
2)、適用于多PLC聯網和上位機通信,滿足多方面的需要;
3)、函數接口功能全,操作簡單;
4)、附加實用轉換與讀取函數,易于快速開發(VC等非RAD開發環境的開發);
5)、支持USB、PC擴展卡等擴展串口號;
6)、支持多種操作系統win9x/win2000/winXP;
7)、可在多種編程環境下使用,例如VB、VC、Delphi等開發環境。

二、DLL函數說明

1、打開串口
Function ComOpen(nport:longint;User:Pchar):longint;stdcall;
參數:nport: 打開串口號,取值為1~8,代表COM1~COM8;
      User:DLL授權用戶名;
返回值:長整型,操作成功返回1,否則返回0;打開串口不成功即返回0時的原因:1)、串口不存在或被占用; 2)、DLL試用過期; 3)、DLL授權注冊不正確。

使用舉例:
ComOpen(1,'wjun') , 打開COM1口。

2、關閉串口
Function ComClose(nport:longint):longint;stdcall;
參數:nport: 串口號,取值為1~8,代表COM1~COM8;
返回值:長整型,操作成功返回1,否則返回0;

使用舉例:
ComClose(1) ,關閉打開的COM1口。

3、PLC存儲器的預置(D)
Function ComDWrite(nport,address:longint;sendstr:pchar):longint;stdcall;
參數:
nport: 串口號,取值為1~8,代表COM1~COM8;
address: 寄存器地址,取值為0~4095(此值需根據不同的PLC操作選擇合適的地址范圍);
sendstr:  給寄存器寫入的值,該值為4個一組的16進制字符串組其取值為0000~FFFF(整數值為0~65535),當要寫入多個寄存器值時依次排列即可。如給D0與D1寫值100和1000,先將100轉成16進制字符串0064、1000轉成16進制字符串03E8,則sendstr=006403E8;一次最多寫32個寄存器即字符串長應小于等于128;
                            ---------- ----  ~  ---------
寫字符串序列如:            | 0000 | FFFF | 0010 | 0064 |  ~    | 0010 | 0064 |
                            ---------- ----  ~  ---------
返回值:長整型,操作成功返回1,否則返回0;

使用舉例:
ComDwrite(1,0,‘006403E8’),由串口1預置值D0=100,D1=1000。

4、PLC存儲器的讀取(C、D、T)
Function ComDRead(nport,address,Count:longint;element:Pchar):Pchar;stdcall;
參數:
nport: 串口號,取值為1~8,代表COM1~COM8;
address: 寄存器地址,取值為D區0~4095、C、T(定時器/計數器當前值)區0~255;
Count: 讀取寄存器個數,最多讀取32個寄存器;DLL讀取的越界會自動舍去
element:元件名稱,支持D、C、T;
返回值:字符串數據,字符串數據的終止符為"@";
使用舉例:
ComDRead(1,0,4,'D') ,由COM1讀取D0~D3四個寄存器的值,如返回值為“0001006403E809F0@”,則表示D0=0001, D1=0064,D2=03E8,D3=09F0;

                            ---------- ----  ---
讀字符串序列如:            | 0001 | 0064 | 03E8 | 009F | | @ |
                            ---------- ----  ---
返回值為16進制字符串,可以將返回值如上四位一組再轉換成“0~65535”的整數值。


5、PLC的多線圈強置(C、M、S、T)
Function ComEForce(nport,address:longint;element,sendstr:pchar):longint;stdcall;
參數:
nport: 串口號,取值為1~8, 代表COM1~COM8;
address: 位單元地址,定時器C:0~255、M:0~2047、S:0~999、T:0~255、特M: M8000~M8255;
element:元件名稱,支持C、M、S、T;
sendstr:  給多線圈寫入的值,該值為2個一組的16進制字符串組其取值為00~FF(整數值為0~255),當要寫入多個值時依次排列即可。例如: 字節地址C0'(實際由位地址位C0~C7)、字節地址C1'(實際由位地址位C8~C15),如給C0'賦值80、C1'賦值CF,則sendstr=80CF;一次最多寫64個字節,即字符串長應小于等于128;
                          ---------- - ~  ------
寫字符串序列如:          | 00 | FF | 10 | 64 |  ~  | 1F | 48 |
                          ---------- - ~  ------

實際字符串與位地址的數值應如下表:(將上例的字節C0'、C1'轉換為位地址C0~C15由下表對應)
            ------------------------------------
位地址:    | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
            ------------------------------------ 
各位賦值:  | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1  | 1  | 0  | 0  | 1  | 1  | 1 | 1 |
            ------------------------------------
16進制串:  |      8      |      0      |        C        |        F      |
            ------------------------------------
         
返回值:長整型,操作成功返回1,否則返回0;

使用舉例:
ComEForce(1,0,‘C’ ,‘80CF’),DLL將按上表給相應位強置值,這里地址address賦值0~7都是給C0~C15的強置值,因實際字節地址=address div 8 (0~7 div 8 都等于0,即都是給C0'、C1'強置值)。

字節地址如Mx' = address div 8 ,M、S、C、T都按此公式計算如何給實際的位地址強置值。

6、PLC的多線圈讀取(C、M、S、T、X、Y)
Function ComERead(nport,address,Count:longint;element:Pchar):Pchar;stdcall;
參數:
nport: 串口號,取值為1~8,代表COM1~COM8;
address: 位單元地址,定時器C:0~255、M:0~2047、S:0~999、T:0~255、X:0~177(8進制)、Y:0~177(8進制)、特M: M8000~M8255;
Count: 讀取字節個數,最多讀取64個字節;
element:元件名稱,支持C、M、S、T、X、Y;
位單元的字節組成按8個位一組,如56(16進制)則表示下表的位構造值。
              ----------------
位地址:      | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
              ----------------
各位賦值:    | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 |
              ----------------
16進制串:    |      5      |      6      |
              ----------------
使用舉例:
ComERead(1,0,1,‘M’),如返回56(16進制)則M0~M7的值為上表反應的結果。0~255的位地址映射成字節地址應為0~31。
即:實際地址=address / 8 ,如ComERead(1,11,2,‘C’)相應都得是C8~C15與C16~C23組合的兩個字節的值,例如返回值為“870A@”
        -----------------------------------------
位地址:| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | @ |
        ----------------------------------------- 
各位賦值:| 1 | 0  | 0  | 0  | 0  | 1  | 1 | 1 | 0  | 0  | 0  | 0  | 1  | 0  | 1  | 0  | @ |
        -----------------------------------------
16進制串:|        8        |        7      |        0        |        A        | @ |
        -----------------------------------------

"@"為字符串數據的終止符。

DLL還提供附加函數CinBin ,可以讀出字節中相應位的值是1還是0。

對于X、Y區線圈地址可以按8進制地址轉換成10進制后再參照上表的地址映射關系。


7、PLC的線圈置位(C、M、S、T)

Function ComESet(nport,address:longint;element:Pchar):longint;stdcall;
參數:
nport: 串口號,取值為1~8,代表COM1~COM8;
address: 位單元地址,定時器C:0~255、M:0~1023、S:0~999、T:0~255、X:0~177、Y:0~177及特M: M8000~M8255;
element:元件名稱,支持C、M、S、T;
使用舉例:
ComESet(1,0,‘C’),由COM1給C0置位;
ComESet(1,8010,‘M’), 由COM1給M8010置位;


8、PLC的線圈復位(C、M、S、T)
Function ComEReset (nport,address:longint;element:Pchar):longint;stdcall;
參數:
nport: 串口號,取值為1~8,代表COM1~COM8;
address: 位單元地址,定時器C:0~255、M:0~1023、S:0~999、T:0~255、X:0~177、Y:0~177及特M: M8000~M8255;
element:元件名稱,支持C、M、S、T;
使用舉例:
ComEReset(1,0,‘T’),給T0復位;
ComEReset (1,810,‘S’),給S810復位;

三、DLL附加函數說明

1、串口打開狀態的讀取
Function ComTrue(nport:longint):longint;stdcall;
參數:
noprt: 串口號,取值為1~8,代表COM1~COM8;
返回值:長整型,串口打開返回1,否則返回0;

2、整數轉換成16進制字符串 (為VC等非RAD開發環境所增設)
Function CIntToHex(Cint,Digits:Longint):Pchar;stdcall;
參數:
Cint: 待轉換整數,取值為(0~65535);
Digits: 轉換的字符串位數,指定位數小于實際位數時按實際輸出;

使用舉例:
CIntToHex(200,2),則返回字符串“C8@”;
CIntToHex(200,4),則返回字符串“00C8@”;
CIntToHex(4500,4),則返回字符串“1194@”;
CIntToHex(4500,3),則返回字符串“1194@”,因為“194”不足以表示4500這個數所以按實際輸出字符串“1194@”;

"@"為字符串數據的終止符。

3、16進制字符串轉換成整數 (為VC等非RAD開發環境所增設)
Function CHexToInt(CHex:Pchar):Longint;stdcall;
參數:
CHex: 待轉換字符串,取值為(0000~FFFF);
使用舉例:
CHexToInt(‘03E8’),則返回整數1000;

4、抽取16進制字符串中某個位的值
Function CinBin(CHex:Pchar;Start:longint):longint;stdcall;
參數:
CHex: 待轉換字符串,取值為(0~FFFF);
Start: 抽取的位,取值為(0~15);
使用舉例:
CinBin(‘0F’,3),則返回值1;
CinBin(‘0F’,4),則返回值0;
CinBin(‘03E8’,6),則返回值1;
讀取M8~M15組合成的字節值為“FC”時,要讀取M10的值時,則調用CinBin(‘FC’,3)返回值1表示M10的值為1。

5、返回字符串Text左邊的Count個字符  (為VC等非RAD開發環境所增設)
Function CLeftStr(Text:Pchar;Count:longint):Pchar;stdcall;
參數:
Text: 字符串原型;
Count: 指定返回左側字符串個數;

使用舉例:
CleftStr('123456', 3) = '123@';

"@"為字符串數據的終止符。

6、返回字符串Text右邊的Count個字符  (為VC等非RAD開發環境所增設)
Function CRightStr(Text:Pchar;Count:longint):Pchar;stdcall;
參數:
Text: 字符串原型;
Count: 指定返回右側字符串個數
使用舉例:
CRightStr('123456', 3) = '456@';

"@"為字符串數據的終止符。

7、返回字符串Text從Start開始的Count個字符 (為VC等非RAD開發環境所增設)
Function CMidStr(Text:Pchar;Start,Count:longint):Pchar;stdcall;
參數:
Text: 字符串原型;
Start: 指定返回字符串的起始位置;
Count: 指定返回字符串個數;
使用舉例:
CMidStr('123456',2,3) = '234@';

"@"為字符串數據的終止符。

8、字符串Substr開始于字符串S的位置 (為VC等非RAD開發環境所增設)
Function CinStr(S,Substr:Pchar):Longint;stdcall;
參數:
S: 字符串原型;
Substr: 查詢的字符串;
返回值:長整型;

使用舉例:
CinStr('1Tfdg23456','2') = 6

DLL中關于傳出字符串值的函數都以"@"為字符串函數值終止符。

四、Delphi、VB、VC語言環境的開發使用說明

1、Delphi語言環境開發說明

在Delphi環境下將melsecfx.dll、serialfx.slip(許可文件)復制到應用程序目錄下(即將上述文件與編譯后的可執行文件方入同一文件夾內);

在工程文件的主程序窗體(pas)文件中聲明:

Function ComOpen(nport:longint;User:pchar):longint;stdcall;External'melsecfx.dll';
Function ComClose(nport:longint):longint;stdcall;External'melsecfx.dll';
Function ComDWrite(nport,address:longint;sendstr:pchar):longint;stdcall;External'melsecfx.dll';
Function ComDRead(nport,address,Count:longint;element:Pchar):Pchar;stdcall;External'melsecfx.dll';
Function ComEForce(nport,address:longint;element,sendstr:pchar):longint;stdcall;External'melsecfx.dll';
Function ComERead(nport,address,Count:longint;element:Pchar):Pchar;stdcall;External'melsecfx.dll';
Function ComESet(nport,address:longint;Element:Pchar):longint;stdcall;External'melsecfx.dll';
Function ComEReset(nport,address:longint;element:Pchar):longint;stdcall;External'melsecfx.dll';
Function ComTrue(nport:longint):longint;stdcall; External'melsecfx.dll';
Function CinBin(CHex:Pchar;Start:longint):longint;stdcall; External'melsecfx.dll';

其它附加函數Delphi有實用函數,建議用Delphi自帶函數,如需使用聲明參上例;

聲明后可以在程序中使用這些函數,附加函數置中除ComTrue、CinBin外Delphi系統自帶有類似功能函數。通信時必須先使用ComOpen函數打開串口,在串口打開后可以有效操作相關函數,為確保通信可在程序運行開始時打開串口,程序關閉前關閉串口。應用程序關閉之前請務必將關閉所有串口,如串口未關閉前關閉系統將拋出異常。確保應用程序在關閉釋放前關閉打開的串口。解決方法,在form的OnDestroy事件中加入如下語句:
if ComTrue(1)=1 then ComClose(1);
在Delphi中給中給DLL中的函數傳pchar值問題,參考下例:
讀取多線圈M8~M23的值
Procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  elementstr,Recstr:string
  Name:pchar;
  address,Count:word;
begin
  elementstr:=’M’;
  address:=8;  //地址給8~15都行,實際地址=address div 8
  Count:=2;
  // Recstr:= ComERead(1,address, Count,Pchar(elementstr));
  //以上的用法不建議是使用,推薦用下面的用法。
  try
    Name:=strAlloc(8);
Name:=strPCopy(Name, elementstr);  Recstr:=strpas(ComERead(1,address,Count,
Pchar(elementstr));
  finally;
    StrDispose(Name);
  end;
end; 
建議采用strPCopy()|string型轉換到Pchar型,straps()|Pchar型轉換到string型,不推薦使用直接轉換法。

上述可以詳細參照DEMO程序。

2、VB語言環境開發說明

在VB環境下將melsecfx.dll、serialfx.slip(許可文件)復制到應用程序目錄下(即將上述文件與編譯后的可執行文件方入同一文件夾內);

在工程文件中聲明:

Private Declare Function ComOpen Lib "melsecfx.dll" (ByVal nport As Long, ByVal User As String) As Long
Private Declare Function ComClose Lib "melsecfx.dll" (ByVal nport As Long) As Long
Private Declare Function ComDWrite Lib "melsecfx.dll" (ByVal nport As Long, ByVal address As Long, ByVal sendstr As String) As Long
Private Declare Function ComEForce Lib "melsecfx.dll" (ByVal nport As Long, ByVal address As Long, ByVal element As String, ByVal sendstr As String) As Long
Private Declare Function ComDRead Lib "melsecfx.dll" (ByVal nport As Long, ByVal address As Long, ByVal Count As Long, ByVal element As String) As String
Private Declare Function ComERead Lib "melsecfx.dll" (ByVal nport As Long, ByVal address As Long, ByVal Count As Long, ByVal element As String) As String
Private Declare Function ComESet Lib "melsecfx.dll" (ByVal nport As Long, ByVal address As Long, ByVal element As String) As Long
Private Declare Function ComEReset Lib "melsecfx.dll" (ByVal nport As Long, ByVal address As Long, ByVal element As String) As Long
Private Declare Function ComTrue Lib "melsecfx.dll" (ByVal nport As Long) As Long
Private Declare Function CinBin Lib "melsecfx.dll" (ByVal Chex As String, ByVal Start As Long) As Long

其它附加函數VB有實用函數,建議用VB自帶函數,如需使用聲明參上例;
做完上述聲明后,便可以在程序中使用相關函數了。本DLL是串口通信庫,通信時必須先使用ComOpen函數打開串口,在串口打開后可以有效操作相關函數,為保證通信可以在程序運行開始時打開串口,程序關閉前關閉串口。在應用程序關閉之前請務必將關閉所有串口,如您的程序串口未關閉前被關閉系統將拋出異常。當出現這樣的異常請更改您的程序,確保應用程序在關閉釋放前關閉打開的串口。
解決方法,在form的Unload事件中加入如下例:
If ComTrue(1)=1 then
  ComClose(1)
End if
為確保Unload事件有效執行程序中應使用“End”語句,而盡量使用“Unload”語句釋放所有窗體,因使用“End”語句系統不會執行正常的窗體釋放等事件而直接退出程序,如程序中有form1,form2兩個窗體,則使用下面語句:
Unload  form1
Unload  form2
VB會在所有窗體關閉后釋放所有占用資源。
上述可以詳細參照DEMO程序。

3、VC語言環境開發說明
在VC環境下將melsecfx.dll、serialfx.slip(許可文件)復制到應用程序目錄下(即將上述文件與編譯后的可執行文件方入同一文件夾內);

在工程主文件cpp中聲明一個句柄:
HINSTANCE m_handle;
用來標識導入的動態鏈接庫。

1)、導入動態鏈接庫,如例所示:

  m_handle =:: LoadLibrary("melsecfx.dll");

2)、按下例說明聲明相關各個函數:

typedef long (CALLBACK* pOpen)(long nport, char* User);
typedef long (CALLBACK* pClose)(long nport);
typedef long (CALLBACK* pDWrite)(long nport,long address, char* sendstr);
typedef long (CALLBACK* pEForce)(long nport,long address, char* element, char* sendstr);
typedef char* (CALLBACK* pDRead)(long nport,long address,long Count, char* element);
typedef char* (CALLBACK* pERead)(long nport,long address,long Count,char* element);
typedef long (CALLBACK* pSet)(long nport,long address, char* element);
typedef long (CALLBACK* pReset)(long nport,long address char* element);
typedef long (CALLBACK* pTrue)(long nport);
typedef char* (CALLBACK* pIntHex)(long Cint,long Digits);
typedef long (CALLBACK* pHexInt)( char* CHex);
typedef long (CALLBACK* pBin)( char* Chex, long Start);
typedef char* (CALLBACK* pLeft)( char* Text, long Count);
typedef char* (CALLBACK* pRight)( char* Text, long Count);
typedef char* (CALLBACK* pMid)( char* Text, long  Start, long Count);
typedef long (CALLBACK* pinstr)( char* S, char* Substr);

3)、聲明并建立動態鏈接庫中的函數與新函數名的對應關系,如下:

pOpen cOpen = (pOpen)GetProcAddress(m_handle,"ComOpen");
pClose cClose = (pClose)GetProcAddress(m_handle,"ComClose");
pDWrite cDWrite = (pDWrite)GetProcAddress(m_handle," ComDWrite");
pDRead cDRead = (pDRead)GetProcAddress(m_handle," ComDRead");
pEForce cEForce = (pEForce)GetProcAddress(m_handle,"ComEForce");
pERead cERead = (pERead)GetProcAddress(m_handle,"ComERead");
pSet cSet = (pSet)GetProcAddress(m_handle," ComESet");
pReset cReset = (pReset)GetProcAddress(m_handle," ComEReset");
pTrue cTrue = (pTrue)GetProcAddress(m_handle," ComTrue");
pIntHex cIntHex = (pIntHex)GetProcAddress(m_handle," CIntToHex");
pHexInt cHexInt = (pHexInt)GetProcAddress(m_handle," CHexToInt");
pBin cBin = (pBin)GetProcAddress(m_handle," CinBin");
pLeft cLeft = (pLeft)GetProcAddress(m_handle," CLeftStr");
pRight cRight = (pRight)GetProcAddress(m_handle," CRightStr");
pMid cMid= (pMid)GetProcAddress(m_handle," CMidStr");
pinstr instr=(pinstr)GetProcAddress(m_handle," CinStr");

注:雙引號中為動態鏈接庫中的函數名。

4)、接下來就可以自由使用動態鏈接庫中的函數了,如:

cOpen(參數略);
cClose(參數略);
cDWrite(參數略);
cDRead(參數略);
cEForce(參數略);
cERead(參數略);
cSet(參數略);
cReset(參數略);
cTrue(參數略);
cIntHex(參數略);
cHexInt(參數略);
cBin(參數略);
cLeft(參數略);
cRight(參數略);
cMid(參數略);
instr(參數略);

注:函數中用到了char*型參數,這里介紹下char*與Cstring的相互轉換的函數:
(1)char*->CString
char* sz;
CString str;
str.Format("%s",sz);  //可以用此函數將讀取的值轉成字符串
(2) CString -> char*
CString str;
char* sz = str.GetBuffer(0);//可將字符串轉成char*給函數賦值

5)、當不再需要使用DLL時記得關閉串口及釋放動態鏈接庫,如:

關閉串口
if cTrue(1)==1 then
{
  cClose(1);
}

6)、釋放DLL

FreeLibrary(m_handle);

注:對于各位使用VC及其他開發環境的朋友,我表示歉意因為我不太使用這類軟件所以就不再寫DEMO程序了,VC的參照上述聲明我做過測試是可以使用的,其他開發環境我沒有測試不能保證您可以使用。

作者:  wjun7610
QQ:    157610979
Email: wjun7610@yahoo.com.cn
淘寶店:http://shop34821629.taobao.com
本帖最近評分記錄:
  • 下載積分:+5(taoyu001) 樓主辛苦了!
  • 下載積分:+5(YMMFA)
    heyijun
    級別: 探索解密
    精華主題: 0
    發帖數量: 39 個
    工控威望: 141 點
    下載積分: 626 分
    在線時間: 36(小時)
    注冊時間: 2010-11-18
    最后登錄: 2024-12-24
    查看heyijun的 主題 / 回貼
    1樓  發表于: 2011-01-27 11:55
    值得學習!感謝分享!

    主站蜘蛛池模板: 国产av福利第一精品导航_国产综合亚洲区在线观看_一区二区三区内射美女毛片_成人av片在线观看免费_美女桃色网站_一级毛片a女人刺激视频免费_日本一级淫片日本高清小说_国产男女视频网站 | av夜夜操_夜夜骑夜夜操_大片一级_色婷在线_国产精品乱码高清在线观看免费_最新亚洲视频_视频一区二区中文字幕日韩_一区一区三区 中文字幕国产_亚洲精品影院_麻豆av高清_无码中文亚洲AV影音先锋_国产97久久_精品一区二区三区视频_欧美在线视频网_男人影院在线观看www | 亚洲AV无码乱码精品国产_日韩亚射吧_四虎影视国产精品久久_最近好看中文字幕日产_欧美jjzz_精品无码人妻一区二区免费蜜桃_xxxx69在线观看_青草草在线视频 | 最新午夜_国产片av在线永久免费观看_九一在线视频_91精品国产综合久久久久久_免费无遮挡禁18污污网站_全黄一级毛片_999久久久精品国产消防器材_奇米四色777久久爱 | 手机在线播放国产女主播_国产精品一区二区久久不卡小说_久久夜靖品2区_精品视频色一区_品久久久久久久久久96高清_农村乱视频一区二区三区_久久久久无码精品国产情侣_黄又色又污又爽又高潮动态图 | 天堂网中文_国产丰满乱子伦无码专_91插插插影_国产精品乱码高清在线观看_国内av免费看_精品无码免费专区毛片_国产露脸无码a区久久蘑菇_国产美女二区 | 国产精品夜夜春夜夜爽久久小_午夜影晥_xxxxwwww免费视频_在线成人自拍视频_亚洲一区二区三区精品在线观看_久久国产36精品色熟妇_美女裸身裸乳无遮挡网站_在线看片免费人成视频播 | 97久章草在线视频播放_太紧了夹得我的巴好爽视频_国产黄色网址在线看_日韩国产一级_www四虎影视_亚洲成AV人片不卡无码_日本乱大交xxxxx_国产精品日韩久久 | 亚洲三区在线视频_亚洲色图片区_久久久999精品视频_日韩一级黄色影片_黄色片免费在线观看_成人a视频片在线观看免费_青青青伊人_狠狠一区 | 国产一区二精品区在线_中文字幕中文字幕一区三区_japanesehd熟女熟妇_97精品尹人久久大香线蕉_国产日产综合_国产一区二区在线看_成人精品视频在线观看_成人天堂视频在线观看 | 9热视频_一区免费在线_亚洲国产AV无码专区亚洲AV_免费日本中文字幕_99人人澡_国产精品九色_国产欧美在线观看免费_亚洲欧美日韩国产国产A | 特大巨人黑人AAA片BBC_www.色涩涩.com网站_1024国产精品视频一区_欧美自拍亚洲综合在线_老外黑人欧美一级毛片_91精品啪在线观看国产商店_免费的青榴视频在线观看_国产不卡av在线播放 | 国产精品无码免费专区午夜_日韩三级不卡_女性裸体啪啪网站_91高清免费观看_久久中文骚妇内射_激情综合久久_麻豆精品一区二区综合av_精品人妻无码一区二区三区蜜桃 | 成人精品鲁一区一区二区_久久人人爽人人爽人人爽av_久久久久久久伊人_少妇18xxxx性xxxx片_www天天操_免费a级毛片18以上观看精品_国产在线一级片_又黄又爽的视频在线观看 | 一级黄片毛片免费看_色又黄又爽18禁免费网站现观看_一区二区三区四区五区精品_视频一区在线视频_欧美一级黄色录像片_亚洲黄色片视频_国产免费av大片在线观看_麻豆精品免费 | 色欲色欲久久综合网_人妻暴雨中被强制侵犯在线_亚洲国产AⅤ综合网_狠狠色综合播放一区二区_久久精品久久精品久久39_午夜一级做a爰片久久毛片_久久重口味视频_国产最新毛片 | 中国老熟妇XXXXX_av日韩免费在线观看_91精品国产自产91精品_国产一级性生活_无码午夜人妻一区二区不卡视频_97超爽成人免费视频在线播放_中文字幕在线观看视频一区_国产成人综合av | 一级毛片在线看_国产精品毛片无码_国产99久久_91精品国产91久久久久久丝袜_国产精品成人一区二区三区_亚洲国产一区二区三区四区四季_99精品人妻无码专区在线视频区_欧美屁股xxxxx | 真人无码作爱免费视频_一本久色_久久人人爽人人片_男女插插插网站_中文有码一区二区_中文字幕+乱码+中文字幕无忧_亚洲精品无码专区在线在线播放_女人爽到高潮免费看视频 | 无套日出白浆17p_1717国产精品久久_www.com久久_欧亚免费视频_清纯唯美一区二区三区_可以在线看的av_久久中文精品视频_9久久婷婷国产综合精品性色 | a级片免费观看_福利视频一二三在线观看_97色伦午夜国产亚洲精品_国产精品观看_亚洲乱码中文字幕综合234_91看片成人_年轻的朋友hd中字_久久地址 | 无套日出白浆17p_1717国产精品久久_www.com久久_欧亚免费视频_清纯唯美一区二区三区_可以在线看的av_久久中文精品视频_9久久婷婷国产综合精品性色 | jizz18欧美18_国产精品99久久久久久久久久_国外亚洲成av人片在线观看_三叶草欧码成人毛片_亚洲人影院_国产一区二区三四区_粉嫩高中生无码视频在线观看_日本A∨精品一区二区三区 | 粉色视频成人免费看片视频_国产suv精品一区二区四区99_97SE狠狠狠狠狼鲁亚洲综合色_成年美女色黄网站视频网站_四虎永久免费地址_麻妃在线_亚洲精品中文字幕中文字幕_一二三四在线观看免费高清中文在线观看 | 亚洲人成网站在线播放大全_久久婷婷国产综合国色天香_成人高潮免费视频_日本污ww视频网站_久久久久久久久久穴_中国裸男自慰GV网站_新白娘子传奇50集免费赵雅芝版_四虎在线播放 | 欧美日韩在线免费播放_丰满人妻无奈张开双腿AV_国产高清免费AV片在线观看不卡_四虎国产精品永久在线_成人色综合_亚洲精品成人自拍_91色精品视频在线_91叼嘿视频 | 妇女性内射冈站HDWWWOOO_亚洲av无码av日韩av网站_青草欧美亚洲a视频在线_福禄影院午夜伦_亚洲美女影院_日日操操_国产偷窥熟女精品视频大全_国产在线一区二区三区AV | 国产91网_国产在线精品一区二区三区不卡_欧美va久久久噜噜噜久久_G国产精品无马_中文字幕在线不卡一区二区三区_亚洲AV色吊丝无码_韩国一级大片_永久免费AV无码网站04 | 日韩美a一级毛片国产_91视频官网_JAPAN少妇洗澡VIDEOS_黄色一级视频在线观看_天天干天天操天天搞_亚洲成a人蜜臀av在线播放_777奇米888色狠狠俺也去_99久久精品毛片免费播放高清 | 女仆乖乖脱内衣内裤打屁股_正在播放91精_少妇自慰浓密的p毛_亚洲热一区_xxxx69成人在线观看_亚洲A∨国产AV综合AV_精品综合在线_奇米成人网 | 亚洲AV少妇熟女猛男_成人真爽爱性视频网_国产综合色精品一区二区三区_国产精品视频–无名网_又大又爽又黄无码A片在线观看_99亚洲狠狠色综合久久位_美女黄视频在线播放_91成人精品网站 | 色欲色欲久久综合网_人妻暴雨中被强制侵犯在线_亚洲国产AⅤ综合网_狠狠色综合播放一区二区_久久精品久久精品久久39_午夜一级做a爰片久久毛片_久久重口味视频_国产最新毛片 | 久久人妻少妇嫩草AV_97国产精品视频人人做人人爱_色综合久久婷婷88_免费在线黄网站_超碰自拍网_韩国久久久久无码国产精品_外国一级毛片_黑人巨大40厘米免费播放 | 国产另类精品_a级高清免费毛片av播放_日韩午夜在线视频_538任你躁精品视频网免费_久草福利资源在线_福利一区福利二区_乡下农村一级毛片_99久热在线精品视频成人一区 | 97人洗澡人人澡人人爽人人模_国产亚洲精品AE86_日韩1区2区日韩1区2区_国内永久免费传媒_性亚洲videofree高清极品_久久av影院_97在线观看视频免费播放_久久精品这里只有精99品麻豆 | 国产日产精品一区二区三区的介绍_特级全黄一级毛片_av在线资源_BBBBB女女女女女BBBBB国产_亚洲三级中文字幕_亚洲视频中文在线_欧美1区_www.com.cn成人 | 成人在线高清不卡免费视频_日韩av中文字幕在线播放_青青国产91毛片成人片在线_成年女人免费观看这视频_九一在线免费看_体内精69xxxxxx视频_日本按摩伦理片_成人午夜 | 能直接看av的网站_国产精品a免费一区久久网址_中国黄色一级毛片_看国产毛片_丁香五香天堂网_四虎1515hh丶comblacked_欧美日韩精品一区二区在线观看_最近在线更新8中文字幕免费 | 国产麻豆精品a在线观看_91成人天堂久久成人_国产精品久久久久久52avav_成人av激情人伦小说_亚洲黄视频在线观看_国产成人亚洲综合网站小说_精品国产乱来一区二区三区_亚洲日韩中文字幕a∨ | 色吊丝永久性观看网站_JULIAANN熟女俱乐部_国产精品无码专区在线播放_午夜精品久久久_宅男视频免费在线观看视频_欧美成人a视频_91成人免费视频_青草久久网 | 班花在教室伦流澡到高潮视频_国产精选91热在线观看_黑人一级大片_蜜臀传媒_红杏出墙记_最近免费观看高清韩国日本大全_亚洲日韩精品无码专区网站_人妻丝袜av先锋影音先 |