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

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

?? modbusrxd.c

?? 一個關于MODBUS方面的程序
?? C
字號:
/*********************************************************************
* FileName : modbusrxd.c  
* Author   : Jack Zhang
* Date     : 06/6/2008   
*********************************************************************/
#include <psos.h>
#include <custom_defs.h>
#include <tmInterrupts.h>
#include <AppModel.h>
#include <stdio.h>
#include <string.h>
#include <tmNxTypes.h>
#include <tmDbg.h>
#include <tmosal.h>
#include <dprintf.h>
#include <tmbslCore.h>
#include <tmosal.h>
#include "modbus.h"

#include "..\..\nexper5.5\exProject\comps\Uart8004\src\uart_local.h"
#include "..\..\nexper5.5\exProject\comps\Uart8004\inc\uart.h"


#define   DEBUG_MODBUS
//----------------公有變量------------------------------------

static unsigned int addr =1;     //定義靜態的地址變量,用于接收數據的地址校驗,以及用戶修改地址數據
unsigned char *mod_ascii =NULL;//接收modbus傳送過來的字符,是BIT
unsigned char *mod_rtu =NULL; //接收rtu模式的數據
unsigned char **dframe =NULL;
unsigned char *chars;
extern int valid_data(unsigned char*, int,char);  //提取有效數據
//-------------------------------------------------------------

//-------------公有函數-----------------------------------------
int    process_rxd(Rn_Buffer_t *pRnBuf);                     //通信處理函數
void    change_addr(int);                                     //改變地址

//---------------------------------------------------------------

//---------------私有函數----------------------------------------

 unsigned char lrc8(unsigned char *,unsigned short);           //LRC校驗            
int len_check(unsigned char* );                                     //計算每個包中數據的長度,查看是否丟失數據
extern unsigned short crc16(unsigned char *,unsigned short);         //CRC校驗
int ch2ii (int dfnum);                                                //將字符轉換成整形數
//---------------------------------------------------------------

//-------------------更改設備地址-----------------------------

void change_addr(int num)
{
	if((num>247||num<0))
	 
	    printf("輸入錯誤!請輸入一個1--247之間的整數:");
	else 
	 
	   addr = num;
 	
}
//-----------------------------------------------------------------

//-------------------CRC校驗-----------------------------

 unsigned short crc16(unsigned char *puchMsg , unsigned short usDataLen) 
{ 
        unsigned char uchCRCHi = 0xFF ; /* high byte of CRC initialized */ 
        unsigned char uchCRCLo = 0xFF ; /* low byte of CRC initialized */ 
        unsigned short uIndex ; /* will index into CRC lookup table */ 
        while (usDataLen--)/* pass through message buffer */ 
        { 
                uIndex = uchCRCHi ^ *puchMsg++ ; /* calculate the CRC */ 
                uchCRCHi = uchCRCLo ^ aucrchi[uIndex]; 
                uchCRCLo = aucrclo[uIndex] ; 
        } 
        return (uchCRCHi << 8 | uchCRCLo) ; 
} 
//-----------------------------------------------------------------


//-------------------LRC校驗-----------------------------
unsigned char lrc8(unsigned char *auchMsg_,unsigned short usDataLen_) 

{ 
  unsigned char uchLRC = 0 ; /* LRC 字節初始化 */ 
  while (usDataLen_--) /* 傳送消息 */ 
  uchLRC += *auchMsg_++; /* 累加*/ 
  return (((unsigned char)(~uchLRC+1))); 
} 

//-----------------------------------------------------------------

//-------------------字符轉換函數-----------------------------------
int ch2ii (int dfnum)
{   
   int i,k;  
    for(i =0; i<22; i++)
            {
             if(dframe[dfnum][0] ==ch2i[i].ch)
               {
                break;
               }
              
            }
             for(k =0; k<22; k++)
            {
             
             if(dframe[dfnum][1] ==ch2i[k].ch)
              { 
                break;
              }
            }
  
    return ((((ch2i[i].num)&0x0000000f)<<4)+((ch2i[k].num)&0x0000000f));
}

