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

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

?? modbus.txt

?? MODBUS代碼
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
//---------------------------------------------------------------------------
// FILE: ModbusRTU.c
// 程序分兩部分:串口操作:中斷接收和發送,采用緩沖區發送
//    協議處理:分主戰和從站兩部分,具體的站需要宏定義指定。
//---------------------------------------------------------------------------
//  Ver | dd mmm yyyy | Who  | Description of changes
// =====|=============|======|===============================================
//  1.00| 2 Nov 2007 | WXJ  |  start version--03,16兩命令分別讀寫內部寄存器
//
//
//
//---------------------------------------------------------------------------
// Load DSP lib
#i nclude "DSP281x_Device.h"
#i nclude "DSP281x_Examples.h"  
// Load system lib
#i nclude "EBC_Universal.H"
//------------MODBUS CMD-----------------------
#define READ_N_COIL      01 
#define READ_N_DI        02 
#define READ_HLD_REG    03 
#define READ_AI         04 
#define SET_1_COIL       05 
#define SET_1_HLD_REG    06 
#define SET_N_COIL       15
#define SET_N_HLD_REG  16
//------------UART_MODULE.Status---------------
#define IDLE_WAIT       0x00        // 空閑態,等待起始位
#define RECE_START       0x01        // 收到起始位,等待結束位
#define RECE_END         0x02        // 收到結束位,等待發送
#define SEND_START       0x03        // 發送起始位
#define SEND_END        0x04        // 發送完畢
#define SEND_EXCHANGE  0x05  // 發送內容切換(讀/寫,站1/站2)
//------------主從站協議選擇-------------------
#ifdef DSP_EXT
#define MODBUS_SLAVE 
#else
#define MODBUS_MASTER
#endif
//---------------------------------------------
//[i][j]:i--(從站號-1);j--對應從站號通訊起始地址的偏移量
Uint16 WRData[2][100];     //從站1(HMI):500-599; 從站2(DSP2):600-699  
Uint16 REData[2][100];     //從站1(HMI):700-799; 從站2(DSP2):800-899 
Uint16 REDate[2][100];     //從站1(HMI):700-799; 從站2(DSP2):800-899 
Uint16 WRBit[2][20];     //從站1(HMI):000-320; 從站2
Uint16 REBit[2][20];     //從站1(HMI):400-720; 從站2
volatile struct MODBUS_MODULE ModbusModule;
//---------------------------------------------
void ConfigureModbus(void);
Uint16 RTUFrameAnalyse(Uint16  *dest_p);
void  ConstructFrame_RTUReadHldReg( Uint16 board_adr,Uint16 start_address,Uint16 lenth);
void  ConstructFrame_RTUReadNCoil( Uint16 board_adr,Uint16 start_address,Uint16 lenth); 
void  ConstructFrame_RTUSetNHldReg( Uint16 board_adr,Uint16 *com_buf,Uint16 start_address,Uint16 lenth);
void  ConstructFrame_RTUSetNCoil( Uint16 board_adr,Uint16 *com_buf,Uint16 start_address,Uint16 lenth);  
//---------------------------------------------
//  程序第一部分:串口程序
// 串口初始化
// 串口收發數據
//---------------------------------------------
#pragma CODE_SECTION(ScibRxInt, "ramfuncs");
#pragma CODE_SECTION(ScibTxInt, "ramfuncs");
//---------------------------------------------
//---------------------------------------------
void ConfigureModbus (void)
{
Uint16 i;

for(i=0;i<100;i++){
  WRData[0][i]=0;
  WRData[1][i]=0;
  REData[0][i]=0;
  REData[1][i]=0;
  REDate[0][i]=0;
  REDate[1][i]=0;
}
for(i=0;i<20;i++){
  WRBit[0][i]=0;
  REBit[0][i]=0;
  WRBit[1][i]=0;
  REBit[1][i]=0;
}
    for( i = 0;i < 256 ;i++ )
    {
        ModbusModule.Buf[i] = 0;
    }
    ModbusModule.TxLen  = 0;
    ModbusModule.RxLen  = 0; 
    ModbusModule.Point  = 0;
ModbusModule.ReTryTime =0;
ModbusModule.TimeoutReg =0;
ModbusModule.Tbl_SET1 =0;
ModbusModule.Tbl_READ1 =0;
ModbusModule.Tbl_SET2 =0;
ModbusModule.Tbl_READ2 =0;
ModbusModule.Tbl_COIL_SET1=0;
ModbusModule.Tbl_COIL_READ1=0;
#ifdef MODBUS_MASTER
ModbusModule.ID  = 1;
ModbusModule.FunCode= SET_N_COIL;
ModbusModule.RegAddr= 400;
ModbusModule.RegNum = 320;
    ModbusModule.Status = IDLE_WAIT;
#endif
#ifdef MODBUS_SLAVE
ModbusModule.ID  = 2;
ModbusModule.Status = SEND_END;
#endif

PieCtrlRegs.PIEIER9.bit.INTx3=1; //SCIRXINTB
    PieCtrlRegs.PIEIER9.bit.INTx4=1; //SCITXINTB
IER |= M_INT9;

}
//---------------------------------------------
//---------------------------------------------
interrupt void ScibTxInt (void)      // SCI-B
{
PieCtrlRegs.PIEACK.bit.ACK9 = 1;
if( ModbusModule.TxLen > 0 ){
            ScibRegs.SCITXBUF= ModbusModule.Buf[ModbusModule.Point++];
            ModbusModule.TxLen--;
//            ModbusModule.Point++;
//            ModbusModule.Point %= 128; //
}else{  //發送完畢
            ModbusModule.Status = SEND_END;   //狀態切換
   ModbusModule.Point=0;
   ModbusModule.TimeoutReg=0;
    }
}

