Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 15 из 15

Тема: овен и линукс

  1. #11

    По умолчанию

    Коллеги, в продолжение темы.
    Мучаюсь с libmodbus.org (3.0.1)
    Программа:
    Код:
    #include <modbus/modbus.h>
    #include <stdio.h>
    #include <errno.h>
    
    int main () {
        modbus_t *st;
        uint16_t tab_reg[32];
        int rc;
        int i;
        struct timeval old_response_timeout;
        struct timeval response_timeout;
    
        st = modbus_new_tcp("10.10.10.6", 502);
        if (st == 0) {
            fprintf(stderr, "Error\n");
            return -1;
        }
        if (modbus_connect(st) == -1) {
            fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
            modbus_free(st);
            return -1;
        }
    
        //modbus_get_response_timeout(st, &old_response_timeout);
        //response_timeout.tv_sec = 10;
        //response_timeout.tv_usec = 0;
        //modbus_set_response_timeout(st, &response_timeout);
    
        /* БД, адрес, кол-во регистров, куда пишем */
        rc = modbus_read_registers(st, 0, 10, tab_reg);
        if (rc == -1) {
            printf("rc=%d\n", rc);
            fprintf(stderr, "%s\n", modbus_strerror(errno));
    //      return -1;
        }
    
        for (i = 0 ; i < 10 ; i++) {
            printf("reg[%d]=%d (0x%X)\n", i, tab_reg[i], tab_reg[i]);
        }
    
        modbus_close(st);
        modbus_free(st);
    }
    Соответственно: gcc test.c `pkg-config --libs --cflags libmodbus`
    Соединяется нормально, при опросе регистров возвращает -1:
    Код:
    :./a.out
    rc=-1
    Connection timed out
    reg[0]=0 (0x0)
    reg[1]=0 (0x0)
    reg[2]=0 (0x0)
    reg[3]=0 (0x0)
    reg[4]=0 (0x0)
    reg[5]=0 (0x0)
    reg[6]=0 (0x0)
    reg[7]=0 (0x0)
    reg[8]=59656 (0xE908)
    reg[9]=64905 (0xFD89)
    А должен быть (modpoll -r 1 -c 4 -t 3:hex -m tcp 10.10.10.6):
    Код:
    modpoll 3.1 - FieldTalk(tm) Modbus(R) Master Simulator
    Copyright (c) 2002-2011 proconX Pty Ltd
    Visit http://www.modbusdriver.com for Modbus libraries and tools.
    
    Protocol configuration: MODBUS/TCP
    Slave configuration...: address = 1, start reference = 1, count = 4
    Communication.........: 10.10.10.6, port 502, t/o 1.00 s, poll rate 1000 ms
    Data type.............: 16-bit register (hex), input register table
    
    -- Polling slave... (Ctrl-C to stop)
    [1]: 0xCCCD
    [2]: 0x4221
    [3]: 0x0014
    [4]: 0x0001
    Может кто подскажет, что не так?
    Последний раз редактировалось leshyi; 21.09.2011 в 21:29.

  2. #12
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,225

    По умолчанию

    А на ПЛК есть 10 регистров в слейве?
    А еще может быть: регистр это 2 байта, т.е. 16 бит, Вы сделали tab_reg равным 32 битам, а в запросе спрашиваете 10 регистров,т.е. 80 бит, ну как то поэтому должна быть ошибка

  3. #13

    По умолчанию

    есть вот такая программа для опроса приборов по Modbus через различные интерфейсы (TCP/RS232/RS485). Она собственно тоже основана на libmodbus. Нами используется для опроса нескольких ПЛК из под Linux.
    В принципе, в Perl скрипт интегрировать ее можно без проблем. =)
    https://github.com/AndreySV/check_modbus

  4. #14

    По умолчанию

    Цитата Сообщение от leshyi Посмотреть сообщение
    Коллеги, в продолжение темы.
    Мучаюсь с libmodbus.org (3.0.1)
    Может кто подскажет, что не так?
    Понятно что некропост, но вероятно кому-то сэкономит время. В приведённом leshyi примере необходимо перед modbus_connect поставить вызов modbus_set_slave, несмотря на то что "man modbus_set_slave" говорит что в случае TCP "The slave number is only required in TCP if the message must reach a device on a serial network.". Похоже в случае с Овеном это обязательно. После вставки этой строки всё сразу заработало и на чтение и на запись а до того было "Connection timed out".

  5. #15

    По умолчанию

    Модбас может не работать потому, что самим прибором не поддерживается. А как понять что ТРМ138 поддерживает modbus или нет я не в курсе? В меню полазил - никаких переключений по этому поводу не нашел?

Страница 2 из 2 ПерваяПервая 12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •