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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? modbus_client.c

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

Written by:  Haemish Kyd

      It is hereby certified that the author of this code specified above
      has made reference only to information that is in the public domain
      or is available to FieldServer Technologies via a duly signed
      Non-Disclosure Agreement. This code is guaranteed free and clear of
      any claim upon it by any Third Party.

      The basis for this certification includes:
         Original work performed by Eddie Hague.

   Copyright (c) 1991-2003, FieldServer Technologies.
   1991 Tarob Court, Milpitas, CA 95035, USA
   (408) 262 2299

********************************************************************************

 Versions
  1.00aA   15 Oct 04 HLK   Created
  1.00aB   09 Nov 04 HLK   Beautified and organised

*******************************************************************************/
#include <fst.h>
#include <ProtoMod.h>
#include <SIOAPI.H>

extern BYTE UART_RX_buf[MX_RX_TX_BUFFERSIZE] ; // buffer for PIC UART transmit
extern BYTE UART_TX_Buffer[MX_RX_TX_BUFFERSIZE] ;   //Transmit Buffer
extern BYTE UART_rcv_count;

extern MAP_DESC_TYP  coil_map[MX_COILS] ;
extern MAP_DESC_TYP  discrete_inputs_map[MX_DI] ;
extern MAP_DESC_TYP  register_map[MX_REG] ;

BYTE coil_write=0;
BYTE discrete_input_read=0;
BYTE register_write=0;
BYTE coil_read=0;
BYTE register_read=0;
BYTE current_node_ref;
BYTE poll_control=0;

/*============================================================================*/
// Builds the modbus message
VOID build_modbus_poll ( BYTE node_id, BYTE function, UINT16 address, INT16 amount )
{
   UINT16 crc ;

   /******************************************************************/
   /*      NODE ID TO MESSAGE                                        */
   /******************************************************************/
   UART_TX_Buffer[0]=node_id;
   /******************************************************************/
   /*      FUNCTION TO MESSAGE                                       */
   /******************************************************************/
   UART_TX_Buffer[1]=function;
   /******************************************************************/
   /*      ADDRESS TO MESSAGE HIGH THEN LOW                          */
   /******************************************************************/
   UART_TX_Buffer[2]=(BYTE)((address>>8)&0xff) ;
   UART_TX_Buffer[3]=(BYTE)((address)&0xff) ;
   /******************************************************************/
   /*      LENGTH/DATA TO MESSAGE HIGH THEN LOW                      */
   /******************************************************************/
   UART_TX_Buffer[4]=(BYTE)((amount>>8)&0xff) ;
   UART_TX_Buffer[5]=(BYTE)((amount)&0xff) ;
   /******************************************************************/
   /*      CHECKSUM TO MESSAGE  HIGH THEN LOW                        */
   /******************************************************************/
   crc = modrtuChecksum (UART_TX_Buffer, 6) ;
   UART_TX_Buffer[6]=(BYTE)((crc >> 8) & 0xff) ;
   UART_TX_Buffer[7]=(BYTE)((crc) & 0xff) ;

   current_node_ref=node_id;

   (VOID)sioapi_puts(P6720SER2,(BYTE *) UART_TX_Buffer,8);
}


/*============================================================================*/
// Prepares the read message for the message build
VOID build_and_submit_modbus_read_poll ( BYTE node_id, UINT16 address, BYTE read_type, BYTE amount )
{
   if ( amount<(BYTE)1 )
      {
      amount=1;
      }
   build_modbus_poll (node_id, read_type , (UINT16)(address-1), amount ) ;

}


/*============================================================================*/
// Prepares the write message for the message build
VOID build_and_submit_modbus_write_poll ( BYTE node_id, UINT16 address, BYTE function, INT16 write_value )
{
   if ( function == (BYTE)(MODBUS_WRITE_COIL ) )
      {

      if ( write_value == (INT16)0 )
         {
         write_value = (INT16)COIL_OFF ;
         }
      else
         {
         write_value = (INT16)COIL_ON ;
         }
      }
   build_modbus_poll (node_id, function, (UINT16)(address-1) , write_value) ;
}

/*============================================================================*/
// Sends message to be built depending on the function
VOID poll_modbus( MAP_DESC_TYP *temp_md )
{
   switch ( temp_md->function )
      {
      case MODBUS_READ_COILS:
      case MODBUS_READ_DISCRETEINPUTS:
      case MODBUS_READ_INPUTREGISTERS:
         build_and_submit_modbus_read_poll(temp_md->node_id,temp_md->address,temp_md->function,1);
         break;
      case MODBUS_WRITE_COIL:
      case MODBUS_WRITE_REGISTER:
         build_and_submit_modbus_write_poll (temp_md->node_id,temp_md->address,temp_md->function,(INT16)temp_md->data);
         break;
      default:
         break;
      }
}