//---------------------------------------------
// ScibRxInt MODBUS RTU
// 以兩字符時間停頓為3.5個字符時間
// 程序用5ms時間判斷 對應9600--5個字符時間
// 程序幀結束數據在主程序里面處理
//---------------------------------------------
interrupt void ScibRxInt (void)      // SCI-B
{
Uint16  temp;
PieCtrlRegs.PIEACK.bit.ACK9 = 1; //ACK復位
temp=ScibRegs.SCIRXBUF.all;

switch( ModbusModule.Status ){
  case SEND_END:      //4
   ModbusModule.Status = RECE_START;
   ModbusModule.Point=0;
  case RECE_START:     //1
   ModbusModule.Buf[ModbusModule.Point] = temp;
   ModbusModule.Point++;
   ModbusModule.RxLen = ModbusModule.Point;
   break;
}
ModbusModule.TimeoutReg=0;
}
//---------------------------------------------
//  程序第二部分:MODBUS 協議解析與構造
// CRC16
// 協議幀構造
// 協議幀解析
//---------------------------------------------
//---------------------------------------------
// CRC16 calculate
// <-Modbus Protocol English pdf 
// ptr calculate start point
// len calculate data length
//---------------------------------------------
Uint16 GetCRC16 (Uint16 volatile * ptr,Uint16 len) 
{ 
Uint16 i; 
    Uint16 crc=0xFFFF; 
    if(len==0){ 
     len=1; 
    }
    while(len--){   
  crc^=(*ptr); 
        for(i=0; i<8; i++){ 
            if(crc&1){ 
    crc>>=1;  
    crc^=0xA001; 
   }else{ 
    crc>>=1;
   }                            
     } 
        ptr++; 
    } 
    return(crc);
}
#ifdef MODBUS_MASTER
//---------------------------------------------
// RTU Read Hold Register
// CMD=03 READ_HLD_REG
// Constructe Frame 
//---------------------------------------------
void  ConstructFrame_RTUReadHldReg ( Uint16 board_adr,Uint16 start_address,Uint16 lenth)  
{ 
Uint16 i=0,j=0;
    
    ModbusModule.Buf[i++] = board_adr; 
    ModbusModule.Buf[i++] = READ_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 Coil Status
// CMD=01 READ_COIL_STATUS
// Constructe Frame 
//---------------------------------------------
void  ConstructFrame_RTUReadNCoil ( Uint16 board_adr,Uint16 start_address,Uint16 lenth)  
{
Uint16 i=0,j=0;
ModbusModule.Buf[i++] = board_adr; 
    ModbusModule.Buf[i++] = READ_N_COIL; 
    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 Set N Hold Register
// CMD=16 SET_N_HLD_REG
// Constructe Frame 
//---------------------------------------------
void  ConstructFrame_RTUSetNHldReg ( Uint16 board_adr,Uint16 *com_buf,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); 
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 Set N Coil Status
// CMD=16 SET_N_COIL_STATUS
// Constructe Frame 
//---------------------------------------------
void  ConstructFrame_RTUSetNCoil ( Uint16 board_adr,Uint16 *com_buf,Uint16 start_address,Uint16 lenth)  
{ 
Uint16 i=0,j=0,byte_num=0,word_num=0;

    ModbusModule.Buf[i++] = board_adr; 
    ModbusModule.Buf[i++] = SET_N_COIL; 
    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); 
byte_num     =(lenth+7)>>3;
word_num     =byte_num>>1;
ModbusModule.Buf[i++] = byte_num; 
for(j=0;j<word_num;j++){
  ModbusModule.Buf[i++] = WORD_LO( * (com_buf+j) );
  ModbusModule.Buf[i++] = WORD_HI( * (com_buf+j) );
}
if(byte_num&BIT0){
  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 站號不匹配 
//    3 功能碼不匹配
//    4 16回應地址不匹配
//    5 16回應數據字數不匹配
//---------------------------------------------
Uint16 RTUMasterFrameAnalyse (Uint16  *dest_p) 
{
Uint16 i;
Uint16 crc_result, crc_tmp;
Uint16 RegAddr,RegNum;
Uint16 rx_byte_num;

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;
}
switch (ModbusModule.FunCode){
  case READ_N_COIL: //1
   rx_byte_num=ModbusModule.Buf[2];
   for ( i=0; i<rx_byte_num; i+=2){ 
    *(dest_p + i/2) = ( ModbusModule.Buf[i+4]<<8 ) + ModbusModule.Buf[i+3];
        }
   if(rx_byte_num&BIT0){
    *(dest_p + i/2) &=0xFF00;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀91精品一区二区三区 | 秋霞av亚洲一区二区三| 亚洲日本乱码在线观看| 久久精品亚洲一区二区三区浴池| 偷拍日韩校园综合在线| 国产精品美女一区二区三区| 国产网站一区二区| 国产欧美日韩综合| 亚洲图片你懂的| 一区二区三区中文在线| 五月激情六月综合| 久久99国产精品尤物| 国产精品一二二区| eeuss鲁片一区二区三区| 91麻豆精东视频| 欧美日韩一区二区三区视频 | 亚洲bdsm女犯bdsm网站| 人妖欧美一区二区| 丰满少妇久久久久久久| 99re在线精品| 91精品欧美久久久久久动漫| 久久精品一区二区三区不卡牛牛| 欧美国产精品一区二区三区| 亚洲精品va在线观看| 青青草国产成人av片免费| 国产高清视频一区| 91亚洲精品乱码久久久久久蜜桃| 国产日产欧美一区| 国产香蕉久久精品综合网| 国产精品久久福利| 亚洲精品videosex极品| 蜜臀a∨国产成人精品| 99久久婷婷国产| 欧美一级欧美一级在线播放| 国产区在线观看成人精品| 亚洲香肠在线观看| 国产成人精品三级| 欧美日韩国产色站一区二区三区| 精品伦理精品一区| 亚洲影视在线播放| 国产激情91久久精品导航| 欧美色综合天天久久综合精品| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲综合无码一区二区| 国产福利视频一区二区三区| 51精品国自产在线| 一区二区三区精品在线| 国产精品一区二区你懂的| 宅男噜噜噜66一区二区66| 亚洲欧洲99久久| 高清日韩电视剧大全免费| 欧美一三区三区四区免费在线看| 亚洲欧洲中文日韩久久av乱码| 国产精品一区二区在线播放| 欧美一级在线免费| 香蕉乱码成人久久天堂爱免费| 99久精品国产| 国产精品网站在线播放| 国产一区二区在线看| 91精品国产综合久久福利软件 | 91精品国产91久久久久久一区二区 | 夜夜亚洲天天久久| 波多野结衣在线aⅴ中文字幕不卡| 欧美成人综合网站| 男女视频一区二区| 欧美一级视频精品观看| 日韩av一级电影| 欧美日精品一区视频| 亚洲一区二区影院| 在线观看日韩高清av| 有码一区二区三区| 欧美一a一片一级一片| 自拍偷在线精品自拍偷无码专区| 丁香桃色午夜亚洲一区二区三区| 国产欧美视频一区二区三区| 成人免费看片app下载| 国产精品网站在线观看| 不卡高清视频专区| 一区二区三区av电影| 欧美日韩精品一区二区在线播放| 午夜在线成人av| 日韩免费看的电影| 国产成人小视频| 亚洲日本韩国一区| 欧美日韩免费电影| 久久国产生活片100| 亚洲国产成人私人影院tom| 99久久精品国产一区二区三区| 亚洲精品v日韩精品| 91精品视频网| 国产91对白在线观看九色| 国产精品久久久久久久久果冻传媒| 91免费观看视频| 日韩精品一区第一页| 久久综合精品国产一区二区三区| 风间由美一区二区av101 | 国产在线视频一区二区三区| 国产日韩影视精品| 欧美亚洲国产bt| 国产一区欧美一区| 一区二区三区免费看视频| 日韩欧美你懂的| 北岛玲一区二区三区四区| 亚洲成a人在线观看| 久久夜色精品国产欧美乱极品| 91亚洲精华国产精华精华液| 蜜桃视频第一区免费观看| 亚洲国产精品t66y| 777欧美精品| 不卡在线观看av| 免费不卡在线观看| 综合欧美一区二区三区| 精品国产一区二区三区四区四 | 午夜欧美一区二区三区在线播放 | jlzzjlzz亚洲日本少妇| 全国精品久久少妇| 亚洲精品中文在线影院| 欧美刺激午夜性久久久久久久| 91视频免费看| 韩国中文字幕2020精品| 午夜激情一区二区| 最新日韩av在线| 久久天天做天天爱综合色| 欧美日韩一区二区三区四区五区 | 风间由美一区二区av101| 免费成人在线观看视频| 亚洲综合偷拍欧美一区色| 国产精品色噜噜| 欧美精品一区二区三区在线播放| 欧美日韩精品一区视频| 91免费看`日韩一区二区| 国产精品1区2区3区在线观看| 琪琪久久久久日韩精品| 亚洲va国产天堂va久久en| 一区二区三区四区中文字幕| 国产精品蜜臀av| 中文乱码免费一区二区| 国产亚洲污的网站| 精品人伦一区二区色婷婷| 欧美一区午夜视频在线观看| 欧美色综合久久| 欧美日韩成人综合| 欧美午夜不卡视频| 欧美在线观看一二区| 欧美亚洲动漫另类| 在线观看区一区二| 欧美系列日韩一区| 欧美乱妇一区二区三区不卡视频| 欧美性猛交xxxx乱大交退制版 | 久久精品二区亚洲w码| 免费看日韩a级影片| 久久精品国产精品亚洲红杏| 美女网站一区二区| 久久99国产精品成人| 国内久久婷婷综合| 国产成人av资源| 大胆欧美人体老妇| 91麻豆国产福利精品| 色视频欧美一区二区三区| 在线免费亚洲电影| 欧美卡1卡2卡| 精品久久久网站| 中文字幕免费一区| 亚洲欧美激情一区二区| 亚洲成人动漫av| 蓝色福利精品导航| 国产a区久久久| 91在线免费视频观看| 欧美在线免费视屏| 日韩欧美一二三四区| 久久久久久久久久久久电影| 亚洲欧美综合色| 亚洲国产美国国产综合一区二区| 奇米精品一区二区三区四区| 国内精品伊人久久久久av一坑| 国产成人av福利| 色视频一区二区| 精品剧情v国产在线观看在线| 欧美国产1区2区| 亚洲大片精品永久免费| 久草这里只有精品视频| 91在线看国产| 日韩欧美激情四射| 中文字幕一区在线| 日本不卡在线视频| www.日韩精品| 欧美成人一区二区三区片免费| 国产精品理论片| 亚洲h在线观看| 丁香激情综合五月| 欧美一区二区三区视频| 中文字幕一区在线观看视频| 日本少妇一区二区| 色偷偷久久人人79超碰人人澡 | 成人动漫精品一区二区| 欧美日韩一区二区三区四区五区 | 久久你懂得1024| 丝袜脚交一区二区| 色综合久久综合| 国产日韩精品一区二区浪潮av|