//-------------------------ASCII模式數據接收----------------
int   ascii_rxd(Rn_Buffer_t *pRnBuf) 
{
      int length=RNBUF_LEN(pRnBuf);
      unsigned char *pStart = pRnBuf->buf+pRnBuf->rd;
      unsigned short ascii_oper;      //操作碼
      int i,ascii_flag;//ascii_flag表識數據接收成功與否
      int j=1;
      char lrcch;
      
#ifdef DEBUG_MODBUS

      printf("hello ascii world!\n");
      printf("length =%d\n",length);
      
#endif
      mod_ascii = (unsigned char *)malloc(length*sizeof(unsigned char));
      if(mod_ascii == NULL)
        { 
          printf("mod_ascii申請內存失敗。\n"); 
        } 
      
      memcpy(mod_ascii,pStart,length);
      
#ifdef DEBUG_MODBUS
      for(i =0;i<length;i++)
      printf("0x%x\n",mod_ascii[i]);
      printf("\n");
#endif
      
      dframe = (unsigned char **)malloc(((length)/2)*sizeof(unsigned char));
      chars =(unsigned char *)malloc(((length)/2)*sizeof(unsigned char));
       if(dframe == NULL)
        { 
          printf("dframe申請內存失敗。\n"); 
        } 
       for(i =0;i<length/2;i++) 
          { 
            dframe[i] =(unsigned char*)malloc(2*sizeof(unsigned char));     
            dframe[i][0] =mod_ascii[j++];
            dframe[i][1] =mod_ascii[j++];
          }
       for(i =0;i<length/2;i++) 
         {
           chars[i] =ch2ii(i);
          
#ifdef DEBUG_MODBUS

           printf("char[i] =0x%x\n",chars[i]);
           
#endif
         }
    if( FRAME_START == mod_ascii[0])  // 幀頭檢查,幀頭一個字節
        { 
     
#ifdef DEBUG_MODBUS

          printf("ascii rxd start ok\n");
          
#endif
         if(addr ==(int)chars[0]) //地址檢查,地址兩個字節
           { 
           	 
#ifdef DEBUG_MODBUS
  	
              printf("ascii addr ok!\n");
#endif

       	      lrcch =lrc8(chars,(length/2)-1);
       	      
#ifdef DEBUG_MODBUS  
  
       	      printf("lrc =0x%x\n",(lrcch&0x000000ff));
       	      printf("chars[length/2-1] =0x%x\n",chars[length/2-1]);
       	      printf("chars[length/2-1] =0x%x\n",chars[length/2-2]);
#endif

             if( chars[length/2-1]== (lrcch&0x000000ff))//LRC檢查,兩個字節
               {
               	
#ifdef DEBUG_MODBUS   
     	
                  printf("ascii lrc ok!\n");
                  
#endif 
                  ascii_oper =chars[1];   //取操作碼兩個字節
     	          //packs_num = PACKINTS(dframe[6],dframe[5]);     //取數據包量兩個字節
     	          
     	         // if(packs_num == packnum_check(dframe,length))
                    // {
                         
                     	ascii_flag =valid_data(chars,length,'a'); //取有效數據
                     //}
                  //else
                   // _send(addr , "長度校驗有誤!");
                }
               else
                 error_send(addr , mod_ascii,'a');
            }
            //地址不正確,不進行接收數據  
        }
        else
          
          error_send(addr,mod_ascii,'a');   
   if(ascii_flag ==0) 
      
      ok_send(addr,mod_ascii,'a');
   
   else
      
     error_send(addr , mod_ascii,'a');
      
   for(i =0; i<length/2; i++)
      {
      	free(*dframe[i]);
        *dframe[i] =NULL;
      }
      
    free(mod_ascii);
    mod_ascii =NULL;
   
  return (pRnBuf->rd+length);
}

//-------------------------------------------------------------

