一、说明; L7 o/ I8 E+ b8 z, {& M& j4 }
1.移植的开发环境是keil5。0 e1 A2 X9 d4 }+ M( ?
2.基于rt-thread操作系统,也可以使用ucos和freeRTOS操作系统。* N* j8 j+ u& f. ?: r, P2 \- `
3.本人可有偿代移植其他操作系统,具体费用主页加我QQ联系。
6 `6 A2 w# b- K2 p( L4.页面底部有rt-thread操作系统移植成功的工程链接,大家可以参考。
% T3 z/ g7 o4 [1 |) S二、移植步骤2 C" {4 l" V A- _! G2 U+ A
由于移植过程比较繁琐,就不过多说明了,大家可以下载工程研究一下就行+ L( T2 ]5 i: g$ v) @( }" K
5 E3 P$ t: T0 U1 X8 R/ N" L三、特殊说明
^8 A$ t. U5 |1. 读取输入寄存器(功能04)
2 p$ V- o+ e% p0 s4 N) p使用函数:- /**
$ b$ C, \# l, n! O* e - * Modbus master input register callback function.7 q1 N6 ?/ y/ g U6 m" w o1 @* `
- *$ f) ?; |. `( r# X
- * @param pucRegBuffer input register buffer7 _0 S, @, G; }# c" V/ L
- * @param usAddress input register address( A0 [4 a! F# F9 ^. c- N
- * @param usNRegs input register number
. k$ C$ K0 @2 }& O8 R( w/ v- a - *9 [. U* Q8 {( d) t
- * @return result
+ v2 C' U: s4 X+ i2 p+ Q - */
6 m" W$ E4 o) w' W! X8 T - eMBErrorCode eMBMasterRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )
复制代码
U/ ^6 E+ x$ @" L! z* ]读取值存入变量:
9 _3 ^4 o( `: g, {/ \
. @" [- T$ B" T2 _- USHORT usMRegInBuf[MB_MASTER_TOTAL_SLAVE_NUM][M_REG_INPUT_NREGS];
复制代码 ! S& G8 ]& m5 N. F+ N( e( Y
2. 读取线圈(功能01)
& N/ \; f% }+ Y. m h使用函数:5 ~9 Z9 S, o4 C8 T) n" n9 W+ y
1 |7 Y1 S# ~( B* I
- /**9 M1 O0 L8 ?; b/ m
- * Modbus master coils callback function.' O* i' B: v3 B0 v! U
- *; ?* H$ ^; A' z
- * @param pucRegBuffer coils buffer
8 A4 R8 P" C; U5 K: v1 L - * @param usAddress coils address
' r& u* h2 K4 s( G, n. O - * @param usNCoils coils number
^; d4 b; [/ Z y, W. a2 F* v- r9 Z - * @param eMode read or write
8 E' k9 y$ u5 p- h - *
a; W" g6 J% F9 u2 Y" U - * @return result
+ o! k! v4 A6 ?8 ~" v: `' K - */
( B, ?0 t( Q+ w - eMBErrorCode eMBMasterRegCoilsCB(UCHAR * pucRegBuffer, USHORT usAddress,
2 ]2 A3 _6 d$ t S+ h' K - USHORT usNCoils, eMBRegisterMode eMode)
复制代码 % a1 w# \# j* L2 n
读取值存入变量:7 S+ S8 i4 e& J. ~* q
9 O* j. ^! J0 A4 y- ucMCoilBuf[MB_MASTER_TOTAL_SLAVE_NUM][M_COIL_NCOILS/8+1];
复制代码
+ ~, y" G. `: k3.读取保持寄存器(功能03)
, @( O6 K9 |* w: O) U% j+ F使用函数:
3 H# C2 w) h' ^! b. ~2 n6 x& ?; ^+ y. R8 F& m3 Q
- /*** m* C/ Y- [! z8 h( @: P8 ]( K
- * Modbus master holding register callback function.( q P8 Q& b- K) I- H; L' _) @
- *
/ b. @& n6 W X2 f. k9 \ - * @param pucRegBuffer holding register buffer
1 d" Z" H% ]3 } - * @param usAddress holding register address. e4 {1 |9 ?5 n
- * @param usNRegs holding register number
, ]$ |! L4 J/ I- @* R- G' N( g+ p - * @param eMode read or write! _# @: e2 P8 j% K
- *
) Y+ S* r9 c6 F( f* b - * @return result
' t% j1 l# j! [ K3 [1 }& U - */( _: w! ^4 @3 ?! l
- eMBErrorCode eMBMasterRegHoldingCB(UCHAR * pucRegBuffer, USHORT usAddress,9 o$ O; i6 {( D& D6 a- _
- USHORT usNRegs, eMBRegisterMode eMode)
复制代码
1 i- g0 \9 Z; n/ t读取值存入变量:
( d% ]7 H) d5 i) W0 U1 ~
+ m3 r) I' z* J# T0 }6 Q$ u5 M- USHORT usMRegHoldBuf[MB_MASTER_TOTAL_SLAVE_NUM][M_REG_HOLDING_NREGS];
复制代码
; C+ n6 V! O1 _/ F& d* ]( x四、相关宏定义的设置9 ~/ m* \# ]5 T+ R. G& {1 M% E
在 user_mb_app_m.c文件中,对离散量接收缓冲器 ucMDiscInBuf、线圈接收缓冲器 ucMCoilBuf、输入寄存器接收缓冲器 usMRegInBuf、保持寄存器接收缓冲器 usMRegHoldBuf的大小进行了定义。定义的缓冲区大小取决于对于下列宏的定义:- T" k6 l) \ ]& e9 ]6 l
mbconfig.h 从机数量 MB_MASTER_TOTAL_SLAVE_NUM
9 [! J) O+ ~. a7 p4 Y: Duser_mb_app.h 中:
; U/ ^6 \/ E' T: j8 t#define RT_M_DISCRETE_INPUT_START 0 //离散量起始地址& z8 l6 X( m# U$ ]) v& n5 a
#define RT_M_DISCRETE_INPUT_NDISCRETES 16 //离散量数量
) [4 U! l- @0 \( P( o#define RT_M_COIL_START 0 //线圈起始地址4 R) W* O4 e- _2 y
#define RT_M_COIL_NCOILS 64 //线圈数量
$ x* X$ Q" o2 t3 N o$ i#define RT_M_REG_INPUT_START 0 //输入寄存器起始地址. X7 [% F1 M6 q6 n7 e+ N6 t5 E
#define RT_M_REG_INPUT_NREGS 100 //输入寄存器数量
* S! g' a m5 J9 Q#define RT_M_REG_HOLDING_START 0 //保持寄存器起始地址
% w; v- O# x, s! ]+ L2 o: |2 l#define RT_M_REG_HOLDING_NREGS 100 //保持寄存器数量
) ~/ `" S* H2 l- f
# y A9 { E8 }3 {5 C( l) @/ V$ }- e4 V3 K w- @# D
( N, {" X2 ^( M
|