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

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

?? modbus.txt

?? MODBUS代碼
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
    *(dest_p + i/2) |=ModbusModule.Buf[i+3]&0xFF; //low 8 bit renew
   }
   break;      
  case READ_HLD_REG: //3
//   if ( !(SysSta&ComRecept) ){
    for ( i=0; i<ModbusModule.Buf[2]; i+=2){ 
     *(dest_p + i/2) = ( ModbusModule.Buf[i+3]<<8 ) + ModbusModule.Buf[i+4];
         }
//   }
   break;
  case SET_N_COIL: //15
  case SET_N_HLD_REG: //16
   // RegAddr= ((ModbusModule.Buf[2] - (uint8)Uart0.Addr) << 8) + ModbusModule.Buf[3]; // 計算 寄存器首地址
   RegAddr= (ModbusModule.Buf[2]<<8) + ModbusModule.Buf[3];
      RegNum = (ModbusModule.Buf[4]<<8) + ModbusModule.Buf[5];
   if ( RegAddr != ModbusModule.RegAddr ){
    return 4;
   }
   if ( RegNum  != ModbusModule.RegNum ){
    return 5;
   }   
   break;
}//end switch
return 0;
}
//---------------------------------------------
// ModbusRTUMasterRun
// 主戰先發起通訊,發送16(寫),然后接收完畢,解析后發送3(讀)然后接收完畢,解析(對從站1操作)
// 對從站2進行類似操作。然后循環。
//
//---------------------------------------------
void ModbusRTUMasterRun ()
{
switch (ModbusModule.Status){
  case IDLE_WAIT ://0
   if (ModbusModule.TimeoutReg>=5){   //重發延時一結束符以上(3.5字符周期)
     if (!(SysSta&InitSub1) ){
      if(ModbusModule.FunCode ==SET_N_COIL){
        ModbusModule.ID=1;
        ModbusModule.FunCode =SET_N_COIL;
        ModbusModule.RegAddr=400;
        ModbusModule.RegNum=320;
        ConstructFrame_RTUSetNCoil(ModbusModule.ID,&REBit[ModbusModule.ID-1][0],ModbusModule.RegAddr,ModbusModule.RegNum);
//       }
      }else if (ModbusModule.FunCode ==SET_N_HLD_REG){
       ModbusModule.ID=1;
       ModbusModule.FunCode =SET_N_HLD_REG;
       ModbusModule.RegAddr=700;
       ModbusModule.RegNum=100;
       ConstructFrame_RTUSetNHldReg(ModbusModule.ID,&REDate[ModbusModule.ID-1][0],ModbusModule.RegAddr,ModbusModule.RegNum);
      }
     }else if( ModbusModule.FunCode == SET_N_HLD_REG ){ 
      ConstructFrame_RTUSetNHldReg(ModbusModule.ID,&WRData[ModbusModule.ID-1][0],ModbusModule.RegAddr,ModbusModule.RegNum);
     }else if ( ModbusModule.FunCode == READ_HLD_REG ){
      ConstructFrame_RTUReadHldReg(ModbusModule.ID,ModbusModule.RegAddr,ModbusModule.RegNum);
     }else if( ModbusModule.FunCode == SET_N_COIL ){ 
      ConstructFrame_RTUSetNCoil(ModbusModule.ID,&WRBit[ModbusModule.ID-1][0],ModbusModule.RegAddr,ModbusModule.RegNum);
     }else if ( ModbusModule.FunCode == READ_N_COIL ){
      ConstructFrame_RTUReadNCoil(ModbusModule.ID,ModbusModule.RegAddr,ModbusModule.RegNum);
     }
    ScibRegs.SCITXBUF = ModbusModule.Buf[ModbusModule.Point++];
    ModbusModule.TxLen--;
    ModbusModule.Status = SEND_START;  
   }
   break;
  case SEND_START ://3
   asm(" nop");
   break;
  case SEND_END ://4
   if (ModbusModule.TimeoutReg>=10){  //超時500ms(無回應)
    InitSci_B();
    ModbusModule.ReTryTime++;
    ModbusModule.TimeoutReg=0;
    ModbusModule.Status = IDLE_WAIT;
   }
   break;
  case RECE_START ://1
   if (ModbusModule.TimeoutReg>=5){  //接收幀結束
    ModbusModule.Status = RECE_END;
   }
   break;
  case RECE_END ://2
   if( (ModbusModule.FunCode== READ_N_COIL) || (ModbusModule.FunCode== SET_N_COIL)){
    if ( RTUMasterFrameAnalyse(&REBit[ModbusModule.ID-1][0])==0 ){  //接收幀解碼正確,清除故障
     if ( (ModbusModule.ID==1) && (ModbusModule.FunCode==SET_N_COIL) ){
      ModbusModule.Tbl_COIL_SET1=0;
     }else if ( (ModbusModule.ID==1) && (ModbusModule.FunCode==READ_N_COIL) ){
      ModbusModule.Tbl_COIL_READ1=0;
     }
     ModbusModule.ReTryTime=0;   //重試次數清0
     ModbusModule.Status = SEND_EXCHANGE;
    }else{         //接收幀解碼有誤,重試,重試次數加1
     ModbusModule.ReTryTime++;
     ModbusModule.TimeoutReg=0;
     ModbusModule.Status =IDLE_WAIT;
    }
   }else{
    if ( RTUMasterFrameAnalyse(&REDate[ModbusModule.ID-1][0])==0 ){  //接收幀解碼正確,清除故障
     SysSta|=InitSub1;
     if ( (ModbusModule.ID==1) && (ModbusModule.FunCode==SET_N_HLD_REG) ){
      ModbusModule.Tbl_SET1=0;
     }else if ( (ModbusModule.ID==1) && (ModbusModule.FunCode==READ_HLD_REG) ){
      ModbusModule.Tbl_READ1=0;
     }else if ( (ModbusModule.ID==2) && (ModbusModule.FunCode==SET_N_HLD_REG) ){
      ModbusModule.Tbl_SET2=0;
     }else if ( (ModbusModule.ID==2) && (ModbusModule.FunCode==READ_HLD_REG) ){
      ModbusModule.Tbl_READ2=0;
     }
     ModbusModule.ReTryTime=0;   //重試次數清0
     ModbusModule.Status = SEND_EXCHANGE;   
    }else{         //接收幀解碼有誤,重試,重試次數加1
     ModbusModule.ReTryTime++;
     ModbusModule.TimeoutReg=0;
     ModbusModule.Status =IDLE_WAIT;
    }
   }
   break;
  case SEND_EXCHANGE ://5
   if ( (ModbusModule.ID==1) && (ModbusModule.FunCode==SET_N_HLD_REG) ){
    ModbusModule.ID  = 1;
    ModbusModule.FunCode= READ_HLD_REG;
    ModbusModule.RegAddr= 700;
    ModbusModule.RegNum = 100;
   }else if ( (ModbusModule.ID==1) && (ModbusModule.FunCode==READ_HLD_REG) ){
    ModbusModule.ID  = 1;
    ModbusModule.FunCode= SET_N_COIL;
    ModbusModule.RegAddr= 00;
    ModbusModule.RegNum = 320;
   }else if ( (ModbusModule.ID==1) && (ModbusModule.FunCode==SET_N_COIL) ){
    if (!(SysSta&InitSub1) ){
     ModbusModule.FunCode= SET_N_HLD_REG;
    }else{
     ModbusModule.ID  = 1;
     ModbusModule.FunCode= READ_N_COIL;
     ModbusModule.RegAddr= 400;
     ModbusModule.RegNum = 320;
     }
   }else if ( (ModbusModule.ID==1) && (ModbusModule.FunCode==READ_N_COIL) ){
    ModbusModule.ID  = 2;
    ModbusModule.FunCode= SET_N_HLD_REG;
    ModbusModule.RegAddr= 600;
    ModbusModule.RegNum = 100;
   }else if ( (ModbusModule.ID==2) && (ModbusModule.FunCode==SET_N_HLD_REG) ){
    ModbusModule.ID  = 2;
    ModbusModule.FunCode= READ_HLD_REG;
    ModbusModule.RegAddr= 800;
    ModbusModule.RegNum = 100;
   }else if ( (ModbusModule.ID==2) && (ModbusModule.FunCode==READ_HLD_REG) ){
    ModbusModule.ID  = 1;
    ModbusModule.FunCode= SET_N_HLD_REG;
    ModbusModule.RegAddr= 500;
    ModbusModule.RegNum = 100;
   }
   ModbusModule.TimeoutReg=0;  //延時一結束幀判斷時間
   ModbusModule.Status = IDLE_WAIT;
   break;
  default :
   break;
}
if(ModbusModule.ReTryTime>=5){  //重試次數到達上限,報錯,切換發送
  if ( (ModbusModule.ID==1) && (ModbusModule.FunCode==SET_N_HLD_REG) ){
   ModbusModule.Tbl_SET1=1;
  }else if ( (ModbusModule.ID==1) && (ModbusModule.FunCode==READ_HLD_REG) ){
   ModbusModule.Tbl_READ1=1;
  }else if ( (ModbusModule.ID==2) && (ModbusModule.FunCode==SET_N_HLD_REG) ){
   ModbusModule.Tbl_SET2=1;
  }else if ( (ModbusModule.ID==2) && (ModbusModule.FunCode==READ_HLD_REG) ){
   ModbusModule.Tbl_READ2=1;
  }else if ( (ModbusModule.ID==1) && (ModbusModule.FunCode==SET_N_COIL) ){
   ModbusModule.Tbl_COIL_SET1=1;
  }else if ( (ModbusModule.ID==1) && (ModbusModule.FunCode==READ_N_COIL) ){
   ModbusModule.Tbl_COIL_READ1=1;
  }
  if (SysSta&InitSub1){
   ModbusModule.Status = SEND_EXCHANGE;
  }
  ModbusModule.ReTryTime=0;
}
}
#endif 
#ifdef MODBUS_SLAVE
//---------------------------------------------
// RTU Set N Hold Register
// CMD=16 SET_N_HLD_REG
// Constructe Answer Frame 
//---------------------------------------------
void  ModbusSlaveSetNHldRegAnswer ( Uint16 board_adr,Uint16 start_address,Uint16 lenth)  
{
Uint16 i=0,j=0;

    ModbusModule.Buf[i++] = board_adr; 
    ModbusModule.Buf[i++] = SET_N_HLD_REG; 
    ModbusModule.Buf[i++] = WORD_HI(start_address); 
    ModbusModule.Buf[i++] = WORD_LO(start_address); 
    ModbusModule.Buf[i++] = WORD_HI(lenth); 
    ModbusModule.Buf[i++] = WORD_LO(lenth); 
j=GetCRC16(ModbusModule.Buf,i);
ModbusModule.Buf[i++] = WORD_LO(j);
ModbusModule.Buf[i++] = WORD_HI(j);
ModbusModule.TxLen    = i;
ModbusModule.Point   = 0;
}
//---------------------------------------------
// RTU Read Hold Register
// CMD=03 READ_HLD_REG
// Constructe Answer Frame 
//---------------------------------------------
void  ModbusSlaveReadHldRegAnswer ( Uint16 board_adr,Uint16 *com_buf,Uint16 lenth)
{
Uint16 i=0,j=0;

    ModbusModule.Buf[i++] = board_adr; 
    ModbusModule.Buf[i++] = READ_HLD_REG; 
ModbusModule.Buf[i++] = lenth<<1;
for(j=0;j<lenth;j++){
  ModbusModule.Buf[i++] = WORD_HI( * (com_buf+j) );
  ModbusModule.Buf[i++] = WORD_LO( * (com_buf+j) );
}
j=GetCRC16(ModbusModule.Buf,i);
ModbusModule.Buf[i++] = WORD_LO(j);
ModbusModule.Buf[i++] = WORD_HI(j);
ModbusModule.TxLen    = i;
ModbusModule.Point   = 0;
}
//---------------------------------------------
// RTU  從站接收分析  
// 3 READ_HLD_REG
// 16 SET_N_HLD_REG
// 返回值: 0  OK
//    1 CRC校驗錯誤
//    2 站號不匹配 
//    4 16寫地址不匹配
//    5 16寫數據字數不匹配
//---------------------------------------------
Uint16 RTUSlaveFrameAnalyse (Uint16  *dest_p) 
{
Uint16 i;
Uint16 crc_result, crc_tmp;
Uint16 RegAddr,RegNum;

crc_tmp  = ModbusModule.Buf[ModbusModule.RxLen-1]<<8;
    crc_tmp += ModbusModule.Buf[ModbusModule.RxLen-2];
crc_result=GetCRC16(ModbusModule.Buf,ModbusModule.RxLen-2);
    if ( crc_tmp != crc_result )       // CRC 校驗正確 
    { 
        return 1; 
    }
if ( ModbusModule.ID != ModbusModule.Buf[0] ){
  return 2;
}
// if ( ModbusModule.FunCode != ModbusModule.Buf[1] ){
//  return 3;
// }
ModbusModule.FunCode=ModbusModule.Buf[1];
switch (ModbusModule.FunCode){      
  case READ_HLD_REG: //3
//   for ( i=0; i<ModbusModule.Buf[2]; i+=2){ 
//    *(dest_p + i/2) = ( ModbusModule.Buf[i+3]<<8 ) + ModbusModule.Buf[i+4];
//        }
//   RegAddr= (ModbusModule.Buf[2]<<8) + ModbusModule.Buf[3];
//      RegNum = (ModbusModule.Buf[4]<<8) + ModbusModule.Buf[5];
   ModbusSlaveReadHldRegAnswer(ModbusModule.ID,&WRData[0][0],100);
   break;
  case SET_N_HLD_REG: //16
   // RegAddr= ((ModbusModule.Buf[2] - (uint8)Uart0.Addr) << 8) + ModbusModule.Buf[3]; // 計算 寄存器首地址
   RegAddr= (ModbusModule.Buf[2]<<8) + ModbusModule.Buf[3];
      RegNum = (ModbusModule.Buf[4]<<8) + ModbusModule.Buf[5];
   if ( (RegNum<<1) != ModbusModule.Buf[6] ){ //字節長度是否匹配
    return 4;
   }
   if ( RegAddr != 600 ){      //對應從站2固定的起始地址(自定義)
    return 5; 
   }
   for ( i=0; i<ModbusModule.Buf[6]; i+=2){ 
    *(dest_p + i/2) = ( ModbusModule.Buf[i+7]<<8 ) + ModbusModule.Buf[i+8];
        }
        ModbusSlaveSetNHldRegAnswer(ModbusModule.ID,RegAddr,RegNum);    
   break;
}//end switch
return 0;
}

