国产一区二区三区毛片_亚洲乱码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)
    crgtom
    人生三寶:家庭,事業,健康。
    級別: 網絡英雄

    精華主題: 0
    發帖數量: 1379 個
    工控威望: 9714 點
    下載積分: 101803 分
    在線時間: 967(小時)
    注冊時間: 2009-09-21
    最后登錄: 2025-05-27
    查看crgtom的 主題 / 回貼
    1樓  發表于: 2011-05-11 17:59
    感謝分享!學習!學習!
    技術是有時效性的,一旦過了市場周期,都會變成垃圾!

    主站蜘蛛池模板: 四虎网站入口_亚洲人成久久婷婷精品五码_一本一道久久久a久久久精品91_色播亚洲_成年女人免费碰碰视频_久久国产噜噜亚洲AV_三级理论中文字幕在线播放_日日碰狠狠添天天爽不卡 | jizz18欧美18_国产精品99久久久久久久久久_国外亚洲成av人片在线观看_三叶草欧码成人毛片_亚洲人影院_国产一区二区三四区_粉嫩高中生无码视频在线观看_日本A∨精品一区二区三区 | 色综合狠狠爱_国产精品又又酱在线午夜_野外少妇愉情中文字幕_在线观看国产精品一区二区_开心五月综合亚洲_一本久久a久久精品亚洲_成人免费在线网_国产精品人妻熟女毛片av久久 | 国产999精品2卡3卡4卡_无套内谢少妇毛片A片999_五级床片三区全部免费播放_久久久久人妻一区二区三区VR_天天操狠狠操夜夜操_国产一区红桃视频_成人a视频在线观看_男女涩涩网站 | 大雞巴亂倫有声小说_ZZIJZZIJ亚洲日本少妇_mm1313亚洲国产精品一区_97成人精品视频在线观看_在线视频毛片_国产精品精品自在线拍互動交流_黄色大片日本免费大片_久久久无码精品无码国产人妻丝瓜 | 欧美人与禽交无码免费视频_一级黄色视屏_久久久亚洲裙底偷窥综合_天天碰夜夜操_av不卡一区二区_日本网站在线免费观看_一级片大奶子_国产精品女教师久久二区二区 深夜福利免费在线观看_欧洲性开放少妇ZOZO_又大又粗又硬又爽又黄毛片_欧洲精品_亚洲欧美成人_18禁黄网站禁片免费观看国产_日本少妇XXX做受_视频在线观看91 | 久久天天东北熟女毛茸茸_久久久久久免费_久久国产午夜精品理论片最新版本_亚洲无马在线观看_一个人看的免费高清视频www_亚洲精品国产suv一区88_特及毛片_日本成人午夜 | 国产高清av免费观看_久久一区二区三区欧美_国产一区二区三区久久久久久_婷婷成人综合网_成人插入视频_成人做爰视频WWW免费看网站_欧美69视频_少妇AB又爽又紧无码网站 | 国色天香2019中文字幕在线观看_亚洲AV无码传区国产乱码O_97在线免费公开视频_熟女无套高潮内谢吼叫_国产精品嫩草影院入口一二三_国产亚洲欧美日韩精品一区二区三区_乱色欧美激情亚洲欧美激情_四虎在线免费观看视频 | 国产影视一区_亚洲av永久无码偷拍另类_日韩在线免费观看av_九色九一_亚1州区2区3区4区产品乱码2021_亚洲精品成人网站在线观看_国产乱人对白_亚洲国产精品一区二区999 | 裸体在线国模精品偷拍_国产欧美日韩一区二区在线_国产高清无码专区_成人免费xxxxxx视频_免费同性男男自慰网站_日本网址在线观看_国产亚洲AV无码乱码在线观看_大卫科波菲尔1999 | 亚洲欧美字幕_香蕉视频你懂的_成人免费看片a_花样男子版韩剧免费观看_久久密av_亚洲最大成人综合网720P_欧美在线网址_乱精品一区字幕二区 | 女人与拘做受AAAAA片_久久国产AV无码一区二区老太_消息称老熟妇乱视频一区二区_中文字幕精品乱码中文字乱码_澳门永久av免费网站入口_午夜激情成人网_搡女人真爽免费视频大全_亚洲暴爽av人人爽日日碰麻豆 | 久久久久久久久久网_精品视频在线免费观看_亚洲av午夜精品无码专区_美女牲交视频一级毛片动态图_亚洲国产成人综合精品_浴室人妻的情欲hd三级国产_涩涩的视频_bbwcuckold精品熟妇 | 国产日产精品一区二区三区的介绍_特级全黄一级毛片_av在线资源_BBBBB女女女女女BBBBB国产_亚洲三级中文字幕_亚洲视频中文在线_欧美1区_www.com.cn成人 | 日本黄色大片免费观看_色婷婷综合激情中文在线_91短视频版在线观看www免费_久久国产女人_国产在线视频一区二区三区_国产91在线观_黄色1级毛片_丰满岳跪趴高撅肥臀尤物在线观看 | 午夜簧片_日韩视频在线一区二区三区_a级免费_美女日p视频_日本孕妇高潮孕交视频_久久久免费视频网站_秋霞AV鲁丝片一区二区_国产精品一区av | 午夜影院黄色片_日本aⅴ_午夜免费1000部_在线观看免费成人av_一个人免费观看在线视频www_一级做a爰片久久毛片_亚洲国产中文在线视频_国产亚洲精品线观看动态图 | 日本一区二区在线看_精品国产乱码久久久久久口爆_欧州办公室内射美女_SAO货腿张开JI巴CAO死我_成年女人喷潮毛片免费播放_欧美丝袜丝交足nylons视频_九九久久视频_亚洲国产清纯系在线观看 www日本xx_gay亚洲男男gv在线观看网站_99pao在线视频国产_国产精品亚洲网站_黄色一级大片在线免费看国产一_自慰系列无码专区_国产乱free国语对白_中文字幕综合 | xvideos在线观看_久久久青青青_日韩欧洲国产亚洲中文_亚洲国产91在线_粗一硬一长一进一爽一A级_国产毛片18片毛一级特黄_欧美国产精品三区一级一级_成人精品一区二区三区在线观看 | 成人精品鲁一区一区二区_久久人人爽人人爽人人爽av_久久久久久久伊人_少妇18xxxx性xxxx片_www天天操_免费a级毛片18以上观看精品_国产在线一级片_又黄又爽的视频在线观看 | 成人免费无码大片A毛片软件_学园默示录在线看_九一国产精品视频_狠狠狠狼鲁亚洲综合网_91亚洲精品久久久蜜桃_免费无码又爽又刺激高潮软件_欧美疯狂性受XXXXX另类_日韩少妇乱码一区二区三区免费 | 免费av一级_黄色片一区二区_天天爱天天操天天爽_啪啪一级片_亚洲一区四区_久久久久久久这里只有精品_性高朝大尺度少妇大屁股_99re伊人 | 成年人色网站_91精品久久久久久久久99绯色_国产日韩精品在线播放_国产日产精品久久久久兰花_日本成人福利视频_99国内精品久久久久影院_一个人看的ww在线视频_在线观看免费a∨网站 | 日本精品一区二区三区高清_欧美成人中文字幕_日日摸夜夜骑_少妇一级淫片免费_国产男女无遮挡猛进猛出_国产综合av_国产成人精品自拍_成人性色生活片免费看爆迷你毛片 | XXXXX做受大片在线观看免费_亚洲一本av_97久久超碰国产精品2021_超碰中文字幕_久久91麻豆精品一区_在线麻豆视频_91麻豆福利视频_寂寞熟妇风间ゆみ中文 | 国语对白爽死我了_成人免费观看网址_欧美一级片_色aⅴ性欧美_人妻少妇邻居少妇好多水在线_粉嫩小泬BBBB免费看_日韩中文字幕专区_极品粉嫩饱满一线天在线 | 黄网动漫久久久_人人揉人人捏人人添_午夜男女爽爽爽在线视频_精品久久1_天堂资源av在线_日韩精品1区_波多野无码黑人在线播放_日韩大片高清播放器 | 都市激情91_天堂av2021_亚洲va韩国va欧美va精四季_亚洲一二区三区_婷婷六月综合缴情在线_亚洲成av人片在线观看www_国严精品久久久久久亚洲影视_99久久久无码国产精品性黑人 | 丰满少妇大力进入_熟妇好紧好大快点舒服使劲xh_亚洲一区免费视频_成品人国产一区二区三区精品_亚洲欧美精品在线观看_原神xman图_久久久受www免费人成_久久香蕉影院 | 91成人在线_成人无码在线视频网站_131MM少妇做爰视频_精品国产乱码久久久久久虫虫_免费国产_国产一级淫片在线观看_在线字幕_欧美久久人人网 | 国产精品夜夜春夜夜爽久久小_午夜影晥_xxxxwwww免费视频_在线成人自拍视频_亚洲一区二区三区精品在线观看_久久国产36精品色熟妇_美女裸身裸乳无遮挡网站_在线看片免费人成视频播 | 无遮挡拍拍拍免费观看_99日韩_亚洲国产欧美日韩另类_毛片免费全部播放无码_狂野欧美激情性xxxx喷水_视频在线国产_超碰pron人人_免费h动漫无码网站 | 嫩草精品_91精品一区二区三区四区_欧洲美女粗暴牲交_日韩精品无码一区二区三区av_伊人青草_内射爽无广熟女亚洲_欧美黄片免费看_久久本道综合色狠狠五月 | 人人妻人人爽人人爽_国产精品99久久久精品免费观看_视频一区二区三区在线观看_成人免费黄色大片_国产免费人成视频在线播放播_日韩精品中出_久久久久国产一级毛片高清版小说_国产偷录视频叫床高潮 | 欧美另类在线观看_男女视频久久久_亚洲综合影视_一区www_理论片午午伦夜理片久久_色爱综合激情五月激情_欧美日韩精品成人网站二区A∨有_亚洲aⅴ天堂av天堂无码 | 国产精品人人爱一区二区白浆_快色视频在线_久草在线手机观看_av久操_免费1级a做爰片观看_加班被蹂躏的人妻在线_XXXX内射中国老妇_国精久久 | 亚洲视频一区二区_久久久精品在线观看_国内精品伊人久久久久7777_www.麻豆com_日本免费一区二区三曲_亚洲成在线_中文字幕第一区第二区_久久人妖 | 一本大道香蕉大在线中文_国产精品久久久久久妇_天天干天天爱天天_18禁美女黄网站色大片在线_98超碰人人_国产丝袜av一区二区三区性色_av毛片无码中文字幕不卡_一区二区三区产品免费精品久久75 | 丁香五月亚洲综合在线国内自拍_国产精品色一区二区三区_av网在线看_少妇高潮太爽了在线观看免费_美女裸浴偷拍视频引爆副本_国产一区视频在线观看免费_后λ式动态后λ式动态图av_av免费在线免费观看 | 9porny九色视频自拍_色WWW永久免费视频_亚洲激情久久久_日本伊人影院_WWW色情成人免费视频_一区二区在线观看不卡_国产精品8888_请别相信她免费观看高清章若楠 |