Hilfe bezüglich Modbus

Gast #6351797
Lesenswert?

Hi Forum,

ich habe ein Projekt bekommen wo ich etwas mit einem Modbus rumprobieren 
soll. Ich habe ein Arduino nano, einen RS-485 Adapter und das Gerät wo 
der A und B Anschluss vom Modbus rausgeführt ist.

A und B vom RS-485 Adapter hängen an dem Gerät, R0 ist RX, D1 ist an TX 
und DE+RE ist an Pin2

Der Ausbilder ist Leider nicht da, weshalb ich nicht fragen kann...

folgenden Code hab ich:
1
/**
2
    Modbus master example 1:
3
    The purpose of this example is to query an array of data
4
    from an external Modbus slave device.
5
    The link media can be USB or RS232.
6

7
    Recommended Modbus slave:
8
    diagslave http://www.modbusdriver.com/diagslave.html
9

10
    In a Linux box, run
11
    "./diagslave /dev/ttyUSB0 -b 19200 -d 8 -s 1 -p none -m rtu -a 1"
12
    This is:
13
      serial port /dev/ttyUSB0 at 19200 baud 8N1
14
     RTU mode and address @1
15
*/
16

17
#include <ModbusRtu.h>
18

19
// data array for modbus network sharing
20
uint16_t au16data[16];
21
uint8_t u8state;
22

23
/**
24
    Modbus object declaration
25
    u8id : node id = 0 for master, = 1..247 for slave
26
    port : serial port
27
    u8txenpin : 0 for RS-232 and USB-FTDI
28
                 or any pin number > 1 for RS-485
29
*/
30
Modbus master(0, Serial, 2); // this is master and RS-232 or USB-FTDI
31

32
/**
33
   This is an structe which contains a query to an slave device
34
*/
35
modbus_t telegram;
36

37
unsigned long u32wait;
38

39
void setup() {
40
  Serial.begin( 9600 ); // baud-rate at 9600
41
  Serial.println("start");
42
  master.start();
43
  master.setTimeOut( 1000 ); // if there is no answer in 2000 ms, roll over
44
  u32wait = millis() + 1000;
45
  u8state = 0;
46
}
47

48
void loop() {
49
  switch ( u8state ) {
50
    case 0:
51
      if (millis() > u32wait) u8state++; // wait state
52
      break;
53
    case 1:
54
      telegram.u8id = 240; // slave address
55
      telegram.u8fct = 4; // function code (this one is registers read)
56
      telegram.u16RegAdd = 30061; // start address in slave
57
      telegram.u16CoilsNo = 7; // number of elements (coils or registers) to read
58
      telegram.au16reg = au16data; // pointer to a memory array in the Arduino
59

60
      master.query( telegram ); // send query (only once)
61
      u8state++;
62
      break;
63
    case 2:
64
      master.poll(); // check incoming messages
65
      if (master.getState() == COM_IDLE) {
66
        u8state = 0;
67
        u32wait = millis() + 100;
68
      }
69
      break;
70
  }
71
}

außerdem hab ich diese Daten für den Code bekommen:

"
9600 baud
8 Datenbits
1 Stoppbit
Keine Parität

Slave (Gerät) ID: 240
Adresse 30061 bis 30068
Funktionscode: 4

"

Die Rückantwort soll dann ein datum. Z.B. 16.07.2020 sein jedoch bekomme 
ich nur sowas "8⸮um". Weß jemand was ich falsch mache ?

danke schonmal

Mfg Luca
Gast #6351820
Lesenswert?

Ohne das spezielle Gerät oder die verwendeten Arduino-Libs zu kennen 
fällt auf: Adresse 30061 bis 30068 (jeweils inklusive) sind 8 Register, 
nicht 7.

In diesen 8 16 bit Zahlen kann das Datum dann auf verschiedene Arten 
kodiert sein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren