TCP modbus server 接收多个客户端数据

2019-10-11 16:20 [复制链接] 0 73

TCP modbus server1 m+ X4 p! {$ ?9 ]# f6 R# ~

1 s" ?+ @/ u7 n5 x4 M0 v下面程序 只能接收一个客户端数据,同时有几个客户端要怎么处理呢?( T( y! P! x7 r8 z$ d& k
/ E8 u- K) {7 M, k# c; ^; f6 |$ a
static void test_thread(void *param)/ d7 L6 ~, f# J2 |% ^- G: D: g6 }
{# C% I2 G# O7 j8 T: t2 h
        while(1){
# z8 ]0 \% M( m6 ?" m    rt_thread_mdelay(5000);
( J4 H! i1 y+ \1 s3 P    int s = -1;
0 x; c$ C0 p' o' k0 J6 d    modbus_t *ctx = NULL;
8 Y: f+ Q: g% G; B3 V0 r+ B    modbus_mapping_t *mb_mapping = NULL;
. X% f- O0 d6 j  O1 Q8 a5 b    int rc;1 z* F4 I6 l& \1 `* d4 K' u
  q3 X: t, g- w0 E8 h# C: c
    ctx = modbus_new_tcp(RT_NULL, 1502);
" K  |4 Y* L% _$ h- ?5 E6 H0 w. y: Q; s: ]    s = modbus_tcp_listen(ctx, 10);
& |3 v0 R1 u3 P: j    modbus_tcp_accept(ctx, &s);( }7 E* b0 ]0 v0 T# b
    mb_mapping = modbus_mapping_new(MODBUS_MAX_READ_BITS, 0,3 Q, q1 z1 y7 N# F
                                    MODBUS_MAX_READ_REGISTERS, 0);6 P5 d  B( N! n" Y. H
    while(1)
  F& l4 H& x$ g' p! U1 b    {
7 }. s4 H4 X- G- K        uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH];
3 c" A- b2 s( `                         uint16_t data[]={1,2,3,4,5,6,7,8};
5 B0 t, ~, @: y9 O9 i                       
" P. j" E6 h; a1 f6 Y# v7 K4 o                       
/ U) F" L7 U9 R( w//       modbus_write_registers(ctx,0x12,4,data);3 N' i; `: u9 ?  E' A  j
        rc = modbus_receive(ctx, query);
. i: C; K4 p* i& E! ~6 i: u; j( `        if (rc > 0) {( G5 T0 B; M2 V9 ~  A
            modbus_reply(ctx, query, rc, mb_mapping);
4 ~$ F- N$ K! }, `# ~, \) y8 N6 ~  m                                         for(int i=0;i<20;i++)                                          * b7 [: D; `8 u" U
                                        printf("%2x ",query[i]);
3 W3 v2 A  [! C9 O9 X. H; J% g        } else if (rc  == -1) {
3 N. ?3 L* j- }5 I; O- u                                        % w; M) S( V+ ?
            /* Connection closed by the client or error */: [4 r/ q( K$ _- k
            break;
; P. E% U0 ~1 {/ F5 @        }
5 w' h4 E! u; D8 y                                rt_thread_mdelay(50);
4 U. ?$ Z% x. d    }
$ K+ _) u5 L7 e8 R) j# \    modbus_mapping_free(mb_mapping);
' ?; W3 W- L6 d3 |9 r: I    if (s != -1) {' `! a7 I$ p1 m9 j
        close(s);
2 l6 \3 L* j+ R) q    }
' j- @, y- R) v- Z+ u. e) n2 i2 J' ^    /* For RTU, skipped by TCP (no TCP connect) */, d0 @) c/ |2 X4 ~  p
    modbus_close(ctx);6 R4 ?) G% D; k0 b: `' r
    modbus_free(ctx);9 i8 b7 \+ i' H) U" r
        }8 V/ \8 h+ M$ B: {: h
}0 l1 `4 I, l% `: W) C  L0 `
9 t# n& L% Q1 [
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表