在厨房拨开内裤进入毛片-欧美一区亚洲二区-www九九热com-亚洲午夜久久久精品一区二区三剧-国产91精品看黄网站在线观看动漫-heyzo朝桐光一区二区

moecmks
級別: 正式會員
精華主題: 0
發(fā)帖數(shù)量: 3 個
工控威望: 96 點
下載積分: 648 分
在線時間: 24(小時)
注冊時間: 2017-02-12
最后登錄: 2017-05-19
查看moecmks的 主題 / 回貼
樓主  發(fā)表于: 2017-04-24 19:39
先發(fā) FX1S數(shù)據(jù)讀報文,PLC接受到信號準備數(shù)據(jù)放到緩沖區(qū)。然后在用ReadFile從緩沖區(qū)接受一次報文。。。 30 MS左右
這時間正常嗎?還是說我設(shè)置有問題?總感覺這樣時間有點長啊。【工控菜鳥一個,放下代碼求老鳥指點一二,有無能提升效率的地方。 ^_^】

復(fù)制代碼
  1. #include <Windows.h>
  2. #include "codecb.h"
  3. #include "invariant.h"
  4. #include <assert.h>
  5. #include <tchar.h>
  6. #include "timing.h"
  7. extern HANDLE commport;
  8. _CRT_ALIGN (32)
  9. char ASCII_tonums_RVlut[0xFFFF+1];
  10. void build_ASC_RVlut (void)
  11. {
  12.   uint32_t ii;
  13.   static BOOL __init = FALSE;
  14.   if ( __init == TRUE) return;
  15.        __init  = TRUE;
  16.   ZeroMemory (ASCII_tonums_RVlut, sizeof (ASCII_tonums_RVlut));
  17.   for (ii = 0; ii != 0x10000; ii++) {
  18.    uint16_t lo = ii & 0x00FF;
  19.    uint16_t hi = ii >> 8;
  20.    if ( (( lo >= '0' && lo <= '9') || ( lo >= 'A' && lo <= 'F'))
  21.     && (( hi >= '0' && hi <= '9') || ( hi >= 'A' && hi <= 'F')))
  22.    {
  23.     if ( ( hi >= '0' && hi <= '9'))
  24.       ASCII_tonums_RVlut[ii] = hi - '0';
  25.     else if ( ( hi >= 'A' && hi <= 'F'))
  26.       ASCII_tonums_RVlut[ii] = hi - 'A' + 10;
  27.     if ( ( lo >= '0' && lo <= '9'))
  28.       ASCII_tonums_RVlut[ii] |= ( ( (unsigned) (lo - '0')) << 4);
  29.     else if ( ( lo >= 'A' && lo <= 'F'))
  30.       ASCII_tonums_RVlut[ii] |= ( ( (unsigned) (lo - 'A' + 10)) << 4);
  31.    }
  32.   }
  33. }
  34. BOOL comm_init (int comm_index)
  35. {
  36.   DCB dcbs;
  37.   COMMTIMEOUTS ct;  
  38.   BOOL success_io_;
  39.   TCHAR comm_buf0[256];
  40.   _stprintf (& comm_buf0[0], _T ("//./COM%i"), comm_index);
  41.   comm_close ();
  42.   commport = CreateFile ( & comm_buf0[0], GENERIC_READ | GENERIC_WRITE, 0,
  43.               NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
  44.   success_io_ = GetCommState (commport, & dcbs);
  45.   assert (success_io_ != FALSE);
  46.   dcbs.BaudRate = CBR_9600;
  47.   dcbs.fParity  = TRUE;
  48.   dcbs.Parity   = EVENPARITY;
  49.   dcbs.StopBits = ONESTOPBIT;
  50.   dcbs.ByteSize = 7;
  51.   dcbs.fDtrControl = DTR_CONTROL_DISABLE;
  52.   dcbs.fRtsControl = RTS_CONTROL_DISABLE;
  53.     
  54.   success_io_ = SetupComm (commport, 2048, 2048);
  55.   assert (success_io_ != FALSE);
  56.   success_io_ = SetCommState (commport, & dcbs);
  57.   assert (success_io_ != FALSE);
  58.   // SetTimeOut.
  59.   ct.ReadIntervalTimeout = 0x0000FFFF;
  60.   ct.ReadTotalTimeoutMultiplier = 0x0000FFFF;
  61.   ct.ReadTotalTimeoutConstant = 0xFFFFFFFE;
  62.   ct.WriteTotalTimeoutMultiplier = 0x0000FFFF;
  63.   ct.WriteTotalTimeoutConstant =   0xFFFFFFFE;  
  64.   
  65.   success_io_ = SetCommTimeouts (commport, &ct);  
  66.   assert (success_io_ != FALSE);
  67.   success_io_ = SetupComm (commport, 2400, 2400);  
  68.   assert (success_io_ != FALSE);
  69.   success_io_ = PurgeComm (commport, PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR | PURGE_TXABORT);
  70.   assert (success_io_ != FALSE);
  71.   build_ASC_RVlut ();
  72.   
  73.   timing_init48 ();
  74.   INIT_WSCCRSEC__;
  75. }
  76. void comm_close (void)
  77. {
  78.   if (commport != INVALID_HANDLE_VALUE)
  79.   {
  80.     PurgeComm (commport, PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR | PURGE_TXABORT);
  81.     CloseHandle (commport);
  82.   }
  83.   commport = INVALID_HANDLE_VALUE;
  84. }
  85. int8_t readOYB (int16_t e_addr) {
  86.   struct read_section2 rdsec;
  87.   char varsbuf[128];
  88.   int isr = 0;
  89.   int tm_numbs = 0;
  90.   uint16_t rv_numbs = 0;
  91.   BOOL io_success_;
  92.   DWORD rv_numbs2 = 0;
  93.   /* prepare Output-register read_section. */
  94.   isr = fx1s_makersecb ( & rdsec, FX1S_REGISTER_FIELD_Y_OUT,
  95.         & rv_numbs, FX1S_VERSION_30MR, e_addr);
  96.   assert (isr == FX1S_OK);
  97.   /* write Output-register read-code. */
  98.   io_success_ = WriteFile (commport, & rdsec,
  99.      sizeof(struct read_section), & tm_numbs, NULL);
  100.   assert (io_success_ != FALSE);
  101.   assert (tm_numbs == sizeof(struct read_section));
  102.   io_success_ = ReadFile  (commport, & varsbuf[0], rv_numbs, & rv_numbs2, NULL);
  103.   assert (io_success_ != FALSE);
  104.   assert (rv_numbs2 == rv_numbs);
  105.   assert (varsbuf[0] == SECTION_LINK_STX);
  106.   return ASCII_tonums_RVlut[ *(uint16_t *)& varsbuf[1]];
  107. }
  108. void setOYB (int16_t e_addr, int8_t val) {
  109.   char varsbuf[128];
  110.   int isr = 0;
  111.   int tm_numbs = 0;
  112.   uint16_t rv_numbs = 0;
  113.   BOOL io_success_;
  114.   DWORD rv_numbs2 = 0;
  115.   /* prepare Output-register write_section. */
  116.   isr = fx1s_makewsecb (& varsbuf[0], & val, FX1S_REGISTER_FIELD_Y_OUT,
  117.               & rv_numbs, FX1S_VERSION_30MR, e_addr);
  118.   assert (isr == FX1S_OK);
  119.   /* write Output-register write-code. */
  120.   io_success_ = WriteFile (commport, & varsbuf[0],
  121.      rv_numbs, & tm_numbs, NULL);
  122.   assert (io_success_ != FALSE);
  123.   assert (rv_numbs == tm_numbs);
  124.   io_success_ = ReadFile  (commport, & varsbuf[0], 1, & rv_numbs2, NULL);
  125.   assert (io_success_ != FALSE);
  126.   assert (rv_numbs2 == 1);
  127.   assert (varsbuf[0] == SECTION_LINK_ACK);
  128. }
  129. static __forceinline
  130. int8_t readRELAY_M (int16_t addr) {
  131.   struct read_section2 rdsec;
  132.   char varsbuf[128];
  133.   int isr = 0;
  134.   int tm_numbs = 0;
  135.   uint16_t rv_numbs = 0;
  136.   BOOL io_success_;
  137.   DWORD rv_numbs2;
  138.   isr = fx1s_makersecb ( & rdsec, FX1S_REGISTER_FIELD_M,
  139.         & rv_numbs, FX1S_VERSION_14MR, addr);
  140.   assert (isr == FX1S_OK);
  141.   io_success_ = WriteFile (commport, & rdsec,
  142.      sizeof(struct read_section), & tm_numbs, NULL);
  143.   assert (io_success_ != FALSE);
  144.   assert (tm_numbs == sizeof(struct read_section));
  145.   io_success_ = ReadFile  (commport, & varsbuf[0], rv_numbs, & rv_numbs2, NULL);
  146.   assert (io_success_ != FALSE);
  147.   assert (rv_numbs2 == rv_numbs);
  148.   assert (varsbuf[0] == SECTION_LINK_STX);
  149.   return ASCII_tonums_RVlut[ *(uint16_t *)& varsbuf[1]];
  150. }
  151. static  __forceinline
  152. void writeRELAY_M (uint16_t addr, int8_t val) {
  153.   char varsbuf[128];
  154.   int isr = 0;
  155.   int tm_numbs = 0;
  156.   uint16_t rv_numbs = 0;
  157.   BOOL io_success_;
  158.   DWORD rv_numbs2;
  159.   /* prepare Output-register write_section. */
  160.   isr = fx1s_makewsecb (& varsbuf[0], & val, FX1S_REGISTER_FIELD_M,
  161.               & rv_numbs, FX1S_VERSION_14MR, addr);
  162.   assert (isr == FX1S_OK);
  163.   /* write Output-register write-code. */
  164.   io_success_ = WriteFile (commport, & varsbuf[0],
  165.      rv_numbs, & tm_numbs, NULL);
  166.   assert (io_success_ != FALSE);
  167.   assert (rv_numbs == tm_numbs);
  168.   io_success_ = ReadFile  (commport, & varsbuf[0], 1, & rv_numbs2, NULL);
  169.   assert (io_success_ != FALSE);
  170.   assert (rv_numbs2 == 1);
  171.   assert (varsbuf[0] == SECTION_LINK_ACK);
  172. }
  173. void plc_force_close_ (void) {
  174.   BYTE obt;
  175.     /* force close PLC [by M8037]  **/
  176.     obt = readRELAY_M (8037);
  177.     writeRELAY_M (8037, obt | 0x20);
  178. }
  179. void plc_force_open_ (void) {
  180.   BYTE obt;
  181.   /* force open PLC [by M8035/M8036/M8037]  **/
  182.   obt = readRELAY_M (8037);
  183.   obt &= ~(1 << (8037 & 7));
  184.   writeRELAY_M (8037, obt);
  185.   obt = readRELAY_M (8035);
  186.   obt |= (11 << (8035 & 7));
  187.   writeRELAY_M (8035, obt);
  188. }
  189. void plc_set_pulse235_ (uint32_t val) {
  190.   int isr = 0;
  191.   char varsbuf[128];
  192.   uint16_t rv_numbs = 0;
  193.   DWORD rv_numbs2 = 0;
  194.   DWORD rv_numbs3 = 0;
  195.   BOOL io_success_;
  196.   isr = fx1s_makewsecb (& varsbuf[0], & val, FX1S_REGISTER_FIELD_C32,
  197.               & rv_numbs, FX1S_VERSION_14MR, PULSE_ENCODER_ADDR);
  198.   assert (isr == FX1S_OK);
  199.   rv_numbs2 = rv_numbs;
  200.   io_success_ = WriteFile (commport, & varsbuf[0], rv_numbs, & rv_numbs3, NULL);
  201.   assert (io_success_ != FALSE);
  202.   assert (rv_numbs2 == rv_numbs3);
  203.   io_success_ = ReadFile  (commport, & varsbuf[0], 1, & rv_numbs2, NULL);
  204.   assert (io_success_ != FALSE);
  205.   assert (rv_numbs2 == 1);
  206.   assert (varsbuf[0] == SECTION_LINK_ACK);
  207. }
  208. uint32_t plc_get_pulse235_ (void) {
  209.   union {
  210.     char bgroup[4];
  211.     int32_t inter;
  212.   } cc_timing;
  213.   BOOL io_success_;
  214.   DWORD rv_numbs = 0;
  215.   BYTE varsbuf[128];
  216.   io_success_ = WriteFile (commport, & g_crs2_pulse235.rsc, sizeof (struct read_section), & rv_numbs, NULL);
  217.   assert (io_success_ != FALSE);
  218.   assert (rv_numbs == sizeof (struct read_section));
  219.   io_success_ = ReadFile  (commport, & varsbuf [0], g_crs2_pulse235.rsc_cnt, & rv_numbs, NULL);
  220.   assert (io_success_ != FALSE);
  221.   assert (rv_numbs == g_crs2_pulse235.rsc_cnt);
  222.   assert (varsbuf[0] == SECTION_LINK_STX);
  223.   assert (varsbuf[9] == SECTION_LINK_ETX);
  224.   cc_timing.bgroup[0] = ASCII_tonums_RVlut[ *(uint16_t *)& varsbuf[1]];
  225.   cc_timing.bgroup[1] = ASCII_tonums_RVlut[ *(uint16_t *)& varsbuf[3]];
  226.   cc_timing.bgroup[2] = ASCII_tonums_RVlut[ *(uint16_t *)& varsbuf[5]];
  227.   cc_timing.bgroup[3] = ASCII_tonums_RVlut[ *(uint16_t *)& varsbuf[7]];
  228.   return cc_timing.inter;
  229. }


moecmks
級別: 正式會員
精華主題: 0
發(fā)帖數(shù)量: 3 個
工控威望: 96 點
下載積分: 648 分
在線時間: 24(小時)
注冊時間: 2017-02-12
最后登錄: 2017-05-19
查看moecmks的 主題 / 回貼
1樓  發(fā)表于: 2017-04-24 19:48
FX1S 報文編解碼
復(fù)制代碼
  1. /*-
  2. * Copyright (c) 2017 moecmks
  3. * All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions
  7. * are met:
  8. * 1. Redistributions of source code must retain the above copyright
  9. *    notice, this list of conditions and the following disclaimer.
  10. * 2. Redistributions in binary form must reproduce the above copyright
  11. *    notice, this list of conditions and the following disclaimer in the
  12. *    documentation and/or other materials provided with the distribution.
  13. *
  14. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  15. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  16. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  17. * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  18. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  19. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  20. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  21. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCMD, STRICT
  22. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  23. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  24. * SUCH DAMAGE.
  25. *
  26. */
  27. #if !defined (codec_included_MOECMKS)
  28. #define codec_included_MOECMKS
  29. /*
  30. * fx1s read/write codec.
  31. * simple, each read a current register size unit memory
  32. * more information, please refer to the PLC manual and Internet resources.
  33. */
  34. #if defined (__cplusplus)  /** __cplusplus */
  35. extern "C" {
  36. #endif  /** __cplusplus */
  37. /* Portable fixed length ***/
  38. #include "stdint.h"
  39. /*
  40. * errror code
  41. */
  42. #define FX1S_RANGE 1
  43. #define FX1S_FAIL 2
  44. #define FX1S_KFAIL 3
  45. #define FX1S_UNKN 4
  46. #define FX1S_LIMIT 5
  47. #define FX1S_NAK 6
  48. #define FX1S_ACK 7
  49. #define FX1S_PARA 8
  50. #define FX1S_INCOP 9
  51. #define FX1S_OK 0
  52. /*
  53. * version control
  54. */
  55. enum FX1S_VERSION {
  56.   FX1S_VERSION_10MR = 0,
  57.   FX1S_VERSION_14MR,
  58.   FX1S_VERSION_20MR,
  59.   FX1S_VERSION_30MR,
  60.   FX1S_VERSION_OVERFLAGS
  61. };
  62. /*
  63. * register field.
  64. * Ignore T bit register and set register.
  65. * Ignore C bit register
  66. */
  67. enum FX1S_REGISTER_FIELD {
  68.   FX1S_REGISTER_FIELD_S = 0,
  69.   FX1S_REGISTER_FIELD_X,
  70.   FX1S_REGISTER_FIELD_Y_OUT,
  71.   FX1S_REGISTER_FIELD_Y_PLS,
  72.   FX1S_REGISTER_FIELD_D,
  73.   FX1S_REGISTER_FIELD_T,
  74.   FX1S_REGISTER_FIELD_M,
  75.   FX1S_REGISTER_FIELD_C16,
  76.   FX1S_REGISTER_FIELD_C32,
  77.   FX1S_REGISTER_FIELD_CRESET
  78. };
  79. /*
  80. * section .link code
  81. */
  82. #define SECTION_LINK_STX 0x02 /* PLC info-section begin flags. */
  83. #define SECTION_LINK_ETX 0x03 /* PLC info-section end flags .***/
  84. #define SECTION_LINK_EOT 0x03 /* .***/
  85. #define SECTION_LINK_ENQ 0x05 /* PLC only test enable */
  86. #define SECTION_LINK_ACK 0x06 /* PLC reply "can do" */
  87. #define SECTION_LINK_LF 0x0A /* .***/
  88. #define SECTION_LINK_CL 0x0C /* .***/
  89. #define SECTION_LINK_CR 0x0D /* .***/
  90. #define SECTION_LINK_NAK 0x15 /* PLC reply "bad things" */
  91. /*
  92. * section cmdion.
  93. */
  94. #define SECTION_CMD_READ      '0' /* .***/
  95. #define SECTION_CMD_WRITE     '1' /* .***/
  96. #define SECTION_CMD_FORCE_ON  '7' /* .***/
  97. #define SECTION_CMD_FORCE_OFF '8' /* .***/
  98. /*
  99. * read section
  100. */
  101. struct read_section {
  102.   uint8_t stx; /* read_section's stdhead. always SECTIOM_LINK_STX */
  103.   uint8_t cmd; /* read_section's cmd  always SECTIOM_CMD_READ  */
  104.   uint8_t unit_address[4];  /* read_section's address*/
  105.   uint8_t numb[2];          /* read's byte count. simple always one */
  106.   uint8_t etx;    /* read_section's stdend.   always SECTION_LINK_ETX  */
  107.   uint8_t crc[2]; /* correcting code*/
  108. };
  109. /*
  110. * read section2
  111. */
  112. struct read_section2 {
  113.   uint8_t stx; /* read_section's stdhead. always SECTIOM_LINK_STX */
  114.   uint8_t cmd; /* read_section's cmd  always SECTIOM_CMD_READ  */
  115.   uint8_t unit_address[4];  /* read_section's address*/
  116.   uint8_t numb[2];          /* read's byte count. simple always one */
  117.   uint8_t etx;    /* read_section's stdend.   always SECTION_LINK_ETX  */
  118.   uint8_t crc[2]; /* correcting code*/
  119.   uint8_t crce; /* easy to read..**/
  120.   uint16_t opbsize; /******/
  121.   uint8_t opboff; /* for bit register(X, Y, M.) **/
  122.   uint16_t opbaddr; /* easy to read. **/
  123. };
  124. /*
  125. * write section
  126. */
  127. struct write_section {
  128.   uint8_t stx; /* write_section's stdhead.  always SECTIOM_LINK_STX */
  129.   uint8_t cmd; /* write_section's cmd  always SECTIOM_CMD_WRITE   */
  130.   uint8_t unit_address[4]; /* write_section's address*/
  131.   uint8_t numb[2]; /* write's byte count.. must <= 64  */
  132.   uint8_t etx; /* write_section's stdend. */
  133.   uint8_t crc[2]; /* correcting code*/
  134.   uint8_t crce; /* easy to read..**/
  135.   uint8_t obpoff; /* for bit register(X, Y, M.) **/
  136.   uint16_t opbaddr; /* easy to read. **/
  137. };
  138. /*
  139. * force section
  140. */
  141. struct force_section {
  142.   uint8_t stx; /* force_section's stdhead.  always SECTIOM_LINK_STX */
  143.   uint8_t cmd; /* force_section's cmd  always SECTIOM_CMD_FORCE_OFF or SECTIOM_CMD_FORCE_ON   */
  144.   uint8_t unit_address[4]; /* force_section's address*/
  145.   uint8_t etx; /* force_section's stdend. */
  146.   uint8_t crc[2]; /* correcting code*/
  147. };
  148. /*
  149. * Accept the write section is very simple,
  150. * if successful send SECTION_LINK_ACK otherwise SECTION_LINK_NAK
  151. */
  152. int fx1s_makersecb (struct read_section2 *rsec, /* write to the serial port, use the size of the read_section */
  153.                          enum FX1S_REGISTER_FIELD rf, uint16_t  *rvap_size,
  154.                          enum FX1S_VERSION ver, uint16_t address);
  155. int fx1s_makewsecb (void *wsec, /* Variable size structure, so use void *, please understand **/
  156.                    void *spval,
  157.                          enum FX1S_REGISTER_FIELD rf, uint16_t  *wsec_size,
  158.                          enum FX1S_VERSION ver, uint16_t address);
  159. int fx1s_makefsecb (struct force_section *fsec,
  160.                          enum FX1S_REGISTER_FIELD rf,
  161.                          enum FX1S_VERSION ver, uint16_t address);            
  162. #if defined (__cplusplus)  /** __cplusplus */
  163. }
  164. #endif  /** __cplusplus */
  165. #endif /* codec_included_MOECMKS */
moecmks
級別: 正式會員
精華主題: 0
發(fā)帖數(shù)量: 3 個
工控威望: 96 點
下載積分: 648 分
在線時間: 24(小時)
注冊時間: 2017-02-12
最后登錄: 2017-05-19
查看moecmks的 主題 / 回貼
2樓  發(fā)表于: 2017-04-24 19:52
復(fù)制代碼
  1. /*-
  2. * Copyright (c) 2017 moecmks
  3. * All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions
  7. * are met:
  8. * 1. Redistributions of source code must retain the above copyright
  9. *    notice, this list of conditions and the following disclaimer.
  10. * 2. Redistributions in binary form must reproduce the above copyright
  11. *    notice, this list of conditions and the following disclaimer in the
  12. *    documentation and/or other materials provided with the distribution.
  13. *
  14. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  15. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  16. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  17. * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  18. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  19. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  20. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  21. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  22. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  23. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  24. * SUCH DAMAGE.
  25. *
  26. */
  27. #include <assert.h>
  28. #include <string.h>
  29. #include "codecb.h"
  30. /* Convert characters to specific number - noexport */
  31. static
  32. char ascii_to_num (char ch) {
  33.   /* e.g.
  34.    *  source '9' -> target 9
  35.    *  source 'A' -> target 10
  36.    *  source '1' -> target 1
  37.    *  source 'a' -> (nondone, Don't use lowercase letters in fx1s-14mr-001).
  38.    */
  39.   if (ch >= '0' && ch <= '9')
  40.     return (ch - '0');
  41.   if (ch >= 'A' && ch <= 'F')
  42.     return (ch - ('A' - 10));
  43.   else
  44.     assert (0);
  45.   return ch;
  46. }
  47. /* Convert number to specific characters - noexport */
  48. static
  49. char num_to_ascii (char ch) {
  50.   /* e.g.
  51.    *  source 9 -> target '9'
  52.    *  source A -> target '0'
  53.    *  source 1 -> target '1'
  54.    *  source a -> (nondone, Don't use lowercase letters in fx1s-14mr-001).
  55.    */
  56.   if (ch >= 0x00 && ch <= 0x09)
  57.     return (ch + '0');
  58.   if (ch >= 0x0A && ch <= 0x0F)
  59.     return (ch + ('A' - 10));
  60.   else
  61.     assert (0);
  62.   return ch;
  63. }
  64. /* XXX:L-endian.
  65. */
  66. static
  67. uint16_t vailed8 (uint16_t nums) {
  68.   
  69.   /* e.g.
  70.    * 1234 vailed.
  71.    * 9000 invailed.
  72.    * 1007 vailed.
  73.    * 1811 invailed.
  74.    * 0 ~ 65535
  75.    */
  76.    uint16_t d0 = nums % 10 >> 0;
  77.    uint16_t d1 = nums % 100 / 10;
  78.    uint16_t d2 = nums % 1000 / 100;
  79.    uint16_t d3 = nums % 10000 / 1000;
  80.   
  81.    if ( d0 > 7 || d1 > 7)
  82.      return -1;
  83.    if ( d2 > 7)
  84.      return -1;
  85.    return d0 + d1 * 8 + d2 * 8 * 8 + d3 * 8 * 8 * 8;
  86. }
  87. static
  88. uint8_t fxcrc_adjust (unsigned char *crcbuf, uint32_t num) {
  89.   
  90.   uint32_t s= 0;
  91.   uint32_t st = 0;
  92.   
  93.   for (; s != num; s++)
  94.     st += crcbuf[s];
  95.   /* we only save lowest bit's byte **/
  96.   return st & 0xFF;
  97. }
  98. static /* we not check numb cross register **.**/
  99. uint32_t fxcalc_addru (enum FXREGS_FIELD reg, uint16_t addr,
  100.                            enum FX1S_VERSION ver,
  101.                            uint16_t  *opbsize,
  102.                                 uint16_t *raddr, unsigned char *dboff) {
  103.   
  104.   static const /* XXX:enum constant dependence **/
  105.                    uint16_t xmax_tab[4] = { 6, 8, 12, 16 };
  106.   static const /* XXX:enum constant dependence **/
  107.                    uint16_t ymax_tab[4] = { 4, 6, 8, 14 };
  108.   uint16_t addr0 = 0x00A0;
  109.   uint16_t eig = vailed8 (addr);
  110.   uint8_t off = -1;
  111.   uint32_t opbsize0 = 2;
  112.   switch (reg) {
  113.     
  114.   case FX1S_REGISTER_FIELD_D:
  115.   
  116.     if (addr <= 127 && addr == addr) /* numbers: 128, normal use */
  117.       addr0 = 0x1000 + addr * 2;
  118.     else if (addr <= 255) /* numbers: 128, save use */
  119.       addr0 = 0x1000 + addr * 2;
  120.     else if (addr >= 1000 && addr <= 2499)  /* numbers: 1500, file register */
  121.       addr0 = 0x1000 + addr * 2;
  122.     else if (addr >= 8000 && addr <= 8255) /* numbers: 256, special IO port */
  123.       addr0 = 0x0E00 + (addr - 8000) * 2;
  124.     else  /* Illegal access */
  125.       return FX1S_RANGE;
  126.     break;
  127.   case FX1S_REGISTER_FIELD_X:
  128.     /*
  129.      * Check the number of available X-coils according to the PLC version
  130.      */
  131.     if ((eig = vailed8 (addr)) == -1
  132.      || (eig >= xmax_tab[ver]) )
  133.       return FX1S_PARA;
  134.       
  135.     addr0 = 0x0080 + eig / 8;
  136.     off = eig & 7;
  137.     
  138.     opbsize0 = 1;
  139.     break;
  140.     
  141.   case FX1S_REGISTER_FIELD_Y_PLS:
  142.     addr0 += 0x0200;
  143.   case FX1S_REGISTER_FIELD_Y_OUT:
  144.   
  145.     /*
  146.      * Check the number of available Y-coils according to the PLC version
  147.      */
  148.     if ((eig = vailed8 (addr)) == -1)
  149.       return FX1S_PARA;
  150.     
  151.     addr0 += eig / 8;
  152.     off = eig & 7;
  153.     
  154.     opbsize0 = 1;
  155.     break;
  156.   case FX1S_REGISTER_FIELD_S:
  157.   
  158.     if ((addr >=  128)) /* numbers:128, status register **/
  159.       return FX1S_RANGE;
  160.     addr0 = addr / 8;
  161.     off = addr & 7;
  162.     
  163.     opbsize0 = 1;
  164.     break;
  165.   
  166.   case FX1S_REGISTER_FIELD_T:
  167.   
  168.     if ( (addr <=  63)) /* numbers:64, 100ms or 10ms M8028/D8030/D8031 **/
  169.       addr0 = 0x0800 + addr * 2;
  170.     else    
  171.       return FX1S_RANGE;
  172.     break;
  173.     
  174.   case FX1S_REGISTER_FIELD_M:
  175.   
  176.     if (addr < 384) /* numbers: 384, normal use */
  177.       addr0 = 0x0100 + addr / 8;
  178.     else if (addr < 512) /* numbers: 512, save use */
  179.       addr0 = 0x0100 + addr / 8;
  180.     else if (addr >= 8000 && addr < 8256) /* numbers: 256, special IO port */
  181.       addr0 = 0x01E0 + (addr - 8000) / 8;
  182.     else /* Illegal access */
  183.       return FX1S_RANGE;
  184.     
  185.     off = addr & 7;
  186.     opbsize0 = 1;
  187.     break;
  188.   
  189.   case FX1S_REGISTER_FIELD_C16:
  190.   
  191.     if (addr < 16) /* numbers: 16, normal use */
  192.       addr0 = 0x0A00 + addr * 2;
  193.     else if (addr < 32) /* numbers: 16, save use */
  194.       addr0 = 0x0A00 + addr * 2;
  195.     else /* Illegal access */
  196.       return FX1S_RANGE;
  197.     break;
  198.     
  199.   case FX1S_REGISTER_FIELD_C32:
  200.   
  201.    /* for C32 high speed registers,
  202.     * we only perform some basic checks, please note
  203.     **/
  204.     if (addr > 200 && addr <= 255)
  205.       addr0 = 0x0C00 + (addr - 200) * 4;
  206.     else /* Illegal access */
  207.       return FX1S_RANGE;
  208.       
  209.     opbsize0 = 4;
  210.     break;
  211.   
  212.   case FX1S_REGISTER_FIELD_CRESET:
  213.   
  214.     if (addr <= 255)
  215.       addr0 = 0x03C0 + addr / 8;
  216.     else /* Illegal access */
  217.       return FX1S_RANGE;
  218.       
  219.     opbsize0 = 1;
  220.     break;
  221.     
  222.   default:
  223.       return FX1S_PARA;
  224.   }
  225.   
  226.   *raddr = addr0;
  227.   *dboff = off;
  228.   *opbsize = opbsize0;
  229.   return FX1S_OK;
  230. }
  231. int fx1s_makersecb (struct read_section2 *rsec, /* write to the serial port, use the size of the read_section */
  232.                          enum FX1S_REGISTER_FIELD rf, uint16_t  *rvap_size,
  233.                          enum FX1S_VERSION ver, uint16_t address)
  234. {
  235.   struct read_section2 sec;
  236.   uint32_t e;
  237.   
  238.   /** phase 1:fill stdhead/stdend flags and cmd, rread count,s */
  239.   sec.stx = SECTION_LINK_STX;
  240.   sec.etx = SECTION_LINK_ETX;
  241.   sec.cmd = SECTION_CMD_READ;
  242.   /** phase 2:calc address for register and current PLC version */
  243.   e = fxcalc_addru (rf, address, ver, & sec.opbsize, & sec.opbaddr, & sec.opboff);
  244.   if (e != FX1S_OK)
  245.     return e;
  246.   else
  247.    *rvap_size = sizeof (sec.stx) +
  248.                 sizeof (sec.crc)+ sizeof (sec.etx) + sec.opbsize * 2;
  249.   /** phase 3:fill numb ascii, * */
  250.   sec.numb[0] = num_to_ascii ( (sec.opbsize  & 0xF0) >>4);
  251.   sec.numb[1] = num_to_ascii ( (sec.opbsize  & 0x0F) >>0);
  252.   
  253.   /** phase 4:fill address ascii, * */
  254.   sec.unit_address[0] = num_to_ascii ( (sec.opbaddr  & 0xF000) >>12);
  255.   sec.unit_address[1] = num_to_ascii ( (sec.opbaddr  & 0x0F00) >> 8);
  256.   sec.unit_address[2] = num_to_ascii ( (sec.opbaddr  & 0x00F0) >> 4);
  257.   sec.unit_address[3] = num_to_ascii ( (sec.opbaddr  & 0x000F) >> 0);
  258.   
  259.   /** phase 5:crc adjust, fill ascii buf * */
  260.   sec.crce = fxcrc_adjust (& sec.cmd, sizeof (sec.cmd) + sizeof (sec.unit_address)
  261.                                         + sizeof (sec.numb)
  262.                                         + sizeof (sec.etx));
  263.   sec.crc[0] = num_to_ascii ( (sec.crce  & 0xF0) >> 4);
  264.   sec.crc[1] = num_to_ascii ( (sec.crce  & 0x0F) >> 0);
  265.   
  266.   memcpy (rsec, & sec, sizeof (sec));
  267.   return FX1S_OK;  
  268. }
  269. int fx1s_makewsecb (void *wsec, /* Variable size structure, so use void *, please understand **/
  270.                    void *buf, /* wsec size == sizeof(wc) * 2  **/
  271.                          enum FX1S_REGISTER_FIELD rf, uint16_t *wsec_size,
  272.                          enum FX1S_VERSION ver, uint16_t address)
  273. {
  274.   uint16_t opbsize, opbaddr;
  275.   char obpoff;
  276.   char varsbuf[256];
  277.   char *as = buf, cs;
  278.   uint32_t e;
  279.   uint32_t s = 0;
  280.   struct write_section *secp = wsec;
  281.   struct write_section *secdp = (void *)varsbuf;
  282.   /** phase 1:fill stdhead flags and cmd */
  283.   secdp->stx = SECTION_LINK_STX;
  284.   secdp->cmd = SECTION_CMD_WRITE;
  285.   /** phase 2:calc address for register and current PLC version */
  286.   e = fxcalc_addru (rf, address, ver, & opbsize, & opbaddr, & obpoff);
  287.   if (e != FX1S_OK)
  288.     return e;
  289.   else
  290.     *wsec_size = sizeof (struct write_section) + opbsize * 2;
  291.   /** phase 3:fill numb ascii, * */
  292.   secdp->numb[0] = num_to_ascii ( (opbsize  & 0xF0) >>4);
  293.   secdp->numb[1] = num_to_ascii ( (opbsize  & 0x0F) >>0);
  294.   
  295.   /** phase 4:fill address ascii, * */
  296.   secdp->unit_address[0] = num_to_ascii ( (opbaddr  & 0xF000) >>12);
  297.   secdp->unit_address[1] = num_to_ascii ( (opbaddr  & 0x0F00) >> 8);
  298.   secdp->unit_address[2] = num_to_ascii ( (opbaddr  & 0x00F0) >> 4);
  299.   secdp->unit_address[3] = num_to_ascii ( (opbaddr  & 0x000F) >> 0);
  300.   
  301.   /** phase 5:fill variable buffer, * */
  302.   for ( ; s != opbsize; s++) {
  303.     unsigned char  temp = as[s];
  304.     char  tmphi = num_to_ascii (temp >> 4);
  305.     char  tmplo = num_to_ascii (temp & 15);
  306.     
  307.     secdp->numb[2+s*2+0] = tmphi;
  308.     secdp->numb[2+s*2+1] = tmplo;
  309.   }
  310.   /** phase 6:crc adjust, fill ascii buf * */
  311.   secdp->numb[2+opbsize*2] = SECTION_LINK_ETX;
  312.   
  313.   cs = fxcrc_adjust (& secdp->cmd, opbsize * 2 + sizeof (secp->cmd) + sizeof (secp->unit_address)
  314.                                         + sizeof (secp->numb)
  315.                                         + sizeof (secp->etx));
  316.   secdp->numb[2+opbsize*2+1] = num_to_ascii ( (cs  & 0xF0) >> 4);
  317.   secdp->numb[2+opbsize*2+2] = num_to_ascii ( (cs  & 0x0F) >> 0);
  318.   
  319.   memcpy (wsec, & varsbuf, *wsec_size);
  320.   return FX1S_OK;
  321. }
  322. uint32_t fx1s_cmprvpack (void *raccbuf, /* Variable size structure, so use void *, please understand **/
  323.                          uint16_t rc, void **ascii_buf, uint16_t *opbsize
  324.                          , uint16_t *stdpos)
  325. {
  326.   char *varsbuf = raccbuf;
  327.   uint16_t c = 0;
  328.   char stx_find = 0;
  329.   uint16_t stdpos0 = -1;
  330.   
  331.   /* we find SECTION_LINK_NAK or SECTION_LINK_STX at first **/
  332.   for (; c != rc; c++)
  333.    {
  334.      if (varsbuf[c] == SECTION_LINK_NAK)
  335.        return FX1S_NAK;
  336.      if (varsbuf[c] == SECTION_LINK_STX)
  337.       {
  338.         /* second, we check SECTION_LINK_ETX in buffer **/
  339.         stx_find = 1;
  340.         stdpos0 = c + 1;
  341.       }  
  342.      if (varsbuf[c] == SECTION_LINK_ETX && stx_find == 1)
  343.       {
  344.         /* exist CRC byte ??**/
  345.         if ((c + 2) >= rc)
  346.           return FX1S_INCOP;
  347.         /* calculate, compare the CRC code **/
  348.         {
  349.       # if 0
  350.       # else
  351.           *ascii_buf = & varsbuf[stdpos0];
  352.           *opbsize = c - stdpos0;
  353.           *stdpos = stdpos0;
  354.           return FX1S_OK;
  355.       # endif    
  356.         }
  357.       }
  358.    }
  359.   
  360.    return FX1S_INCOP;
  361. }                    
  362. uint32_t fx1s_decrvsec (void *raccbuf, void *sbuf, uint16_t opbasize) {
  363.   
  364.   char *varsbuf = raccbuf;
  365.   char *ssbuf = sbuf;
  366.   uint16_t c = 0;
  367.   
  368.   if (opbasize % 2 == 1)
  369.     return FX1S_INCOP;
  370.   if (opbasize == 0)
  371.     return FX1S_PARA;
  372.   
  373.   for ( ; c != opbasize; c += 2)
  374.     {
  375.       char tmphi = ascii_to_num (varsbuf[c]) << 4;
  376.       char tmplo = ascii_to_num (varsbuf[c+1]);  
  377.       char temp  =   (tmphi & 0xF0) |    (tmplo & 0x0F);
  378.       
  379.       ssbuf[c>>1] = temp;
  380.     }
  381.     
  382.     return FX1S_OK;
  383. }

主站蜘蛛池模板: 在线免费精品 | 国产精品女丝袜白丝袜 | 久草热播| 蜜臀久久精品久久久久久酒店 | 国产精品久久久久久婷婷天堂 | 国语久久| 五月婷婷狠狠干 | 色婷婷狠狠久久综合五月 | 久久久精品动漫 | 亚洲一区和二区 | 日韩三级精品 | 色播激情网 | 国产免费又爽又色又粗视频 | 男女视频国产 | 欧美人成在线视频 | 欧美日韩国产成人在线观看 | 久久国产成人精品av | 日韩美女做爰高潮免费 | 激情文学欧美 | 国产精品69毛片高清亚洲 | 波多野结衣一区二区三区av免费 | 黄色裸体网站 | 欧美日韩卡一卡二 | 秋霞网av | 娇小发育未年成性色xxx8 | 日韩成人黄色片 | 色播在线视频 | 国产激情啪啪 | 天天色天天看 | 成年人小视频 | 麻豆综合 | 红杏出墙记免费看 | 国产成人三级在线视频 | 国产又大又黑又粗免费视频 | 日本又紧又色又嫩又爽的视频 | 成人av资源网 | 狠狠做深爱婷婷久久综合一区 | 99久久国产露脸国语对白 | 久久综合色视频 | 亚州一二区 | 一级淫片免费 | 在线中文字幕视频 | 69av视频在线观看 | 欧美人与zoxxxx视频 | 午夜美女视频 | 欧美久久久久久久久久 | 国产乱子伦视频在线播放 | 欧美一区二区三区四区视频 | 理论片第一页 | 欧美群妇大交乱 | 日本jizzjizz| 国产日韩欧美视频 | 丰满少妇作爱视频免费观看 | 成人欧美一区二区三区黑人免费 | 成人性做爰片免费视频 | 免费在线黄色网 | 国产精品久久夂夂精品香蕉爆 | 强开乳罩摸双乳吃奶羞羞www | 国产又嫩又黄又猛视频在线观看 | 国产黄色免费在线观看 | 欧美人动与zoxxxx乱 | 日韩在线视频一区 | 国产网红女主播免费视频 | 精品视频在线一区二区 | 成年片色大黄全免费网站久久 | 中文字字幕在线中文乱 | 伊人久久一区二区三区 | 亚洲精品v日韩精品 | 国产网站免费 | 亚洲婷婷av| 国产一级爱c视频 | 日本久久精品少妇高潮日出水 | 天天看夜夜爽 | 国产成人免费爽爽爽视频 | 久久精品视频播放 | 久久久久国产精品一区 | 少妇毛片一区二区三区免费视频 | 99国产精品99久久久久久娜娜 | 国产一区二区三区久久久久久久久 | 国产96视频 | 风流老熟女一区二区三区 | 黄色av三级 | 天天综合网在线 | 亚洲成av人片天堂网无码 | 国产精品成人影院在线观看 | 亚洲色www永久网站 少妇人妻综合久久中文字幕 | 欧美激情综合色综合啪啪五月 | 亚洲精品一区二区三区四区五区 | 日韩性大片 | 97超在线| 日韩黄色视屏 | 91高清视频在线 | 中文精品一区二区三区四区 | 波多野吉衣在线视频 | 欧美老妇bbwhd | 殴美毛片| 免费无码av一区二区三区 | 欧美性受xxxx狂喷水 | 国产成人啪精品视频免费网 | 天堂а在线中文在线新版 | av中文字幕免费观看 | 日本a级片一区二区 | 中文字幕人成无码人妻综合社区 | 禁断一区二区三区在线 | 国产一级特黄 | 黄网站色视频免费观看 | 久久99精品久久久久婷综合 | 日韩精品在线不卡 | 五月婷婷啪啪 | 韩日一级片 | 一区二区三区精彩视频 | 天堂中文最新版在线中文 | 欲妇荡岳丰满少妇岳 | 人妻精品久久无码专区精东影业 | 91视频在线免费观看 | 日韩成人精品 | 亚洲一区二区三区国产 | 欧美综合社区 | 日日摸日日碰夜夜爽久久四季 | 欧美爱爱免费视频 | 午夜激情在线免费观看 | 亚洲精品无码乱码成人 | 午夜私人福利 | 亚洲黄色免费网站 | 草逼导航 | 免费人成网站在线观看欧美高清 | 男人扒开女人腿桶到爽免费 | 日韩综合第一页 | 亚洲国产精品国自产拍av | 国产一区二区不卡老阿姨 | 在线观看黄色网页 | 免费无码av片在线观看中文 | 激情综合一区二区三区 | 国产成人精品视频一区二区不卡 | www.黄色小说.com | 妺妺窝人体色www聚色窝仙踪 | 西野翔中文久久精品国产 | 亚洲综合射 | 欧美性受xxxx黑人xyx | 亚洲2022国产成人精品无码区 | 欧美黑人又粗又大又爽免费 | 深夜福利小视频在线观看 | 欧美 亚洲 另类 偷偷 自拍 | 性a视频| 大屁股大乳丰满人妻 | 日韩欧美精品在线观看 | 麻豆高清视频 | 波多野结衣av在线播放 | 免费一级做a爰片久久毛片潮喷 | 文中字幕一区二区三区视频播放 | 少妇太爽了在线观看 | 国产成人精品亚洲777人妖 | 丰满放荡岳乱妇69www | 四虎综合网 | 奇米影视888狠狠狠 奇米影视第四狠狠777 | 国产成人精品视频一区二区不卡 | 国产一级黄色大片 | 人人爽人人澡人人人妻 | 日韩人妻熟女中文字幕a美景之屋 | 国产亚洲精品精品国产亚洲综合 | 日韩精品你懂的 | 成人性生交免费大片 | 国语对白嫖老妇videos | 免费99精品国产自在在线 | 99久久精品国产成人一区二区 | 日韩欧美综合在线 | 搡老女人老妇女老熟妇 | 精品少妇无码av无码专区 | 日韩伊人网 | 亚洲中文字幕在线无码一区二区 | 性国产三级在线观看 | 四虎精品免费永久免费视频 | 国产日产亚洲系列最新 | 中文字幕人成乱码在线观看 | 亚洲精品国产精品乱码不卡√香蕉 | 欧美多人片高潮野外做片黑人 | 91视频青青草 | 日本乱轮视频 | 久久男人天堂 | 国产伦精品一区二区三区免费迷 | 日韩高清黄色 | 亚洲免费视 | 色污网站| 国产成人精品无码短视频 | 国产特黄特色大片免费视频 | 亚欧洲乱码视频 | 亚洲综合另类小说色区色噜噜 | 亚洲免费大全 | 中文文字幕一区二区三三 | 黄网页在线观看 | 国产成人精品一区二区 | a级片一级片 | 奇米影视777中文久久爱图片 | √天堂资源在线中文8在线最新版 | 少妇视频一区二区三区 | 韩国av免费在线 | 天天干天天操天天爱 | 中文字幕永久区乱码六区 | 欧美成aⅴ人高清免费 | juliaann精品艳妇在线 | 偷拍欧美亚洲 | 午夜精品偷拍 | 我想看一级黄色毛片 | 亚洲最大看欧美片网站 | 福利视频免费观看 | 国产最露的三级 | 欧美视频黄色 | 东方影院av久久久久久 | 激情综合网五月天 | 免费观看激色视频网站 | 日本xxx裸体xxxx偷窥 | 久久婷婷五月综合97色一本一本 | 久久婷婷麻豆国产91天堂 | 中文字幕一区二区三区四区视频 | 国产全肉乱妇杂乱视频1 | 韩国中文字幕在线观看 | 伊人狼人久久 | 国产丝袜自拍 | 国产精品自产拍高潮在线观看 | 久久黄色免费网站 | 在线观看av片| 女女女女女裸体处开bbb | 国产欧美精品区一区二区三区 | 日本丰满少妇xxxx | 新疆少妇xxxx做受 | 91高清国产 | 国产欧美精品区一区二区三区 | 最新久久久 | 国偷自产视频一区二区久 | 日韩无码电影 | 狠狠做六月爱婷婷综合aⅴ 狠狠做深爱婷婷综合一区 狠久久 | 黄色精品网站 | 久久久久免费视频 | 亚洲色婷婷综合久久 | 亚洲欧美成人一区二区在线电影 | 成人动漫在线观看 | 两性色午夜免费视频 | 国产成人美女视频网站 | 亚洲精品少妇一区二区 | 日韩国产第一页 | 麻豆最新 | 亚洲国产精品高潮呻吟久久 | 欧美一本 | 中文字幕人成无码人妻综合社区 | 日本妞vs黑人巨大xxxxx | 咪咪成人网 | 亚洲在线观看视频 | 欧美日免费 | 精品视频一区二区在线 | 日本草草影院 | 欧洲熟妇性色黄 | 国产又大又粗又爽的毛片 | 日韩精品无码一区二区三区不卡 | 91久久国产涩涩涩涩涩涩 | 欧美一区二区三区不卡视频 | 首页 国产 欧美 日韩 丝袜 | 国内精品久久久久影视老司机 | 成人性生生活性生交视频 | 一天天影影综合网 | 激情综合激情 | 国产美女无遮挡免费软件 | 日本www一道久久久免费榴莲 | 亚洲欧美一级久久精品国产特黄 | www偷拍com| 亚洲区免费视频 | 红桃视频成人传媒 | 蜜桃无码一区二区三区 | 午夜成人理论福利片 | 欧美亚洲在线视频 | 天天操操 | 久久精品人妻中文系列 | 美国黄色av | 久久五月天婷婷 | www.黄色小说.com | 又色又爽又黄的美女裸体网站 | 最新中文字幕久久 | 黄色变态网站 | 天天射夜夜骑 | 亚洲国产精彩中文乱码av | ts人妖在线| 91高清视频在线观看 | 中文字幕激情 | 欧美人与牲禽动a交精品 | 亚洲aⅴ天上人间在线观看 亚洲aⅴ在线 | 激情影院内射美女 | 岬奈奈美女教师中文字幕 | 亚洲国产区 | 久爱视频在线观看 | 人人爱免费在线观看 | 国产不卡一区 | 国产97色在线 | 免 | 色一区二区三区 | 天堂网2021最新天堂手机版 | 久草手机在线播放 | 欧美在线激情 | 国产午夜福利在线播放 | 中文字幕无码精品亚洲资源网久久 | 99精品国产在热久久 | 国产午夜伦鲁鲁 | 国产精品久久久久久久竹霞 | 乱日视频| 巨胸爆乳美女露双奶头挤奶 | 91久久国产露脸精品国产 | 国产真实夫妇交换视频 | 摸摸摸bbb毛毛毛片 蘑菇av | 老湿机香蕉久久久久久 | 小草社区在线观看播放 | 色综合久久88色综合天天提莫 | 国产精品2018| 天堂中文av | 成人在线视频免费看 | 久久久国产精品视频 | 污污视频免费网站 | 亚洲伊人网站 | 无码爆乳护士让我爽 | 国产区日韩区欧美区 | 摸丰满大乳奶水www免费 | 久久综合在线 | 色欧美片视频在线观看 | 欧美在线资源 | 本田岬高潮一区二区三区 | 亚色在线观看 | 蜜桃成人无码区免费视频网站 | 久久天天躁狠狠躁夜夜avapp | 欧美嫩草影院 | 午夜色大片在线观看 | 欧美激情一区二区三区视频 | 最新国产一区 | 天天狠天天透天干天天怕∴ | 亚洲成人动漫在线观看 | 成人天堂婷婷青青视频在线观看 | 精品国产乱码久久久久久芒果 | 亚洲日韩成人av无码网站 | 无码国产精品一区二区免费式直播 | 午夜精品一区二区三区在线视 | 久草网址 | 激情综合五月天 | 97精品在线观看 | 激情久久av一区av二区av三区 | 丰满白嫩欧洲美女图片 | 在线天堂中文www视软件 | 久久久精品国产99久久精品麻追 | 欧美人妖老妇 | 肉色丝袜足j视频国产 | 少妇伦子伦精品无吗 | 日韩一区二区三区福利视频 | 亚洲精品国产a久久久久久 51国偷自产一区二区三区 | 国产午夜精品美女视频明星a级 | 国产放荡av国产精品 | 国产又粗又猛又爽视频上高潮 | 日本三级韩国三级欧美三级 | 最近中文字幕免费观看 | 青青青国产在线观看免费 | 精品一区二区久久久久久久网站 | 欧美mv日韩mv国产网站app | 三a级做爰 | 欧美色呦呦 | aⅴ资源番号库 | 首页干日本少妇 | 免费吸乳羞羞网站视频 | 中文娱乐综合网777 中文在线第一页 | 69视频污 | 日本久久网站 | 熟妇人妻系列aⅴ无码专区友真希 | 欧美极品少妇 | 波多野结衣国产在线 | 亚洲精品第一国产综合野草社区 | 狠狠色综合久久婷婷色天使 | 久久影视一区 | 50一60老女人毛片 | 天天操天天添 | 一本大道久久香蕉成人网 | 日韩欧美人人爽夜夜爽 | 爱爱综合| 一级特黄色大片 | 国产三级在线视频 一区二区三区 | 日韩专区第一页 | √天堂资源在线中文最新版 | 91大神福利视频 | 亚洲一本之道 | 可以免费看的黄色网址 | 狠狠做深爱婷婷久久综合一区 | 免费看一级黄色片 | 黑人粗大猛烈进出高潮视频 | 久久久久久亚洲精品中文字幕 | 国精产品一区一区三区有限公司杨 | 偷拍亚洲 | 国产精品sm调教免费专区 | 亚洲国产无 | 国产同性女女互磨在线播放 | 99久免费精品视频在线观78 | 91久久国产综合久久91 | 亚洲国产成人丁香五月激情 | 欧美日韩一卡二卡 | 欧美性xxxxx极品少妇 | 日本一区二区三区免费播放 | 毛茸茸熟妇张开腿呻吟 | 亚洲人成网站在线播放942 | 久久久久久国产精品免费免费 | 香蕉精品视频在线观看 | 欧美激情性做爰免费视频 | 日韩视频在线观看一区二区三区 | 久久久久欠精品国产毛片国产毛生 | 天天摸天天添 | 日韩精品一区二区三区视频播放 | 日本丰满妇人成熟免费中文字幕 | 级毛片内射视频 | 亚洲精品www久久久久久广东 | 人妻另类 专区 欧美 制服 | 久久99精品久久久久久 | 免费av网站在线 | 日本大乳奶做爰洗澡三级 | 亚洲精品九九 | 亚洲中文无码永久免费 | 精品久久久久久久久久ntr影视 | a级片在线看 | 麻豆网站免费观看 | 欧美一区二区高清视频 | 免费av播放 | 久久精品亚洲精品国产欧美kt∨ | 日韩成人激情视频 | 亚洲精品久久久久午夜福禁果tⅴ | 激情开心成人网 | 东北老头嫖妓猛对白精彩 | 国产另类ts人妖高潮 | 精品无码国产污污污免费 | 日噜噜夜噜噜 | 高hnp视频 | 波多野结衣乱码中文字幕 | 亚洲第一字幕 | 中文字幕亚洲乱码熟女在线萌芽 | 奇米影视一区二区 | 91视频a| 少妇饥渴难耐 | 亚洲自偷精品视频自拍 | 欧美日韩在线精品一区二区 | 亚洲精品影视 | 日韩视频中文字幕 | 成人性生交大片 | 岛国黄色片| 在线观看免费毛片 | 欧美香蕉视频 | 国产乱码精品一区二区三区爽爽爽 | 大尺度做爰呻吟62集 | 欧美v亚洲v综合ⅴ国产v | 国产精品久久久久久在线观看 | 亚洲黄色片视频 | 国产妇女乱码一区二区三区 | 欧美日韩在线免费播放 | 亚洲国产系列 | 日韩欧美精品免费 | 欧美日韩免费一区二区三区 | 久久视频热| 亚洲一区二区三区四区五区六区 | 国产精品91久久 | 豆花视频18成人入口 | 成人免费在线观看网站 | 色诱亚洲精品久久久久久 | 免费在线日本 | 中文字幕岛国 | 欧美一区二区三区爽爽爽 | 中文字幕一区二区三区四区欧美 | 欧美v亚洲v日韩v最新在线 | 日韩视频a| 色乱码一区二区三在线看 | 久久久久99人妻一区二区三区 | 在线播放成人av | 三级性视频 | 青青视频网站 | 色一情一狱一爱一乱 | 96久久欧美麻豆网站 | 国产精品自产拍在线观看55亚洲 | 免费在线观看小视频 | 免费播放黄色片 | 国产乱人伦av麻豆网 | 国产成人免费ā片在线观看 | wwwcom捏胸挤出奶 | 欧美一区二区三区免费 | 日韩一级黄色录像 | 九色蜜桃臀丨porny丨自拍 | 免费观看又色又爽又黄的传媒 | 亚洲免费综合 | 国产日韩一级 | 国产成人免费ā片在线观看 | 日本人与黑人做爰视频 | 手机国产乱子伦精品视频 | 在线观看免费黄色 | 三级4级全黄在线 | 国产高清在线免费视频 | 亚洲欧美一区二区三区在线 | 亚洲日韩aⅴ在线视频 | 色婷婷久久久swag精品 | av网站在线看 | 4438xx亚洲最大五色丁香 | 九九色在线观看 | 欧美最猛黑人xxxxx猛交 | 抽插丰满内射高潮视频 | 婷婷导航 | 国产成人在线免费观看视频 | 鲁大师影院在线观看 | 无码午夜福利视频一区 | 熟妇人妻午夜寂寞影院 | 日韩精品中字 | 国产丰满大乳奶水在线视频 | 中年熟妇的大黑p | 一级特黄色大片 | 国产一区二区网站 | 亚洲国产999 | 欧美一级免费看 | 中文字幕日韩欧美一区二区 | 中文自拍| 国产最新进精品视频 | 精品日韩在线 | 美女张开腿让人桶 | 亚洲高清影院 | 欧美精品一区二区蜜臀亚洲 | 五月天六月婷 | 欧美做受喷浆在线观看 | 亚洲国产精品激情综合图片 | 天天拍天天爽 | ts人妖在线| 久久久久有精品国产麻豆 | 日本高清视频www在线观看 | 中文字幕乱码视频 | 欧美肥臀大乳一区二区免费视频 | 欧美性折磨bdsm另类 | 99爱精品视频在线观看免费 | 亚洲a级在线 | 欧美在线 | 亚洲 | 国产区精品在线观看 | 午夜精品久久久久久久久 | 国产欧美一级 | 免费日韩精品 | 国产成人精品免费视频大全 | 波多野结衣一区二区 | 久久久亚洲欧洲日产国码二区 | 色屁屁www影院入口免费 | 国产欧美视频在线 | 国产成人午夜福利在线观看 | 国产午夜福利短视频 | 精品九九久久 | jav久久亚洲欧美精品 | 国产精品熟妇视频国产偷人 | 所有明星裸露影片合集在线播放 | 午夜激情视频 | 高清乱码免费看污 | 国产裸拍裸体视频在线观看 | 久久精品岛国av一区二区无码 | 日韩国产一区二区三区四区五区 | 欧美肥胖老太videossexohd | 久久这里有精品 | 国产成人小视频 | 超高清欧美videossex4 | 成人高潮片免费软件69视频 | 国产精品高清一区二区三区 | 老司机精品视频一区二区 | 国产精品a一区二区三区网址 | 日韩小视频在线观看 | 国产v在线观看 | 首页 动漫 亚洲 欧美 日韩 | 久久538| 国产精品人妻系列21p | 制服丝袜在线第一页 | 天天撸在线视频 | 国产高清视频在线观看 | 国产xx00| 无遮挡很爽很污很黄的网站 | 人成福利视频在线观看 | 91极品国产情侣高潮对白 | 久久久精品视频一区二区三区 | 成人在线播放av | 亚洲精品一区二区冲田杏梨 | 日韩艹逼视频 | 麻豆视频精品 | 国产女人水真多18毛片18精品 | 一本大道综合伊人精品热热 | 牲欲强的熟妇农村老妇女视频 | 成人无码精品一区二区三区 | 国产婷婷成人久久av免费高清 | av亚洲产国偷v产偷v自拍麻豆 | 久草视频精品 | 人与动物av | 久久婷婷五月综合色一区二区 | 成人5g影院_天天5g天天看 | 国产精品三级在线观看无码 | 操批网站 | 国产日韩在线播放 | 一区二区三区网 | 婷婷精品 | 99久久国产综合精品女不卡 | 日本一级片在线观看 | 亚洲高清视频在线播放 | 日韩欧美理论片 | 在线观看黄av | 国产一级伦理片 | 乌克兰t做爰xxxⅹ性 | 午夜小福利 | 波多野结衣免费视频观看 | www,欧美| 精品国产a∨无码一区二区三区 | 免费观看全黄做爰大片国产 | 天天做天天爱夜夜爽少妇 | 国产精品国产三级国产普通话99 | 国产喂奶挤奶一区二区三区 | 麻豆视频在线观看免费网站黄 | 久久国产精品成人免费 | 91在线短视频 | 免费无码一区二区三区蜜桃 | 在线视频毛片 | 在线观看黄av | 日本精品免费视频 | 邻居少妇张开腿让我爽了一夜 | 国产露脸老熟高潮在线 | 久久123| 小嫩嫩流白浆 |