版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Modbus-RTU和Modbus-TCP協(xié)議模板(C語言)編制僅供參考審核批準(zhǔn)生效日期地址: 電話:傳真: 郵編:Modbus-RTU和Modbus-TCP協(xié)議模板(C語言)目錄 TOC o 1-3 h z u HYPERLINK l _Toc6231189 簡(jiǎn)介: PAGEREF _Toc6231189 h 2 HYPERLINK l _Toc6231190 Modbus-RTU簡(jiǎn)介: PAGEREF _Toc6231190 h 2 HYPERLINK l _Toc6231191 Modbus-TCP簡(jiǎn)介: PAGEREF _Toc6231191 h 3 HYPERLINK l _Toc6
2、231192 System.h: PAGEREF _Toc6231192 h 4 HYPERLINK l _Toc6231193 CRC_Check.h PAGEREF _Toc6231193 h 5 HYPERLINK l _Toc6231194 CRC_Check.c PAGEREF _Toc6231194 h 5 HYPERLINK l _Toc6231195 Modbus_RTU.h PAGEREF _Toc6231195 h 8 HYPERLINK l _Toc6231196 Modbus_RTU.c PAGEREF _Toc6231196 h 10 HYPERLINK l _Toc
3、6231197 Modbus_TCP.h PAGEREF _Toc6231197 h 27 HYPERLINK l _Toc6231198 Modbus_TCP.c PAGEREF _Toc6231198 h 27簡(jiǎn)介:在單片機(jī)內(nèi)部實(shí)現(xiàn)modbus協(xié)議,可以簡(jiǎn)單地將變量的值映射到modbus寄存器地址,這種方法是高效的,但是有以下缺點(diǎn):1、通常不支持一條指令操作多個(gè)變量(寄存器);2、可移植性較差。本模板使用8位數(shù)組模擬modbus寄存器。06,10指令均對(duì)數(shù)組進(jìn)行寫操作,同時(shí)記錄寄存器的寫入操作,在其他地方定時(shí)判斷“寫入標(biāo)志”,將“寫入標(biāo)志”置位的“模擬寄存器”的值轉(zhuǎn)移到相關(guān)變量,或進(jìn)行其他
4、操作。03指令讀取最新數(shù)據(jù),要求定時(shí)將變量的值寫入“模擬寄存器”。本模板缺點(diǎn)是占用資源較多、效率較低,優(yōu)點(diǎn)是完整支持了modbus的03,06,10指令。Modbus-RTU簡(jiǎn)介:1、Modbus讀寄存器指令(0 x03)地址(1B) +功能碼(1B) +起始地址(2B) +寄存器數(shù)量(2B) +CRC(2B)返回:地址(1B) +功能碼(1B) +字節(jié)數(shù)(1B) +數(shù)據(jù)值(2*“寄存器數(shù)量” Bytes或者“字節(jié)數(shù)”) +CRC(2B)2、Modbus寫單個(gè)寄存器指令(0 x06)地址(1B)+功能碼(1B)+寄存器地址(2B)+數(shù)據(jù)值(2B)+CRC(2B)返回:地址(1B)+功能碼(1B
5、)+寄存器地址(2B)+數(shù)據(jù)值(2B)+CRC(2B) (返回與發(fā)送的指令相同)3、Modbus寫多個(gè)寄存器指令(0 x10)地址(1B) +功能碼(1B) +起始地址(2B) +寫寄存器數(shù)量(2B n) +字節(jié)計(jì)數(shù)(1B n*2) +數(shù)據(jù)(n*2 B) +CRC(2B)返回:地址(1B) +功能碼(1B) +起始地址(2B) +寫寄存器數(shù)量(2B) +CRC(2B)Modbus-TCP簡(jiǎn)介:在MODBUS-RTU前添加6個(gè)字節(jié),并刪除MODBUS-RTU的CRC校驗(yàn)。示例指令:0051 0000 0009 01 10 0001 0001 02 00 00 6個(gè)字節(jié)部分稱為“MBAP報(bào)文頭”示
6、例:0051 0000 00090051 是客戶端發(fā)出的校驗(yàn)信息,服務(wù)端原內(nèi)容返回即可0000 表示modbus-tcp協(xié)議0009 表示后面還有9個(gè)字節(jié)后面部分:01 10 0001 0001 02 00 00 01 設(shè)備地址10 表示10指令0001 起始地址0001 寫寄存器數(shù)量02 字節(jié)計(jì)數(shù)00 00 數(shù)據(jù)響應(yīng)指令:0051 0000 0006 01 10 0001 0001System.h:#ifndef _SYSTEM_H_#define _SYSTEM_H_#include stm32f10 x.h/= 不常改動(dòng)項(xiàng) =/* stm32f10 x.h 第505、506、507行已經(jīng)
7、定義了u32,u16和u8 */typedef unsigned char u8;/typedef unsigned short int u16;/typedef unsigned int u32;/typedef unsigned char INT8U;/typedef unsigned short int INT16U;/typedef unsigned int INT32U;/typedef signed char int8_t;/typedef signed short int int16_t;/typedef signed int int32_t;/typedef signed lo
8、ng long int int64_ttypedef unsigned long long int u64;typedef unsigned char bool_t;#define FALSE 0#define TRUE !FALSE#define NULL 0#endifCRC_Check.h#ifndef _CRC_CHECK_H_#define _CRC_CHECK_H_#include system.hu16 CRC16_Verify(u8 *puchMsg,u16 usDataLen);#endifCRC_Check.c#include CRC_Check.h/* 高位表*/stat
9、ic const u8 auchCRCHi = 0 x00,0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40,0 x01, 0 xC0, 0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80,0 x41, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40,
10、 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0,0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00,0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x00, 0 xC1, 0 x81, 0 x40,0 x01, 0 xC0, 0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0
11、 x40, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x01, 0 xC0, 0 x80,0 x41, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x01, 0 xC0,0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x00,0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x
12、80, 0 x41, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40,0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80,0 x41, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0,0 x80, 0 x41, 0 x01, 0 xC0
13、, 0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00,0 xC1, 0 x81, 0 x40, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40,0 x01, 0 xC0, 0 x80, 0 x41, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80,0 x41, 0 x00,
14、0 xC1, 0 x81, 0 x40, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x01, 0 xC0,0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00,0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40 ;/
15、* 低位表*/static const u8 auchCRCLo = 0 x00,0 xC0, 0 xC1, 0 x01, 0 xC3, 0 x03, 0 x02, 0 xC2, 0 xC6, 0 x06, 0 x07, 0 xC7, 0 x05, 0 xC5, 0 xC4, 0 x04,0 xCC, 0 x0C, 0 x0D, 0 xCD, 0 x0F, 0 xCF, 0 xCE, 0 x0E, 0 x0A, 0 xCA, 0 xCB, 0 x0B, 0 xC9, 0 x09, 0 x08,0 xC8, 0 xD8, 0 x18, 0 x19, 0 xD9, 0 x1B, 0 xDB, 0
16、xDA, 0 x1A, 0 x1E, 0 xDE, 0 xDF, 0 x1F, 0 xDD, 0 x1D,0 x1C, 0 xDC, 0 x14, 0 xD4, 0 xD5, 0 x15, 0 xD7, 0 x17, 0 x16, 0 xD6, 0 xD2, 0 x12, 0 x13, 0 xD3, 0 x11,0 xD1, 0 xD0, 0 x10, 0 xF0, 0 x30, 0 x31, 0 xF1, 0 x33, 0 xF3, 0 xF2, 0 x32, 0 x36, 0 xF6, 0 xF7, 0 x37,0 xF5, 0 x35, 0 x34, 0 xF4, 0 x3C, 0 xF
17、C, 0 xFD, 0 x3D, 0 xFF, 0 x3F, 0 x3E, 0 xFE, 0 xFA, 0 x3A, 0 x3B,0 xFB, 0 x39, 0 xF9, 0 xF8, 0 x38, 0 x28, 0 xE8, 0 xE9, 0 x29, 0 xEB, 0 x2B, 0 x2A, 0 xEA, 0 xEE, 0 x2E,0 x2F, 0 xEF, 0 x2D, 0 xED, 0 xEC, 0 x2C, 0 xE4, 0 x24, 0 x25, 0 xE5, 0 x27, 0 xE7, 0 xE6, 0 x26, 0 x22,0 xE2, 0 xE3, 0 x23, 0 xE1,
18、 0 x21, 0 x20, 0 xE0, 0 xA0, 0 x60, 0 x61, 0 xA1, 0 x63, 0 xA3, 0 xA2, 0 x62,0 x66, 0 xA6, 0 xA7, 0 x67, 0 xA5, 0 x65, 0 x64, 0 xA4, 0 x6C, 0 xAC, 0 xAD, 0 x6D, 0 xAF, 0 x6F, 0 x6E,0 xAE, 0 xAA, 0 x6A, 0 x6B, 0 xAB, 0 x69, 0 xA9, 0 xA8, 0 x68, 0 x78, 0 xB8, 0 xB9, 0 x79, 0 xBB, 0 x7B,0 x7A, 0 xBA, 0
19、 xBE, 0 x7E, 0 x7F, 0 xBF, 0 x7D, 0 xBD, 0 xBC, 0 x7C, 0 xB4, 0 x74, 0 x75, 0 xB5, 0 x77,0 xB7, 0 xB6, 0 x76, 0 x72, 0 xB2, 0 xB3, 0 x73, 0 xB1, 0 x71, 0 x70, 0 xB0, 0 x50, 0 x90, 0 x91, 0 x51,0 x93, 0 x53, 0 x52, 0 x92, 0 x96, 0 x56, 0 x57, 0 x97, 0 x55, 0 x95, 0 x94, 0 x54, 0 x9C, 0 x5C, 0 x5D,0 x
20、9D, 0 x5F, 0 x9F, 0 x9E, 0 x5E, 0 x5A, 0 x9A, 0 x9B, 0 x5B, 0 x99, 0 x59, 0 x58, 0 x98, 0 x88, 0 x48,0 x49, 0 x89, 0 x4B, 0 x8B, 0 x8A, 0 x4A, 0 x4E, 0 x8E, 0 x8F, 0 x4F, 0 x8D, 0 x4D, 0 x4C, 0 x8C, 0 x44,0 x84, 0 x85, 0 x45, 0 x87, 0 x47, 0 x46, 0 x86, 0 x82, 0 x42, 0 x43, 0 x83, 0 x41, 0 x81, 0 x8
21、0, 0 x40;/* 16位CRC校驗(yàn)函數(shù),查表法*/u16 CRC16_Verify(u8 *puchMsg,u16 usDataLen) u8 uchCRCHi = 0 xFF ; u8 uchCRCLo = 0 xFF ; u16 uIndex ; while (usDataLen-) uIndex = uchCRCHi *puchMsg+ ; uchCRCHi = uchCRCLo auchCRCHiuIndex ;uchCRCLo = auchCRCLouIndex ;/return (u16)(uchCRCLo) 8) | uchCRCHi) ;return (u16)(uchC
22、RCHi) = MODBUS_BUFFER_LEN/2) return 0; for(i=start; i=end; i+) if(Modbus_WRecordi/8 & (u8)1= MODBUS_BUFFER_LEN/2) return; if(sta) for(i=start; i=end; i+) Modbus_WRecordi/8 |= (u8)1(i%8); else for(i=start; i=end; i+) Modbus_WRecordi/8 &= (u8)1 MODBUS_BUFFER_LEN) return 0; p_data = Modbus_Buffer + add
23、r; for(i=0; i MODBUS_BUFFER_LEN) return 0; p_save = Modbus_Buffer + addr; for(i=0; ilength; i+) p_savei = bufferi; return 1;/* 16位變量存儲(chǔ)順序轉(zhuǎn)換*/u16 Modbus_16BitsSwapEndian(u16 num) if(Modbus_Swap_Endian) return num8; else return num;/* 32位變量存儲(chǔ)順序轉(zhuǎn)換*/typedef union char arr4; int32_t int32; float f;MODBUS_
24、UNION32;u32 Modbus_32BitsSwapEndian(u32 num) u8 temp; MODBUS_UNION32 res; if(Modbus_Swap_Endian) 32 = num; temp = res.arr0; res.arr0 = res.arr3; res.arr3 = temp; temp = res.arr1; res.arr1 = res.arr2; res.arr2 = temp; return 32; else return num;/* 64位變量存儲(chǔ)順序轉(zhuǎn)換*/typedef union char arr8; i
25、nt64_t int64; double df;MODBUS_UNION64;u64 Modbus_64BitsSwapEndian(u64 num) u8 temp; MODBUS_UNION64 res; if(Modbus_Swap_Endian) 64 = num; temp = res.arr0; res.arr0 = res.arr7; res.arr7 = temp; temp = res.arr1; res.arr1 = res.arr6; res.arr6 = temp; temp = res.arr2; res.arr2 = res.arr5; res.arr
26、5 = temp; temp = res.arr3; res.arr3 = res.arr4; res.arr4 = temp; return 64; else return num;/* 檢查Modbus_RTU數(shù)據(jù)幀* 返回0:不通過* 返回1:發(fā)往本機(jī)的數(shù)據(jù)* 返回2:廣播數(shù)據(jù)*/u8 Modbus_RTU_Check_Frame(u8 *string) u8 res = 0; if(string0=Modbus_Addr | string0=0 x00); else return 0; if(string1=0 x03 | string1=0 x06) if(CRC16_
27、Verify(string,8) != 0) return 0; else if(string1 = 0 x10) if(string4 != 0) return 0; if(string5*2 != string6) return 0; if(CRC16_Verify(string,string6+9) != 0) return 0; if(string0 = 0 x00) res = 2; else res = 1; return res;/* 解析03H指令,讀寄存器*/void Modbus_RTU_03H(u8 *rBuf,void(*Send_Function)(u8 *strin
28、g,u16 x) u16 index; /寄存器索引 u16 cmd_num; /待操作寄存器的數(shù)量 u16 bytes; /字節(jié)數(shù) u16 crc; /crc校驗(yàn) index = rBuf28 | rBuf3; if(index Modbus_Start_Addr) return; /地址過小 cmd_num = rBuf48; Modbus_sBuf4+bytes = crc; Send_Function(Modbus_sBuf,5+bytes); /* 解析06H指令,寫單個(gè)寄存器*/void Modbus_RTU_06H(u8 *rBuf,void(*Send_Function)(u8
29、 *string,u16 x) u16 index; /寄存器索引 u16 cmd_num; /待操作寄存器的數(shù)量 u16 crc; /crc校驗(yàn) index = rBuf28 | rBuf3; if(index 8; Modbus_sBuf7 = crc; Send_Function(Modbus_sBuf,8); /* 解析10H指令,寫多個(gè)寄存器*/void Modbus_RTU_10H(u8 *rBuf,void(*Send_Function)(u8 *string,u16 x) u16 index; /寄存器索引 u16 cmd_num; /待操作寄存器的數(shù)量 u16 crc; /c
30、rc校驗(yàn) index = rBuf28 | rBuf3; if(index Modbus_Start_Addr) return; /地址過小 cmd_num = rBuf48; Modbus_sBuf7 = crc; Send_Function(Modbus_sBuf,8); /* MODBUS-RTU協(xié)議處理程序*/u8 Modbus_RTU_Handler(u8 *rBuf,void(*Send_Function)(u8 *string,u16 x) u8 res = 0; if(Modbus_RTU_Check_Frame(rBuf) != 0) /0=不通過,1=本機(jī)幀,2=廣播幀 r
31、es = 1; switch(rBuf1) case 0 x03: Modbus_RTU_03H(rBuf,Send_Function); break; case 0 x06: Modbus_RTU_06H(rBuf,Send_Function); break; case 0 x10: Modbus_RTU_10H(rBuf,Send_Function); break; default: res = 0; break; return res;/* modbus初始化*/void Modbus_Init(void) u16 i; for(i=0; iMODBUS_BUFFER_LEN; i+)
32、Modbus_Bufferi = 0; for(i=0; iMODBUS_BUFFER_LEN/16 +1; i+) Modbus_WRecordi = 0; /* 使用示例* 大端模式(51單片機(jī)),可直接賦值;* 小端模式(STM32),需轉(zhuǎn)換變量存儲(chǔ)順序。*/可重定義寄存器的變量u8 *numA1H = (u8 *)(u16 *)Modbus_Buffer+0);u8 *numA1L = (u8 *)(u16 *)Modbus_Buffer+0)+1; /此處的0=寄存器序號(hào)(16位),此處的1表示轉(zhuǎn)換成(u8 *)數(shù)組后,往后偏移一個(gè)序號(hào)。u16 *numA2 = (u16 *)(u1
33、6 *)Modbus_Buffer+1);u32 *numA3 = (u32 *)(u16 *)Modbus_Buffer+2);/固定寄存器的變量#define numB1H *(u8 *)(u16 *)Modbus_Buffer+4)#define numB1L *(u8 *)(u16 *)Modbus_Buffer+4)+1)#define numB2 *(u16 *)(u16 *)Modbus_Buffer+5)#define numB3 *(u32 *)(u16 *)Modbus_Buffer+6)/固定寄存器的數(shù)組(注意x的范圍,避免越界)#define numC1(x) *(u8
34、 *)(u16 *)Modbus_Buffer+x/2+8)+x%2)#define numC2(x) *(u16 *)(u16 *)Modbus_Buffer+x+9)#define numC3(x) *(u32 *)(u16 *)Modbus_Buffer+x*2+11)void Modbus_Example(void) *numA1H = 0 x01; *numA1L = 0 x02; *numA2 = Modbus_16BitsSwapEndian(0 x0304); *numA3 = Modbus_32BitsSwapEndian(0 x05060708); numB1H = 0 x
35、11; numB1L = 0 x12; numB2 = Modbus_16BitsSwapEndian(0 x1314); numB3 = Modbus_32BitsSwapEndian(0 x15161718); numC1(0) = 0 x21; numC1(1) = 0 x22; numC2(0) = Modbus_16BitsSwapEndian(0 x2324); numC2(1) = Modbus_16BitsSwapEndian(0 x2526); numC3(0) = Modbus_32BitsSwapEndian(0 x2728292A); numC3(1) = Modbus
36、_32BitsSwapEndian(0 x2B2C2D2E); numC3(2) = Modbus_32BitsSwapEndian(0 x2F303132); /* * 讀取測(cè)試,51單片機(jī)時(shí)SWAP_ENDIAN_EN=0,STM32時(shí)SWAP_ENDIAN_EN=1。 * 01 03 00 00 00 11 85 C6 * 01 03 22 01 02 03 04 05 06 07 08 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 6D 3B */* 示例函數(shù):判斷modbus
37、寫入操作。*/#if REC_WRITEvoid Modbus_WRecod_Example(void) if(Modbus_Read_WRecord(4,1) Modbus_Write_WRecord(4,1,0); /清除寫入狀態(tài) #endifModbus_TCP.h#ifndef _MODBUS_TCP_H_#define _MODBUS_TCP_H_#include system.hu8 Modbus_TCP_Handler(u8 *rBuf,void(*Send_Function)(u8 *string,u16 x);#endifModbus_TCP.c#include Modbus
38、_TCP.h#include Modbus_RTU.h /* 需要和Modbus_RTU配合使用 */#define Modbus_TCP_Addr 1 /modbus地址??梢远x為在其他地方定義的地址,例如save.localAddr。/* 檢查Modbus_TCP數(shù)據(jù)幀* 返回0:不通過* 返回1:發(fā)往本機(jī)的數(shù)據(jù)* 返回2:廣播數(shù)據(jù)*/u8 Modbus_TCP_Check_Frame(u8 *string) u8 res = 0; u16 bytes; if(string2=0 x00 & string3=0 x00); else return 0; /檢查是否為modbus-tcp協(xié)
39、議。 if(string6=Modbus_TCP_Addr | string6=0 x00); else return 0; /檢查地址 bytes = string48 | string5; if(string7 = 0 x03) if(bytes != 6) return 0; else if(string7 = 0 x06) if(bytes != 6) return 0; else if(string7 = 0 x10) if(bytes-7 != (string108 | string11)*2) return 0; if(string11*2 != string12) return
40、 0; else return 0; if(string6 = 0 x00) res = 2; else res = 1; return res;/* 解析03H指令,讀寄存器*/void Modbus_TCP_03H(u8 *rBuf,void(*Send_Function)(u8 *string,u16 x) u16 index; /寄存器索引 u16 cmd_num; /待操作寄存器的數(shù)量 u16 bytes; /字節(jié)數(shù) index = rBuf88 | rBuf9; if(index Modbus_Start_Addr) return; /地址過小 cmd_num = rBuf108;
41、 Modbus_sBuf5 = bytes; bytes = cmd_num *2; Modbus_sBuf6 = Modbus_TCP_Addr; Modbus_sBuf7 = rBuf7; Modbus_sBuf8 = bytes; Send_Function(Modbus_sBuf,9+bytes); /* 解析06H指令,寫單個(gè)寄存器*/void Modbus_TCP_06H(u8 *rBuf,void(*Send_Function)(u8 *string,u16 x) u16 index; /寄存器索引 u16 cmd_num; /待操作寄存器的數(shù)量 index = rBuf88 |
42、 rBuf9; if(index Modbus_Start_Addr) return; /地址過小 cmd_num = 1; /將數(shù)據(jù)寫入modbus緩存。注:TCP_06指令數(shù)據(jù)位從10開始 if(Modbus_Write_Buffer(rBuf+10,(index-Modbus_Start_Addr)*2,cmd_num*2) #if REC_WRITE /= 記錄寫入操作 = Modbus_Write_WRecord(index-Modbus_Start_Addr,cmd_num,1); #endif if(rBuf6 != 0) /本語句存在時(shí),不響應(yīng)廣播幀(地址0);屏蔽后,響應(yīng)廣播幀。 /= 返回指令 = Modbus_sBuf0 = rBuf0; Modbus_sBuf1 = rBuf1; Modbus_s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《密封件基礎(chǔ)知識(shí)》課件
- 2024年貴州建設(shè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫標(biāo)準(zhǔn)卷
- 單位管理制度集合大全人事管理十篇
- 單位管理制度匯編大全人事管理
- 單位管理制度合并匯編【人員管理】
- 單位管理制度呈現(xiàn)匯編職工管理篇十篇
- 單位管理制度呈現(xiàn)大全人員管理
- 《礦山勞動(dòng)衛(wèi)生》課件
- 《生活中的問題》課件
- 《安全防護(hù)欄標(biāo)準(zhǔn)》課件
- 銅工崗位安全操作規(guī)程(2篇)
- 擦玻璃安全責(zé)任合同協(xié)議書范本
- 2024-2025學(xué)年人教PEP版英語五年級(jí)上冊(cè)期末試題
- 2019水電工程探地雷達(dá)探測(cè)技術(shù)規(guī)程
- 殘疾兒童(孤獨(dú)癥)康復(fù)服務(wù)機(jī)構(gòu)采購(gòu)項(xiàng)目招標(biāo)文件
- 室內(nèi)墻地磚鋪貼施工技術(shù)交底
- 少先隊(duì)活動(dòng)課《民族團(tuán)結(jié)一家親-同心共筑中國(guó)夢(mèng)》課件
- 廣西河池市2023-2024學(xué)年七年級(jí)上學(xué)期語文期末試卷(含答案)
- 江蘇省蘇州市(2024年-2025年小學(xué)五年級(jí)語文)統(tǒng)編版期末考試((上下)學(xué)期)試卷及答案
- 供應(yīng)鏈年終總結(jié)報(bào)告
- 體育訓(xùn)練服務(wù)行業(yè)市場(chǎng)調(diào)研分析報(bào)告
評(píng)論
0/150
提交評(píng)論