亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? modbus_server.c

?? build a modbus client/server for use on the Protocessor (from FieldServer Technologies) Tools Req
?? C
?? 第 1 頁 / 共 2 頁
字號:

            UART_TX_Buffer[3+i] = byte_store ;

            }
         UART_TX_Buffer[1] = UART_RX_buf[1] ;
         modbusSendUARTPacket( (BYTE)(3+byte_cnt) ) ;
         return;

         /******************************************************************/
         /*       FUNCTION CODE 0X05 -> WRITE COIL                         */
         /******************************************************************/
      case MODBUS_WRITE_COIL :

         {
            if ( !temp_md )
               {
               modbusReturnException (ILLEGAL_DATA_ADDRESS) ;
               return ;
               }
         }

         for ( i = 0 ; i < (BYTE)WRITE_COIL_RESPONSE_LENGTH ; i++ )
            {
            UART_TX_Buffer[i] = UART_RX_buf[i] ;
            }
         UART_TX_Buffer[1] = UART_RX_buf[1] ;
         modbusSendUARTPacket( WRITE_COIL_RESPONSE_LENGTH ) ;
         return ;

         /******************************************************************/
         /*       FUNCTION CODE 0X06 -> WRITE REGISTER                     */
         /******************************************************************/
      case MODBUS_WRITE_REGISTER:
         {

            {
               if ( !temp_md )
                  {
                  modbusReturnException (ILLEGAL_DATA_ADDRESS) ;
                  return ;
                  }
            }

            for ( i = 0 ; i < (BYTE)WRITE_COIL_RESPONSE_LENGTH ; i++ )
               {
               UART_TX_Buffer[i] = UART_RX_buf[i] ;
               }
            UART_TX_Buffer[1] = UART_RX_buf[1] ;
            modbusSendUARTPacket( WRITE_COIL_RESPONSE_LENGTH ) ;
            return ;
         }
         //break;

         /******************************************************************/
         /*       FUNCTION CODE 0X04  -> READ REGISTER                     */
         /******************************************************************/
      case MODBUS_READ_INPUTREGISTERS :
         {
            BYTE local_length;

            i = 3;
            local_length=(BYTE)(in_buffer.length);

            for ( byte_cnt = 0 ; byte_cnt < local_length ; byte_cnt++ )
               {
               if ( !temp_md )
                  {
                  modbusReturnException (ILLEGAL_DATA_ADDRESS) ;
                  return ;
                  }

               UART_TX_Buffer[i] = (BYTE)(temp_md->data>>8) ; //high 8 bits

               UART_TX_Buffer[i+1] = (BYTE)(temp_md->data) ;  // low 8 bits

               i = (BYTE)(i + 2) ;
               in_buffer.address++ ;
               if ( in_buffer.address >= in_buffer.length )
                  {
                  break ;
                  }
               temp_md=modbusFetchData();
               }

            UART_TX_Buffer[1] = UART_RX_buf[1] ;             // copy function code
            UART_TX_Buffer[2] = (BYTE)(UART_RX_buf[5] * 2) ; // num data bytes

            modbusSendUARTPacket( (BYTE)(3 + UART_TX_Buffer[2]) ) ;
         }
         return ;
      default:
         break;
      }
}


