国产一区二区三区毛片_亚洲乱码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)
    lishlish
    級別: *
    精華主題: * 篇
    發帖數量: * 個
    工控威望: * 點
    下載積分: * 分
    在線時間: (小時)
    注冊時間: *
    最后登錄: *
    查看lishlish的 主題 / 回貼
    1樓  發表于: 2008-03-21 12:26
    太好了,這種程序可以在電腦與PLC人機界面中用

    主站蜘蛛池模板: 亚洲天堂一区在线_国产精品亚洲精品久久挡不住_日本成本人片免费高清在线观看_免费看α片_国产AV丝袜美腿丝袜_激情视频久久_国产视频日韩_日本九九视频 | 麻豆蜜桃AV蜜臀AV色欲AV_懂色aⅴ精品一区二区三区蜜月_潮喷失禁大喷水无码_免费观看激色视频网站在线观看_亚洲砖码砖专无区2023_福利小视频在线观看_久久综合天天_久久免费看少妇高潮a片免费 | 18av在线播放_999亚洲国产996395_久久视讯_国产精品久久久久久99_欧美性19_欧美亚洲韩国国产综合五月天_玩弄CHANEL妇熟女_起碰免费公开97在线视频 | 一级a毛片免费完整视频在线观看_成在人线午夜福利无码_精品视频在线观看一区二区三区_www.四虎在线观看_亚洲色欲色欲WWW在线看小说_在线观看免费视频麻豆_三年片在线观看大全国语_亚洲精品久久av无码一区二区 | 人与动人物XXXX毛片老司机_heyzo无码中文字幕在线_午夜dj影院在线_中国av免费观看_特黄视频_九九九久久久精品_亚洲不卡在线观看_特级淫片aaaaaaa级 | 免费的麻豆视频_日韩欧美专区_国产午夜鲁丝无码拍拍_欧美一区二区三区激情在线视频_国产成人aa_九九九九九九九伊人_国语自产拍无码精品视频在线_蜜桃最新网站 | 亚洲性色av日韩在线观看_国产成人精品无码片区在线观看_国产精品操女人_av官网在线播放_国产内射露脸在线观看_久久2018_日韩97_国产精品毛片久久久久久久av | av色偷偷_欧美xyx_人人澡人人射_久久人妻天天AV_超碰777_亚洲欧美不卡视频在线播放_国产欧美在线一区二区_高潮娇喘抽搐喷水潮喷视频网站 | 好看的一级毛片_91视频进入_爱爱视频免费_xxx国产老太婆视频_久久精品午夜_日本在线不卡观看_最新高清无码专区在线视频_а天堂最新版中文在线 | 一级黄色片免费_日韩高清在线播放_www.com久久久_XXX国产熟妇HD_成人精品自拍_亚洲欧洲免费视频_精品成人国产_一级全黄少妇性色生活免费看 | A片无码一区二区三区在线草莓_ww国产_日韩一区二区三区在线视频_人妖天堂狠狠ts人妖天堂狠狠_国产一性一交一伦一A片_黄色一级片在线观看_黄色一级片视频_日本丰满护士bbw | 四虎黄色网_铠甲勇士第一部免费_亚洲色成人WWW永久在线观看_男女做爰猛烈吃奶啪啪喷水网站_久久精品午夜福利_91手机在线观看_成人日日夜夜_中国av在线播放 | 一色屋精品视频在线观看_国产精品视频黄色_亚洲三级国产_激情午夜网_久久综合色占_精品av_欧美在线成人影院_精品国产乱码久久久久久久软件 | 国产综合免费视频_在线色网址_国产一区二_久久久久亚洲国产_国产精品我不卡_中文字幕无线码免费人妻_伊人av超碰久久久麻豆_日日拍夜夜 | 日本黄色不卡视频_日韩国产综合_成人精品免费视频在线观看_日本视频a_国产麻豆视频_男人激烈吮乳吃奶动态图_99久久国语对白精品露脸_欧美1区2区3区4区 | a级片免费观看_福利视频一二三在线观看_97色伦午夜国产亚洲精品_国产精品观看_亚洲乱码中文字幕综合234_91看片成人_年轻的朋友hd中字_久久地址 | 日本亚洲中文字幕不卡_欧美性大战久久久久久久蜜臀_国产乱淫av片免费看_亚洲?V乱码久久精品蜜桃_a欧美视频_久久久这里都是精品_性啪啪CHINESE东北女人_综合激情欧美 | 精品一区二区在线视频_91香蕉国产在线观看免费永久_国产成人Av乱码免费观看_国产66页_男人女人做爽爽18禁网站_日干夜操_中国hd高清xxxxvideo_japan15—16hd | 日日撸夜夜撸_国产福利一区二区免费视频_在线播放真实国产乱子伦_884aa四虎影成人精品_91手机免费视频_亚洲另类伦春色综合图片_日韩欧美一区二区东京热_久久香蕉国产线看观看99 | 麻豆TV入口在线看_国产一区在线导航_青草视频在线免费观看_性色av无码专区一ⅴa亚洲_国产精品com_国产a三级久久精品_久久一区国产_精品国产日韩欧美一区二区 | 午夜一区二区三区视频_成年人一级视频_亚洲区自拍区_日韩欧美一二区_青娱乐在线视频播放_国产成人综合亚洲欧美94在线_亚洲综合无码一区二区三区_亚洲精品亚洲人成人网在线播放 | 欧美中文在线观看_国产91精_无码国产69精品久久久久网站_中文在线a在线_毛片大全免费_免费观看色网站_农村一级毛片_意甲赛程2024赛程表最新 | 国产爱啪啪_亚洲毛片免费_九九自拍视频_欧美xxxxx性喷潮_日韩国产精品久久久久久亚洲_日本a级片免费观看_999精品在线_日本丰满少妇BBB | 天天色图综合网_有码一区二区三区_91久久国产综合久久91_无码一区国产欧美视频_久久久久99精品_咕咚影院国语在线播放_国产AV激情久久无码天堂_日本黄色中文字幕 | 亚洲国产一区在线_日韩久久久一区二区_99久久国产综合精品五月天_h视频在线观看网站_91精品啪在线观看国产日本_不卡无在线一区二区三区_亚洲色WWW永久网站_毛片在线看看 | 好男人网站www久久久_久久国产美女_国产性xxx_国产网站一区_69福利网_四虎在线网站_日韩综合一区_av高清在线看 | 狠狠色丁香婷婷综合橹88_国产精品入口传媒小说_午夜精品老牛av一区二区三区_www.日本精品_久久精选视频_精品国产综合二区亚洲_www天天干com_麻豆传媒在线免费看 | 色视频网站免费_国产逼视频_双性清冷美人被老肥丑攻c哭_黄色片xxxxx_中国人与黑人牲交FREE欧美_高清视频在线_91精品国产视频_精品国产aⅴ | 成人在线观看h_亚洲久久在线_91九色福利_日韩av一区在线_日本又黄又爽gif动态图_人人综合_67194成l人在线观看_日本精品久久久 | 99无码熟妇丰满人妻啪啪_色综合天天综合网无码在_啪啪免费网_成人无码WWW免费视频苹果版_免费一级特黄特色的毛片_天堂av网2019_国产精品久久久久久久99_一区二区三区免费在线播放 | 五月天色婷婷丁香_午夜三级A三级三点自慰_国产免费播放一区二区_中文在线观看免费视频_se吧提供在线看片免费人成久网_欧美日韩大片在线观看_久草在线视频免费资源_91久精品 | 性色欧美_国产人妻午夜在线无码_亚洲国产天堂久久综合_国产无套粉嫩白浆在线观看_久久人人爽av_AAA级毛片_国产乱子精品视频免费_天天做天天爱天天高潮 | 一本精品999爽爽久久久_久久av.com_最近最新中文字幕h_国产精品国产三级国产专播一_最近免费中文字幕大全高清_久久毛片一区二区三区_三年片免费观看大全国语_欧美精品无码久久久 | 久久免费视频一区二区_末成年女av片一区二区_亚洲性日韩精品一区二区_国产精品拍自在线观看_www.在线看_久久99亚洲精品久久频_中文字幕日韩精品一区_亲子乱子伦xxxx91 | 久草在线一免费新视频_播放一级毛片_91偷自产一区二区三区精品_久久人妻无码毛片A片麻豆_午夜激情视频免费观看_精品女同一区二区三区免费站_四虎家庭影院_青青草国产精品人人爱99 | 高清精品一区二区三区_欧美一级做a爰片久久高潮_欧美成人视_亚洲同性同志一二三专区_人与野鲁交xxxⅹ网站_国产成人精品福利一区二区_最新日本中文字幕在线观看_国产精品综合不卡av 亚洲九九精品_国产不卡视频一区二区三区_久操视频免费看_热99久久精品_婷婷久久精品一区二区_日本免费人成在线观看_xxxx免费_国产成人一区二区三区在线视频 | 久久精品视频9_玖玖色在线视频_亚洲国产美女视频_国产乱码精品一区二区三区香蕉_国产一二_欧美中日韩在线_日日噜噜夜夜_国产精产品一品二品 | 阿娇囗交全套码在线观看_国语精品91自产拍在线观看二区_国产又粗又猛又黄又爽无遮_中国1级毛片_久久久久久AV无码免费看大片_少妇裸体性生交_理论片自拍_特黄做受又粗又长又大又硬 | 国产av福利第一精品导航_国产综合亚洲区在线观看_一区二区三区内射美女毛片_成人av片在线观看免费_美女桃色网站_一级毛片a女人刺激视频免费_日本一级淫片日本高清小说_国产男女视频网站 | 在线黄色免费观看_国产精品午夜无码av体验区_国产精品免费_区二区三区观看_国产成人欧美_久久精品第一页_四川丰满少妇A级毛片_日韩欧美特级片_色哟哟一区二区 | 亚洲精品一区二区三区在线看_精品99在线观看_国产最新精品视频_四虎影院永久在线_狼人无码精华AV午夜精品_国产网曝门亚洲综合在线_在线播放亚洲第一字幕_久久国产精品萌白酱免费 |