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