/*============================================================================*/
// Make sure that the modbus poll received is complete as a message.
BYTE modbusPollReceiveComplete ( VOID )
{
   BYTE   target,count_tmp ;
   UINT16 temp_code1,temp_code2,temp_code3 ;
   UINT16 check ;

   get_PICUART_data () ;

   /******************************************************************/
   /*      LESS THAN FOUR BYTES RECEIVED CMPLT_HOPE                  */
   /******************************************************************/
   if ( UART_rcv_count < (BYTE)4 )  //received less than 4 bytes
      {
      return CMPLT_HOPE ; // hope yet
      }

   /******************************************************************/
   /*      CHECK FOR CORRECT FUNCTION CODE                           */
   /******************************************************************/
   switch ( UART_RX_buf[1] )
      {
      case MODBUS_READ_COILS :
      case MODBUS_READ_DISCRETEINPUTS :
      case MODBUS_READ_INPUTREGISTERS :
      case MODBUS_WRITE_COIL :
      case MODBUS_WRITE_REGISTER :
         target = 6 ;
         break ;
      default :
         return CMPLT_NO_HOPE ;
      }

   /******************************************************************/
   /*      HANDLES RESPONSES FROM OTHER SERVERS                      */
   /******************************************************************/
   if ( UART_rcv_count == target )
      {
      temp_code1 = UART_RX_buf[target-2] ;
      temp_code2 = (UINT16) (temp_code1 << 8) ;
      temp_code1 = UART_RX_buf[target-1] ;
      temp_code3 = (UINT16)(temp_code2|temp_code1) ;
      if ( modrtuChecksum ( UART_RX_buf, (BYTE)(target-2)) == temp_code3 )
         {
         return CMPLT_COMPLETE;
         }
      }

   /******************************************************************/
   /*      CHECK FOR CORRECT MESSAGE LENGTH                          */
   /******************************************************************/
   temp_code1 = (UINT16)(target + 2) ;
   count_tmp=(BYTE)temp_code1;
   if ( UART_rcv_count < count_tmp )
      {
      return CMPLT_HOPE ;
      }

   /******************************************************************/
   /*      CHECK FOR CHECKSUM                                        */
   /******************************************************************/
   check = modrtuChecksum ( UART_RX_buf, target ) ;

   temp_code1 = UART_RX_buf[target] ;
   temp_code2 = (UINT16) (temp_code1 << 8) ;
   temp_code1 = UART_RX_buf[target+1] ;
   temp_code3 = (UINT16)(temp_code2|temp_code1) ;
   if ( check == (UINT16) ( temp_code3 ) )
      {
      return CMPLT_COMPLETE ;
      }

   return CMPLT_NO_HOPE ;

}

/*============================================================================*/

VOID clr_rx ( VOID)
{
   UART_rcv_count = 0;
}


/*============================================================================*/
// Initiate the modbus buffers
VOID modbus_init ( VOID )
{
   BYTE i ;

   clr_rx () ;
   for ( i = 0 ; i < (BYTE)MX_RX_TX_BUFFERSIZE ; i++ )
      {
      UART_RX_buf[i]=0;
      UART_TX_Buffer[i]=0;
      }
}


/*============================================================================*/
// Extract characters from the UART buffer
VOID get_PICUART_data ( VOID)
{
   CHAR ch ;
   // this function reads data from uart circular buffer into UART_RX_buf

   while ( sioapi_ixrx ( P6720SER2 ) )
      {
      ch = (CHAR)sioapi_getch( P6720SER2 ) ;
      UART_RX_buf[UART_rcv_count++]=(BYTE)ch;
      }
}

/*=========================================================================*/
// Check the modbus address
BYTE modbusCheckAddress( VOID )
{
   BYTE id_temp;
   id_temp= (BYTE)Get_Modbus_Node_ID();
   if ( UART_RX_buf[0] == id_temp )
      {
      return TRUE;
      }
   return FALSE;
}
/*============================================================================*/
// In the event of the message being incomplete give up one character and recheck the message
VOID modbusGiveUpCharacter( VOID )
{
   BYTE i;
   for ( i = 1 ; i < UART_rcv_count ; i++ )
      {
      UART_RX_buf[i-1] = UART_RX_buf[i] ;
      }
   UART_rcv_count--;
   if ( UART_rcv_count==(BYTE)0 )
      {
      modbusReturnException (ILLEGAL_DATA_ADDRESS) ;
      return ;
      }
}
/*============================================================================*/
// Extract relevant data from the message received from the client
BYTE modbusParseMessage( VOID )
{
   BYTE basic_function=0;

   in_buffer.node_id= UART_RX_buf[0];
   in_buffer.function=  UART_RX_buf[1];
   in_buffer.address = (UINT16)(((UINT16)(UART_RX_buf[2]) << 8)|((UINT16)(UART_RX_buf[3])));
   switch ( in_buffer.function )
      {
      case MODBUS_READ_COILS:
      case MODBUS_READ_DISCRETEINPUTS:
      case MODBUS_READ_INPUTREGISTERS:
         in_buffer.length  = (UINT16)(((UINT16)(UART_RX_buf[4]) << 8)|((UINT16)(UART_RX_buf[5])));;
         basic_function=READ;
         break;
      case MODBUS_WRITE_COIL:
      case MODBUS_WRITE_REGISTER:
         in_buffer.data = (UINT16)(((UINT16)(UART_RX_buf[4]) << 8)|((UINT16)(UART_RX_buf[5])));;
         basic_function=WRITE;
         break;
      default:
         break;
      }
   in_buffer.checksum= (UINT16) ((UINT16)(UART_RX_buf[6] << 8) | UART_RX_buf[7] ) ;

   return basic_function;
}
/*============================================================================*/
// Returns a map descriptor containing the data required
MAP_DESC_TYP *modbusFetchData( VOID )
{
   MAP_DESC_TYP *temp_md;
   temp_md=find_map_desc_with_data(in_buffer.function,in_buffer.address);
   return temp_md;
}