//-------------------------RTU模式數據接收----------------
int   rtu_rxd(Rn_Buffer_t *pRnBuf) 
{
      int length=RNBUF_LEN(pRnBuf);
      unsigned char *pStart = pRnBuf->buf+pRnBuf->rd;
      unsigned char rtu_oper;      //操作碼
      int i,rtu_flag; //rtu_flag表識接收數據成功與否
      int crcci;
      
#ifdef DEBUG_MODBUS 

      printf("rtu_rxd ok!\n");
      printf("length =%d\n",length);
      
#endif
      mod_rtu = (unsigned char *)malloc(length*sizeof(unsigned char));
      
      if(mod_rtu == NULL)
        { 
          printf("mod_rtu申請內存失敗。\n"); 
        } 
      
      memcpy(mod_rtu,pStart,length);
      for(i =0;i<length;i++)
      
#ifdef DEBUG_MODBUS 

      printf("0x%x\n",mod_rtu[i]);
      printf("\n");
      
#endif
          
         if(addr ==mod_rtu[0]) //地址檢查
           { 
#ifdef DEBUG_MODBUS

              printf("addr ok!\n"); 

#endif
       	      crcci =crc16(mod_rtu,length-2);
#ifdef DEBUG_MODBUS
	      
       	      printf("crc =0x%x\n",(crcci&0x0000ffff));
       	      printf("crc2 =0x%x\n",mod_rtu[length-1]<<8|mod_rtu[length-2]);
       	      
#endif
             if(mod_rtu[length-1]<<8|mod_rtu[length-2]== (crcci&0x0000ffff))//CRC檢查               {
               	
#ifdef DEBUG_MODBUS

                printf("crc ok!\n");
                
#endif
                  rtu_oper =mod_rtu[1];   //取操作碼兩個字節
               
     	          //packs_num = PACKINTS(dframe[6],dframe[5]);     //取數據包量兩個字節
     	          
     	         // if(packs_num == packnum_check(dframe,length))
                    // {
                     	rtu_flag =valid_data(mod_rtu,length-2,'r'); //取有效數據
                     //}
                  //else
                   // _send(addr , "長度校驗有誤!");
                }
               else
                 error_send(addr,mod_rtu,'r');
            }
            //地址不正確,不進行接收數據  
  if(rtu_flag ==0)
  
    error_send(addr,mod_rtu,'r');
    
  else
    
    ok_send(addr,mod_rtu,'r');
    free(mod_rtu);
    mod_rtu =NULL;
   
  return (pRnBuf->rd+length);
}

//-------------------------------------------------------------