//---------------------------------------------
// ModbusRTUSlaveRun
// 通訊由主站發起,從站初始化為接收,并相應的做出回應。
// 站號在初始化中有設置,以后不再更改。
//---------------------------------------------
void ModbusRTUSlaveRun (void) 
{

switch (ModbusModule.Status){
  case IDLE_WAIT ://0
   ScibRegs.SCITXBUF = ModbusModule.Buf[ModbusModule.Point++];
   ModbusModule.TxLen--;
   ModbusModule.Status = SEND_START;
   break;
  case SEND_START ://3
   asm(" nop");
   break;
  case SEND_END ://4
   if (ModbusModule.TimeoutReg>=10){  //超時10ms
    ModbusModule.ReTryTime++;
    ModbusModule.TimeoutReg=0;
    InitSci_B();
   }
   break;
  case RECE_START ://1
   if (ModbusModule.TimeoutReg>=5){  //接收幀結束
    ModbusModule.Status = RECE_END;
   }
   break;
  case RECE_END ://2
   if ( RTUSlaveFrameAnalyse(&REDate[0][0])==0 ){//幀解析正確
    ModbusModule.Status =IDLE_WAIT;
   }else{          //幀解析不正確
    ModbusModule.Status =SEND_END;
   }
   break;

}
}
#endif
//---------------------------------------------------------------------------
//     END
//---------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99国内精品| 一本在线高清不卡dvd| 久久久欧美精品sm网站| 国产成人自拍在线| 中文字幕av一区二区三区免费看 | 欧美一区二区视频在线观看2022| 日av在线不卡| 久久综合色播五月| 国产1区2区3区精品美女| 亚洲欧洲韩国日本视频| 在线免费精品视频| 欧美96一区二区免费视频| 久久久国际精品| 99久久综合国产精品| 亚洲国产一区二区在线播放| 日韩欧美黄色影院| 国产不卡在线播放| 一区二区三区四区国产精品| 91.麻豆视频| 国产精品自在欧美一区| 最新不卡av在线| 欧美二区三区91| 国产精品伊人色| 亚洲综合小说图片| 欧美电影精品一区二区| 99久久99精品久久久久久| 亚洲综合一二三区| 久久嫩草精品久久久久| 色婷婷久久综合| 久久精品国产免费看久久精品| 国产精品久久久久毛片软件| 欧美人牲a欧美精品| 国产在线播放一区三区四| 亚洲色欲色欲www在线观看| 8v天堂国产在线一区二区| 国产精品亚洲人在线观看| 亚洲精品视频一区二区| 精品国产免费人成在线观看| 91亚洲大成网污www| 日本不卡不码高清免费观看| 国产精品久久影院| 3d成人动漫网站| www.欧美精品一二区| 日韩黄色一级片| 亚洲欧美综合在线精品| 日韩视频一区在线观看| 91视频在线看| 精品亚洲国产成人av制服丝袜 | 99久久婷婷国产综合精品电影| 丝袜美腿高跟呻吟高潮一区| 欧美激情资源网| 欧美一区二区三区在线视频| 91在线免费播放| 久久www免费人成看片高清| 亚洲激情自拍偷拍| 国产欧美日韩另类视频免费观看| 欧美日韩大陆一区二区| aaa亚洲精品| 久久99国产精品尤物| 亚洲国产综合色| 亚洲欧美一区二区在线观看| 日韩美女视频在线| 在线亚洲+欧美+日本专区| 国产精品综合久久| 秋霞午夜av一区二区三区| 亚洲精品福利视频网站| 国产精品视频你懂的| 精品欧美乱码久久久久久1区2区| 欧美性一级生活| 成人三级伦理片| 精品系列免费在线观看| 婷婷六月综合亚洲| 亚洲精品欧美二区三区中文字幕| 久久免费偷拍视频| 67194成人在线观看| 色域天天综合网| 成人精品国产福利| 加勒比av一区二区| 天天综合天天综合色| 亚洲男人电影天堂| 亚洲国产精品av| 久久综合视频网| 日韩你懂的在线观看| 在线观看91av| 欧美综合一区二区| 色呦呦国产精品| av成人老司机| 波波电影院一区二区三区| 国产一区二区调教| 麻豆一区二区三区| 日本成人在线电影网| 亚洲成人av一区二区三区| 一区二区三区四区亚洲| 亚洲免费在线视频一区 二区| 日本一区二区三区在线不卡| 久久精品视频在线免费观看| 精品va天堂亚洲国产| 欧美成人三级在线| 欧美电影免费观看高清完整版在| 欧美一卡二卡三卡| 91麻豆精品国产综合久久久久久| 7878成人国产在线观看| 3d成人h动漫网站入口| 4438x亚洲最大成人网| 欧美二区三区的天堂| 337p亚洲精品色噜噜狠狠| 制服丝袜成人动漫| 欧美一级夜夜爽| 欧美一级xxx| 日韩精品影音先锋| 26uuu成人网一区二区三区| 欧美精品一区二区三区在线播放| 久久网站最新地址| 国产亚洲欧美一级| 国产精品伦理一区二区| 中文字幕在线不卡| 亚洲九九爱视频| 亚洲一二三四在线观看| 午夜精品久久久久久久久久| 免费在线观看一区| 精品无人码麻豆乱码1区2区 | 国产精品三级在线观看| 国产精品五月天| 国产精品不卡一区| 亚洲精品乱码久久久久久| 亚洲一区二区三区四区在线免费观看 | av电影一区二区| 日本韩国一区二区三区| 欧美色图免费看| 91精品国产综合久久福利| 日韩视频123| 久久女同互慰一区二区三区| 中文字幕一区二区在线观看| 亚洲综合在线第一页| 日产国产高清一区二区三区 | 蜜臀av国产精品久久久久| 九一久久久久久| 国产91丝袜在线播放| 99久久精品国产观看| 在线观看日韩高清av| 日韩一级二级三级| 欧美国产日韩一二三区| 亚洲免费成人av| 蜜臀精品久久久久久蜜臀| 国产二区国产一区在线观看| 91在线国内视频| 欧美一级高清大全免费观看| 日本一区二区三区四区| 亚洲精品成a人| 麻豆精品在线视频| proumb性欧美在线观看| 欧美日韩高清一区二区三区| 26uuu色噜噜精品一区二区| 亚洲视频图片小说| 日韩精品福利网| 国产98色在线|日韩| 欧美日韩亚洲高清一区二区| 久久精品亚洲国产奇米99| 亚洲男女毛片无遮挡| 青娱乐精品视频在线| 不卡影院免费观看| 制服丝袜亚洲精品中文字幕| 国产精品丝袜在线| 肉肉av福利一精品导航| 国产成人综合在线| 欧美日本乱大交xxxxx| 国产欧美一区二区在线| 亚洲国产精品麻豆| 国产精品白丝av| 精品视频在线免费观看| 国产日韩欧美在线一区| 亚洲高清不卡在线观看| 国产精品亚洲午夜一区二区三区 | 日韩激情视频在线观看| 成人国产电影网| 91精品国模一区二区三区| 国产欧美日韩视频在线观看| 亚洲成人激情综合网| 不卡视频在线观看| 日韩精品一区二区三区四区| 亚洲免费资源在线播放| 国产一区在线不卡| 欧美日韩成人高清| 成人免费在线视频观看| 久久精品国产精品亚洲精品| 在线影视一区二区三区| 亚洲国产精品二十页| 蜜桃视频一区二区三区在线观看| 91麻豆产精品久久久久久| 精品国产乱码91久久久久久网站| 夜夜嗨av一区二区三区网页| 国产成人啪午夜精品网站男同| 欧美裸体一区二区三区| 最近日韩中文字幕| 国产精品一二三四区| 日韩一级欧美一级| 亚洲成人自拍网| 一本在线高清不卡dvd| 国产精品美女久久久久av爽李琼 | 欧美国产97人人爽人人喊|