/*============================================================================*/
// Return a map descriptor that the data will be stored to
MAP_DESC_TYP *modbusStoreData( VOID )
{
   MAP_DESC_TYP *temp_md;
   temp_md=0;
   if ( in_buffer.function==(BYTE)MODBUS_WRITE_COIL )
      {
      if ( in_buffer.data==(UINT16)COIL_ON )
         {
         temp_md=store_data_to_data_array(in_buffer.function,in_buffer.address,ON);
         }
      else if ( in_buffer.data==(UINT16)COIL_OFF )
         {
         temp_md=store_data_to_data_array(in_buffer.function,in_buffer.address,OFF);
         }
      }
   else
      {
      temp_md=store_data_to_data_array(in_buffer.function,in_buffer.address,in_buffer.data);
      }
   return temp_md;
}




?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一本大道在线| 国产精品456露脸| 亚洲激情欧美激情| 中文字幕一区二区三区不卡在线| 久久综合九色综合欧美98 | 欧美成人一区二区三区片免费| 欧美色区777第一页| 欧美中文字幕一区二区三区 | 色综合色狠狠综合色| 成人做爰69片免费看网站| 国产成人免费xxxxxxxx| 国产aⅴ综合色| 成人午夜视频在线| 97se狠狠狠综合亚洲狠狠| 99re热这里只有精品视频| 91丝袜国产在线播放| aa级大片欧美| 在线免费观看视频一区| 欧美色成人综合| 欧美一级久久久久久久大片| 日韩免费福利电影在线观看| 久久久综合精品| 日本一区二区成人在线| 亚洲人成小说网站色在线 | 性做久久久久久| 婷婷成人综合网| 蜜臂av日日欢夜夜爽一区| 国产精品自拍毛片| 99久久99久久久精品齐齐| 欧美日韩综合色| 日韩视频一区二区在线观看| 亚洲国产精品一区二区尤物区| 一区二区久久久久久| 午夜欧美电影在线观看| 美女久久久精品| 成人激情av网| 欧美日韩国产不卡| 日韩欧美的一区二区| 国产精品视频一二三区| 亚洲国产人成综合网站| 激情深爱一区二区| 99精品视频在线播放观看| 欧美日韩三级在线| 国产亚洲美州欧州综合国| 亚洲卡通欧美制服中文| 久久精品国产在热久久| 99久久综合色| 日韩欧美国产三级电影视频| 中文字幕在线一区二区三区| 日本午夜一区二区| 99久久99久久久精品齐齐| 欧美一区二区三区的| 亚洲欧洲性图库| 日韩电影网1区2区| 99国产欧美另类久久久精品| 宅男噜噜噜66一区二区66| 国产精品欧美精品| 日本欧美久久久久免费播放网| 成人综合激情网| 日韩一区二区影院| 亚洲婷婷在线视频| 极品美女销魂一区二区三区| 欧美性生交片4| 国产农村妇女毛片精品久久麻豆| 日韩精品欧美精品| 91亚洲精华国产精华精华液| 26uuu另类欧美亚洲曰本| 亚洲成人av电影在线| 成人免费毛片aaaaa**| 日韩欧美电影一二三| 洋洋av久久久久久久一区| 国产91在线|亚洲| 日韩美女视频一区二区在线观看| 亚洲男人的天堂网| 国产精品亚洲一区二区三区妖精 | 日韩精品91亚洲二区在线观看| 高清beeg欧美| 欧美电影免费观看高清完整版| 亚洲小说欧美激情另类| 成人aa视频在线观看| 欧美r级在线观看| 日韩激情一二三区| 精品视频在线免费| 亚洲乱码精品一二三四区日韩在线| 国产99精品在线观看| 久久嫩草精品久久久精品| 麻豆成人91精品二区三区| 欧美精品aⅴ在线视频| 伊人婷婷欧美激情| 91老师国产黑色丝袜在线| 中文字幕中文字幕一区二区| 高清shemale亚洲人妖| 精品久久人人做人人爰| 无码av中文一区二区三区桃花岛| 色综合一区二区| 亚洲欧洲性图库| 97se狠狠狠综合亚洲狠狠| 国产精品久久久久影视| 成人一区二区三区在线观看| 久久久国产精品麻豆| 韩国v欧美v日本v亚洲v| 精品国产乱码久久久久久蜜臀| 青青草精品视频| 欧美电影免费观看高清完整版在| 久久精品国产精品青草| 精品欧美乱码久久久久久1区2区| 久久国产精品区| 精品国产乱码久久| 国产精品1区2区| 国产目拍亚洲精品99久久精品| 国产激情一区二区三区| 国产免费成人在线视频| 99久精品国产| 一区二区三区中文字幕精品精品| 欧美在线高清视频| 亚洲v日本v欧美v久久精品| 欧美裸体bbwbbwbbw| 蜜桃久久久久久| 久久精品男人天堂av| 99热这里都是精品| 亚洲综合视频在线| 91精品一区二区三区在线观看| 久久成人免费网| 欧美韩国日本不卡| 91网站在线观看视频| 日日夜夜一区二区| 2022国产精品视频| av爱爱亚洲一区| 午夜亚洲国产au精品一区二区| 欧美一区二区三区免费在线看| 精品亚洲成a人在线观看| 中文字幕国产精品一区二区| 色悠久久久久综合欧美99| 天天综合网天天综合色| 自拍偷拍亚洲欧美日韩| 欧美少妇bbb| 国模冰冰炮一区二区| 日韩理论片中文av| 欧美一三区三区四区免费在线看 | 国内精品自线一区二区三区视频| 亚洲精品在线三区| 色综合久久天天| 蜜芽一区二区三区| 国产精品免费久久久久| 欧美日韩另类国产亚洲欧美一级| 捆绑调教一区二区三区| 1024国产精品| 日韩一区和二区| 99久精品国产| 日本女优在线视频一区二区| 国产精品久久看| 91精品国产综合久久香蕉的特点| 国产一区二区精品久久99| 亚洲精品国产品国语在线app| 欧美成人一区二区三区在线观看 | 欧洲一区二区三区免费视频| 老司机精品视频导航| 18成人在线视频| 日韩视频中午一区| 色婷婷久久久亚洲一区二区三区| 另类的小说在线视频另类成人小视频在线| 国产精品水嫩水嫩| 日韩精品一区二区三区三区免费 | 亚洲日韩欧美一区二区在线| 欧美一区二区三区免费在线看 | 91在线看国产| 精品一区二区三区的国产在线播放| 亚洲精品日韩一| 国产无人区一区二区三区| 91麻豆精品国产| 一本大道久久a久久综合| 国产精品自拍三区| 美女视频第一区二区三区免费观看网站| 亚洲男人的天堂在线观看| 久久精品欧美日韩| 精品少妇一区二区三区在线视频| 91国产福利在线| 日韩美女主播在线视频一区二区三区| eeuss鲁片一区二区三区| 久久9热精品视频| 调教+趴+乳夹+国产+精品| 一区二区三区精品视频在线| 久久久久国产精品麻豆ai换脸| 欧美一区二区三区色| 欧美色老头old∨ideo| 色八戒一区二区三区| 成人aa视频在线观看| 国产91精品一区二区麻豆网站 | 国产成人99久久亚洲综合精品| 日本美女一区二区三区| 亚洲第一激情av| 亚洲一区二区3| 亚洲视频中文字幕| 国产精品久久久久影院亚瑟| 国产亚洲一区二区三区四区 | 精品国产免费人成电影在线观看四季 | 色成人在线视频| 91视频免费看| 91在线你懂得| 91麻豆6部合集magnet|