?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产婷婷综合在线精品| 秋霞电影网一区二区| 亚洲电影一区二区三区| 久久99九九99精品| 色屁屁一区二区| 久久精品视频在线看| 免费三级欧美电影| 欧美在线一二三| 中文字幕一区二区三区不卡| 久国产精品韩国三级视频| 欧美日韩在线综合| 亚洲视频一区在线| www.欧美色图| 久久久久综合网| 欧美aaaaa成人免费观看视频| 99国产精品久久久| 日本一区二区不卡视频| 国产在线国偷精品免费看| 欧美精品黑人性xxxx| 一区二区三区精品视频在线| 国产成人夜色高潮福利影视| 精品三级av在线| 男男成人高潮片免费网站| 在线观看91视频| 亚洲欧美激情在线| 色综合夜色一区| 一区二区三区不卡在线观看| 国产91清纯白嫩初高中在线观看| 日韩一区二区视频| 麻豆精品一区二区综合av| 91麻豆精品国产91久久久使用方法 | 一区二区欧美在线观看| eeuss鲁一区二区三区| 久久久夜色精品亚洲| 国产在线精品不卡| 国产午夜精品在线观看| 国产成人在线网站| 国产精品入口麻豆原神| 成人永久免费视频| 国产精品的网站| 91丝袜国产在线播放| 亚洲免费av在线| 色综合久久久久久久久| 一区二区国产视频| 欧美精品精品一区| 精品一区二区精品| 欧美国产1区2区| 在线精品视频一区二区| 亚洲h动漫在线| 日韩精品专区在线| 成人一区二区三区视频| 亚洲女与黑人做爰| 欧美肥妇毛茸茸| 极品少妇一区二区| 自拍偷拍亚洲欧美日韩| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 亚洲一区av在线| 日韩欧美国产wwwww| 国产98色在线|日韩| 一二三四社区欧美黄| 欧美一区日本一区韩国一区| 国产麻豆午夜三级精品| 亚洲精品老司机| 日韩一级二级三级精品视频| 国产成a人亚洲| 一区二区高清免费观看影视大全| 欧美一区二区三区在线| 成人av免费在线观看| 午夜精彩视频在线观看不卡| 久久综合网色—综合色88| 97aⅴ精品视频一二三区| 琪琪一区二区三区| 亚洲乱码中文字幕综合| 精品国内二区三区| 欧美性色黄大片手机版| 国产精品亚洲第一| 亚洲国产视频一区| 中文字幕av一区二区三区| 在线不卡一区二区| 99国产精品久久久久久久久久| 男人的天堂久久精品| 亚洲少妇中出一区| 国产欧美日韩久久| 日韩免费看的电影| 欧美性猛交xxxx乱大交退制版| 国产精品一级片在线观看| 无吗不卡中文字幕| 亚洲男人的天堂网| 国产网站一区二区| 欧美变态tickle挠乳网站| 欧美日韩一区二区三区高清| 成人免费看的视频| 国产一区二区三区四| 午夜精品久久久久影视| 亚洲精品乱码久久久久| 国产精品日产欧美久久久久| 欧美mv日韩mv| 91精品国产综合久久国产大片| 色噜噜狠狠色综合欧洲selulu| 国产盗摄一区二区| 国产一区二区三区黄视频 | 日本不卡视频一二三区| 亚洲一区二区三区四区中文字幕 | 91精品啪在线观看国产60岁| 色综合一个色综合亚洲| 不卡一二三区首页| 国产成人av福利| 国产精品一二一区| 91福利精品视频| 国产精品综合在线视频| 97国产精品videossex| 国产精品91xxx| 韩国v欧美v亚洲v日本v| 免费在线观看一区二区三区| 三级在线观看一区二区| 午夜私人影院久久久久| 婷婷久久综合九色综合绿巨人 | 欧美日韩一区二区三区免费看| 91蝌蚪porny成人天涯| 91色乱码一区二区三区| 91久久精品一区二区三| 欧美在线高清视频| 在线观看网站黄不卡| 欧美午夜精品久久久久久孕妇| 91电影在线观看| 欧美色老头old∨ideo| 欧美三级欧美一级| 日韩欧美一二三四区| 久久免费看少妇高潮| 中文字幕久久午夜不卡| 亚洲欧美激情小说另类| 亚洲chinese男男1069| 美女视频免费一区| 国产99精品国产| 91捆绑美女网站| 91精品国产综合久久久久久漫画| 日韩免费观看2025年上映的电影| 精品国产一区a| 国产精品不卡在线观看| 亚洲国产sm捆绑调教视频| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品1024久久| 日本精品一区二区三区四区的功能| 日韩精品一区在线| 国产精品区一区二区三区| 1000精品久久久久久久久| 午夜精品123| 国产精品77777| 色婷婷精品久久二区二区蜜臂av| 91精品国产色综合久久不卡蜜臀| 欧美成人精品二区三区99精品| 中文字幕第一页久久| 婷婷六月综合网| 成人激情小说网站| 777午夜精品免费视频| 国产日韩影视精品| 亚洲成人福利片| 成人高清视频免费观看| 91精品国产全国免费观看| 国产精品久久久久久久久久久免费看| 亚洲午夜激情网站| 成人h动漫精品一区二区| 51午夜精品国产| 自拍偷自拍亚洲精品播放| 久久99国产精品成人| 在线视频欧美精品| 国产婷婷一区二区| 日韩国产欧美一区二区三区| 国v精品久久久网| 91精品国产综合久久久蜜臀粉嫩 | 亚洲精品成人a在线观看| 国产一区二区三区在线观看免费视频 | 蜜桃av一区二区| 欧美在线综合视频| 亚洲欧洲在线观看av| 狠狠色丁香九九婷婷综合五月| 欧美日韩一区二区三区在线看| 国产精品色哟哟网站| 寂寞少妇一区二区三区| 91精品久久久久久蜜臀| 一区二区国产视频| 91麻豆蜜桃一区二区三区| 国产日本亚洲高清| 久久精品国产澳门| 91精品国产综合久久精品app| 玉米视频成人免费看| 99久久免费精品| 国产精品天干天干在观线| 国产在线精品一区在线观看麻豆| 欧美一二三在线| 日韩av在线播放中文字幕| 欧美视频在线一区二区三区 | 97精品国产露脸对白| 久久精品亚洲精品国产欧美| 久久99精品视频| 日韩西西人体444www| 奇米影视一区二区三区| 欧美精品日韩一区| 天天影视色香欲综合网老头| 91麻豆精品国产91久久久久久久久|