링크 ux 에서 TCP 와 RTU 데이터 전송 프로그램

8226 단어 linuxc
linux TCP RTU      
#include 
#include 
#include 
#include 
#include 

#include "modbus.h"

enum {
    TCP,
    RTU
};

int main(int argc, char *argv[])
{
    int socket;
    modbus_t *ctx;
    modbus_mapping_t *mb_mapping;
    int rc;
    int use_backend;

     /* TCP */
    if (argc > 1) {
        if (strcmp(argv[1], "tcp") == 0) {
            use_backend = TCP;
        } else if (strcmp(argv[1], "rtu") == 0) {
            use_backend = RTU;
        } else {
            printf("Usage:
%s [tcp|rtu] - Modbus client to measure data bandwith

"
, argv[0]); exit(1); } } else { /* By default */ use_backend = TCP; } if (use_backend == TCP) { ctx = modbus_new_tcp("127.0.0.1", 1502); socket = modbus_tcp_listen(ctx, 1); modbus_tcp_accept(ctx, &socket); } else { ctx = modbus_new_rtu("/dev/ttySAC3", 19200, 'N', 8, 1); modbus_set_slave(ctx, 1); modbus_connect(ctx); } mb_mapping = modbus_mapping_new(MODBUS_MAX_READ_BITS, 0, MODBUS_MAX_READ_REGISTERS, 0); if (mb_mapping == NULL) { fprintf(stderr, "Failed to allocate the mapping: %s
"
, modbus_strerror(errno)); modbus_free(ctx); return -1; } for(;;) { uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH]; rc = modbus_receive(ctx, query); if (rc >= 0) { modbus_reply(ctx, query, rc, mb_mapping); } else { /* Connection closed by the client or server */ break; } } printf("Quit the loop: %s
"
, modbus_strerror(errno)); modbus_mapping_free(mb_mapping); close(socket); modbus_free(ctx); return 0; }
      :arm-linux-gcc -o test test.c -L. lmodbus,      modbus poll,      ;         ./test rtu ./test tcp,   modbus poll。
    :
000059-Rx:01 03 28 00 0C 00 00 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 16

000072-Tx:01 03 00 00 00 14 45 C5
000073-Rx:01 03 28 00 0C 00 00 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 00 0D 00 00 00 00 00 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1D 0E

좋은 웹페이지 즐겨찾기