/*============================================================================*/
// Checks for the next message to be sent
MAP_DESC_TYP *check_for_next_modbus_message ( VOID )
{
   BYTE  i;
   MAP_DESC_TYP *temp_md;

   RTICK:

   switch ( poll_control )
      {
      case 0 :
         /******************************************************************/
         /*      WRITE COILS                                               */
         /******************************************************************/
         for ( i = 0 ; i < (BYTE)(MX_COILS) ; i++ )
            {
            // Wrap
            if ( (BYTE)coil_write >= (BYTE)MX_COILS ) coil_write = 0 ;
            if ( coil_map[coil_write].function == (BYTE)MODBUS_WRITE_COIL )
               {
               break;
               }
            coil_write++;
            }

         if ( i==(BYTE)MX_COILS )
            {
            poll_control++;
            goto RTICK;
            }

         temp_md=&coil_map[coil_write];
         da_get_BIT(temp_md);

         temp_md->old_data=temp_md->data;
         poll_control++;

         return temp_md;
         //break;

      case 1:
         /******************************************************************/
         /*      WRITE REGISTER                                            */
         /******************************************************************/

         for ( i = 0 ; i < (BYTE)MX_REG ; i++ )
            {
            // Wrap
            if ( (BYTE)register_write >= (BYTE)MX_REG ) register_write = 0 ;
            if ( register_map[register_write].function == (BYTE)MODBUS_WRITE_REGISTER )
               {
               break;
               }
            register_write++;
            }

         if ( i==(BYTE)MX_REG )
            {
            poll_control++;
            goto RTICK;
            }

         temp_md=&register_map[register_write];
         da_get_UINT16(temp_md);
         if ( (temp_md->data&0x01)==(temp_md->old_data&0x01) )
            {
            poll_control++;
            goto RTICK;
            }
         temp_md->old_data=temp_md->data;
         poll_control++;

         return temp_md;
         //break;

      case 2 :
         /******************************************************************/
         /*      READ COILS                                                */
         /******************************************************************/

         for ( i=0; i<(BYTE)MX_COILS; i++ )
            {
            // Wrap
            if ( (BYTE)coil_read >= (BYTE)MX_COILS ) coil_read = 0 ;
            if ( coil_map[coil_read].function==(BYTE)MODBUS_READ_COILS )
               {
               break;
               }
            coil_read++;
            }

         if ( i == (BYTE)MX_COILS )
            {
            poll_control++;
            goto RTICK ;
            }

         temp_md=&coil_map[coil_read];
         poll_control++;

         return temp_md;

         //break ;

      case 3 :
         /******************************************************************/
         /*      READ DISCRETE INPUTS                                      */
         /******************************************************************/

         for ( i=0; i<(BYTE)MX_DI; i++ )
            {
            // Wrap
            if ( (BYTE)discrete_input_read >= (BYTE)MX_DI ) discrete_input_read = 0 ;
            if ( discrete_inputs_map[discrete_input_read].function==(BYTE)MODBUS_READ_DISCRETEINPUTS )
               {
               break;
               }
            discrete_input_read++;
            }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品对白一区国产伦| 精品一区二区免费看| 91尤物视频在线观看| 中文字幕色av一区二区三区| 丰满白嫩尤物一区二区| 日韩一区二区不卡| 激情偷乱视频一区二区三区| 日韩欧美一区电影| 久久69国产一区二区蜜臀| 久久综合色综合88| 国产成人鲁色资源国产91色综 | 午夜私人影院久久久久| 欧美日韩中文字幕一区| 麻豆一区二区在线| 亚洲国产精品精华液2区45| 99国产精品99久久久久久| 亚洲小说欧美激情另类| 欧美一区二区久久| 成人综合在线网站| 亚洲自拍欧美精品| 日韩欧美在线网站| 成人av片在线观看| 亚洲va中文字幕| 久久在线免费观看| 亚洲黄色片在线观看| 91麻豆国产福利在线观看| 亚洲一卡二卡三卡四卡无卡久久 | 91麻豆精品国产91久久久久久| 日本免费在线视频不卡一不卡二| 久久久久久久久久看片| 91一区二区在线观看| 日韩国产高清影视| 国产精品沙发午睡系列990531| 欧美做爰猛烈大尺度电影无法无天| 美女视频一区二区三区| 亚洲日本免费电影| 26uuu精品一区二区在线观看| 99re这里只有精品首页| 免费不卡在线观看| 一区二区在线免费| 久久精品无码一区二区三区| 欧美日韩国产小视频在线观看| 国产高清在线精品| 日韩精品亚洲一区二区三区免费| 国产精品无人区| 欧美成人猛片aaaaaaa| 日本高清无吗v一区| 国产高清亚洲一区| 视频在线观看国产精品| 亚洲三级久久久| 一本一道久久a久久精品综合蜜臀| 中文字幕一区二区三区四区不卡 | 欧美综合色免费| 国产精品18久久久久久久久| 午夜精品视频一区| 国产精品国产馆在线真实露脸 | 欧美性做爰猛烈叫床潮| 国产高清不卡二三区| 免播放器亚洲一区| 亚洲一区二区综合| 一区二区三区中文在线| 国产精品视频第一区| 久久午夜免费电影| 精品少妇一区二区三区视频免付费 | 日韩精品国产欧美| 欧美一区二区三区思思人| 91在线视频18| 成人自拍视频在线| 国产精一区二区三区| 麻豆成人免费电影| 日韩成人精品在线观看| 五月天欧美精品| 亚洲成人综合网站| 亚洲综合视频在线观看| 亚洲一区在线视频| 亚洲愉拍自拍另类高清精品| 亚洲婷婷综合久久一本伊一区| 国产精品麻豆欧美日韩ww| 欧美激情一区不卡| 国产精品国产成人国产三级| 中文字幕一区二区三区四区不卡 | 色偷偷久久人人79超碰人人澡| 国产欧美精品国产国产专区| 欧美三级日韩在线| 精品视频一区三区九区| 在线免费不卡视频| 欧美视频三区在线播放| 欧美特级限制片免费在线观看| 欧美亚洲日本国产| 欧美日韩精品欧美日韩精品一综合| 欧美偷拍一区二区| 国产亚洲成年网址在线观看| 久久日韩粉嫩一区二区三区 | 欧美成人精品高清在线播放| 精品久久久久久综合日本欧美| 精品国产乱码91久久久久久网站| 欧美精品一区二| 国产精品久久久久久久久免费桃花| 国产精品二三区| 亚洲一区视频在线观看视频| 免费一级欧美片在线观看| 精品亚洲成a人在线观看| 国产精品乡下勾搭老头1| av网站一区二区三区| 一本一本久久a久久精品综合麻豆| 欧美伊人久久大香线蕉综合69| 欧美另类videos死尸| 337p粉嫩大胆噜噜噜噜噜91av| 风间由美一区二区av101| 99在线精品视频| 欧美一级片在线| 国产欧美一区二区精品性色超碰 | 亚洲精品欧美激情| 日韩电影免费在线| 国产不卡视频在线观看| 欧美亚洲国产一区二区三区| 日韩欧美一区二区在线视频| 久久精品欧美日韩| 亚洲成人av一区二区| 国产呦萝稀缺另类资源| 91福利小视频| 2023国产一二三区日本精品2022| 最好看的中文字幕久久| 美女视频黄频大全不卡视频在线播放| 粉嫩一区二区三区在线看| 欧美视频在线播放| 国产欧美视频一区二区| 亚洲一区二区三区四区在线免费观看 | 在线成人av网站| 中文欧美字幕免费| 免费在线一区观看| 色94色欧美sute亚洲线路二| 精品对白一区国产伦| 午夜欧美在线一二页| 成人18视频在线播放| 欧美va亚洲va在线观看蝴蝶网| 夜夜精品视频一区二区| 国产二区国产一区在线观看| 欧美精品成人一区二区三区四区| 国产精品人妖ts系列视频| 久久黄色级2电影| 欧美日韩在线免费视频| 中文字幕制服丝袜一区二区三区| 激情综合网天天干| 欧美一区二区视频免费观看| 亚洲蜜臀av乱码久久精品蜜桃| 国产成人免费视| 欧美成人乱码一区二区三区| 天天免费综合色| 91成人在线免费观看| 国产精品私房写真福利视频| 国产制服丝袜一区| 欧美一卡2卡三卡4卡5免费| 亚洲国产精品精华液网站| www.欧美.com| 国产精品久线在线观看| 国产麻豆一精品一av一免费| 精品国产乱码久久久久久免费| 日日摸夜夜添夜夜添国产精品| 色婷婷综合中文久久一本| 国产精品日日摸夜夜摸av| 国产99久久久国产精品潘金 | 欧美日韩国产小视频| 亚洲一区中文在线| 日本精品裸体写真集在线观看 | 欧美性猛交一区二区三区精品| 最新久久zyz资源站| 视频一区二区三区入口| 久久久久综合网| 麻豆免费精品视频| 69av一区二区三区| 日韩中文字幕1| 欧美一区二区三区视频在线| 日韩—二三区免费观看av| 欧美日韩国产色站一区二区三区| 亚洲va韩国va欧美va| 欧美日韩国产片| 日本aⅴ亚洲精品中文乱码| 欧美顶级少妇做爰| 免费观看91视频大全| 精品国产制服丝袜高跟| 国产成人免费9x9x人网站视频| 国产拍欧美日韩视频二区| 成人性生交大合| 亚洲少妇中出一区| 欧美三级三级三级| 免费人成精品欧美精品| 久久综合久久综合亚洲| 成人免费视频视频| 亚洲欧美激情在线| 欧美日韩国产另类一区| 麻豆精品在线视频| 国产欧美一区二区精品性色超碰| 91亚洲精品乱码久久久久久蜜桃 | 亚洲婷婷综合久久一本伊一区| 在线欧美日韩精品| 久久色在线视频| 国产一区二区伦理片| 欧美激情一区二区三区不卡| 在线免费观看成人短视频|