• Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    Reading modbus/TCP from IAQ RW-THC not working?

    Other Peripherals
    2
    4
    89
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      knebb last edited by knebb

      Hi,

      may be am am a little bit stupid. But I do not get any modbus information back from my new device.

      These are the settings of the device:
      f600fa4d-e1da-4ce4-9eff-b49effef6403-grafik.png

      I verified the port is open:

      root@zentrale:~# nmap -p 502 192.168.22.60
      Starting Nmap 7.70 ( https://nmap.org ) at 2021-09-26 14:55 CEST
      Nmap scan report for 192.168.22.60
      Host is up (0.18s latency).
      
      PORT    STATE SERVICE
      502/tcp open  mbap
      
      Nmap done: 1 IP address (1 host up) scanned in 6.88 seconds
      

      First I tried to use mbpoll to get information but mbpoll's syntax is somehow cryptic so I either got no results, an error or misleading results....
      I tried then to do it with my own C code but failed as well.

      #include "header.h"
      #include "vars.h"
      void main(int argc, char* argv[])
      {
      modbus_t *modbusglob;
      union {
             uint16_t word[2];
             uint32_t dword;
             float fl;
      } wert;
      int errlvl;
      
      /********************************* Function **********************************/
      void fieldbus_free(modbus_t *modbus)
      {
              if (modbus != NULL) {
              modbus_close(modbus);
              modbus_free(modbus);
          }
      }
      
      /********************************* Function **********************************/
      modbus_t * fieldbus_new(void)
      {
      int err;
      modbus_t *modbus;
      char host[15];
      int port;
      
      //    strcpy(host,"127.0.0.1");
          strcpy(host,"192.168.22.60");
          port   = 502;
          modbus = modbus_new_tcp(host, port);
          if (modbus == NULL )
          {
             fieldbus_free(modbus);
             exit (55);
          }
          err = modbus_connect(modbus);
          if (err  == -1)
          {
              fieldbus_free(modbus);
              modbus = NULL;
              exit (55);
          };
          err=modbus_set_slave(modbus, 0);
          if(  err == -1)
          {
              fieldbus_free(modbus);
              modbus = NULL;
              exit (60);
          } else {
              return modbus;
          }
      }
      /********************************* Main **********************************/
      modbusglob=fieldbus_new();
      
      errlvl=modbus_read_registers(modbusglob, 26, 2, (&wert.word[0]));
      if (errlvl == -1) {printf("ERR1 modbus_read_register, %s\n",modbus_strerror(errno));}
      else { printf("Register is set to %f\n",wert.fl);}
      sleep(3);
      errlvl=modbus_read_registers(modbusglob, 18, 2, (&wert.word[0]));
      if (errlvl == -1) {printf("ERR2 modbus_read_register, %s\n",modbus_strerror(errno));}
      else { printf("Register is set to %f\n",wert.fl);}
      
      exit (0);
      }
      

      What I get after compile and start is a timeout:

      root@zentrale:/heizung/src# ./neuron
      ERR1 modbus_read_register, Connection timed out
      ERR2 modbus_read_register, Connection timed out
      

      I used register 26 and 18 for VOC-Index (foat32) and CO2 (float32).
      Remark: As soon as I switch to "localhost" (and matching registers) instead of the device I am getting results...

      What is wrong here?

      And regarding mbpoll: someone having a working example for mbpoll/tcp?

      THANKS a lot!

      /KNEBB

      Martin Kudláček 1 Reply Last reply Reply Quote 0
      • Martin Kudláček
        Martin Kudláček @knebb last edited by Martin Kudláček

        Hi @knebb,
        here's a working mbpoll example reading a temperature:

        root@mkudlacek:~# mbpoll 192.168.218.249 -a 1 -0 -1 -r 0 -c 2 -t 3:hex
        mbpoll 1.4-25 - FieldTalk(tm) Modbus(R) Master Simulator
        Copyright © 2015-2019 Pascal JEAN, https://github.com/epsilonrt/mbpoll
        This program comes with ABSOLUTELY NO WARRANTY.
        This is free software, and you are welcome to redistribute it
        under certain conditions; type 'mbpoll -w' for details.
        
        Protocol configuration: Modbus TCP
        Slave configuration...: address = [1]
                                start reference = 0, count = 2
        Communication.........: 192.168.218.249, port 502, t/o 1.00 s, poll rate 1000 ms
        Data type.............: 16-bit register, input register table
        
        -- Polling slave 1...
        [0]:    0x41AD
        [1]:    0x05FD
        

        16ab0c71-aa17-4bfe-82bd-f2b4cf59505a-image.png

        The problem is probably in the slave address. You probably use "0" (modbus_set_slave(modbus, 0)), but it is "1".

        Best regards,
        Martin

        K 1 Reply Last reply Reply Quote 0
        • K
          knebb @Martin Kudláček last edited by

          @Martin-Kudláček

          Tahnks a lot!

          Ok, mbpollnow delivers useful output which I do have to convert manually.

          And yes, changing from 0to 1 for setting slave does not produce any timeout errors or similar.

          Just, it still does not show the current values. I am always getting "0.000000" back (while mbpoll and the webpage show different values). No matter what address I use in the read call:

          errlvl=modbus_read_registers(modbusglob, 6, 2, (&wert.word[0]));

          Any further idea?

          /KNEBB

          Martin Kudláček 1 Reply Last reply Reply Quote 0
          • Martin Kudláček
            Martin Kudláček @knebb last edited by

            Hi @knebb,
            you have verified, that the HW is working and returns correct value via standard tool. Checking and fixing your code is unfortunately beyond the scope of the free support.

            Thank you for understanding and have a nice day,
            Martin

            1 Reply Last reply Reply Quote 0
            • First post
              Last post