Difference between revisions of "Template:Networking rut2 9 modbus custom register block"

From Teltonika Networks Wiki
(Created page with " right|300px ==Introduction== The goal of this manual is to help configuring '''Teltonika Networking Devices''' to get additi...")
 
 
(17 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
 
[[File:Configuration examples modbus logo.png|right|300px]]
 
[[File:Configuration examples modbus logo.png|right|300px]]
 +
__TOC__
  
 
==Introduction==
 
==Introduction==
Line 7: Line 7:
  
 
==Configuring Teltonika Networking Device==
 
==Configuring Teltonika Networking Device==
 
+
For this example we will be using script to store data into regfile from which then you can read data via Modbus.
In order to create custom Modbus register which would allow you to read certain routers information via Modbus, you will need to create a script or any other method for putting certain information into regfile.  For this example we will be using script to store data into regfile from which then you can read data via Modbus.
 
 
To achieve follow this steps:
 
To achieve follow this steps:
 
<ol>
 
<ol>
<li>Enable router to be as Modbus TCP slave (Network -> Modbus -> Modbus TCP Slave);</li>
+
<li><b>Enable</b> router to be as <b>Modbus TCP slave</b> (<b>Network -> Modbus -> Modbus TCP Slave</b>);</li>
<li>Enable Custom Register Block in the webUI (Network -> Modbus -> Modbus TCP Slave);
+
<li><b>Enable Custom Register Block</b> in the webUI (<b>Network -> Modbus -> Modbus TCP Slave</b>);
 
     <ul>
 
     <ul>
     <li>Register file path: tmp/regfile (this is where new register will be stored);</li>
+
     <li>Register file path: <b>tmp/regfile</b> (this is where new register will be stored);</li>
     <li>First register number: 1025 (by default it is 1025 and recommend to keep it, if necessary it could be changed accordantly);</li>
+
     <li>First register number: <b>1025</b> (by default it is 1025 and recommend to keep it, if necessary it could be changed accordantly);</li>
     <li>Register count: 32 (how much "space" there is given for additional Modbus registers, the more register you want to bigger count should be used).</li></li>
+
     <li>Register count: <b>32</b> (how much "space" there is given for additional Modbus registers, the more register you want to bigger count should be used).</li></li>
 
     </ul>
 
     </ul>
<li> Script which would log certain data into Modbus register. To add new script, connect to the device via SSH and use:</li>
 
 
</ol>
 
</ol>
 +
==Creating Custom Modbus Registers==
 +
In order to create custom Modbus register which would allow you to read certain routers information via Modbus, you will need to create a script or any other method for putting certain information into <b>regfile</b>.
  
  $ vi /bin/extramodbus (where extramodbus here could be any name)
+
Script which would log certain data into Modbus register. To add new <b>script</b>, connect to the device via <b>SSH</b> and use:
 
+
  $ vi /bin/extramodbus (this script is for this manual purpose, yours might be different)
Then press the letter [i] on the keyboard and insert following script (this script is for this manual purpose, yours might be different) example:
 
 
 
$ #!/bin/ash
 
$ while true
 
$ do
 
$ date > /tmp/regfile  #where data will be stored
 
$ gsmctl -X >> /tmp/regfile
 
$ gsmctl -E >> /tmp/regfile
 
$ sleep 5
 
$ done
 
 
 
Now we can try and create a simple script. With following script we will be getting routers date and couple of mobile related data.
 
 
 
  
 +
Insert following <b>script</b> (this script is for this manual purpose, yours might be different) example:
 +
{{#switch:{{{name}}}
 +
|RUTX10=
 +
<pre>
 +
#!/bin/ash
 +
while true
 +
do
 +
date > /tmp/regfile  #where data will be stored
 +
df | awk 'NR==3 {print $3}' >> /tmp/regfile
 +
df | awk 'NR==4 {print $3}' >> /tmp/regfile
 +
sleep 5
 +
done
 +
</pre>
 +
|RUTX08=
 +
<pre>
 +
#!/bin/ash
 +
while true
 +
do
 +
date > /tmp/regfile  #where data will be stored
 +
df | awk 'NR==3 {print $3}' >> /tmp/regfile
 +
df | awk 'NR==4 {print $3}' >> /tmp/regfile
 +
sleep 5
 +
done
 +
</pre>
 +
|
 +
<pre>
 +
#!/bin/ash
 +
while true
 +
do
 +
date > /tmp/regfile  #where data will be stored
 +
gsmctl -X >> /tmp/regfile
 +
gsmctl -E >> /tmp/regfile
 +
sleep 5
 +
done
 +
</pre>
 +
}}
 
After saving change execution rights with this command:
 
After saving change execution rights with this command:
  
 
  $ chmod +x /bin/<scriptname> #example: chmod +x /bin/extramodbus
 
  $ chmod +x /bin/<scriptname> #example: chmod +x /bin/extramodbus
  
Then you need to run your script to start loggin data to regfile, to start script simple write <script name> & example:
+
Run the script to start logging data to regfile, to do that simply type in your terminal: <script name> &.
 +
For example:
  
 
  $ extramodbus &
 
  $ extramodbus &
Line 47: Line 71:
 
And script will run in the background.
 
And script will run in the background.
  
With this script we will be able to get routers local time and couple 3G signal values each 5 seconds.
+
With this script we will be able to get routers local time and couple {{#switch:{{{name}}}
Data stored in regfile (cat /tmp/regfile) looks like this:
+
|RUTX10= DF application |RUTX08= DF application | GSM}} values each 5 seconds.
 +
Data stored in <b>regfile (cat /tmp/regfile)</b> looks like this:
 +
{{#switch:{{{name}}}
 +
|RUTX10=
 +
<pre>
 +
Wed Jun 17 15:11:29 EEST 2020
 +
69
 +
27
 +
</pre>
 +
|RUTX08=
 +
<pre>
 +
Wed Jun 17 15:11:29 EEST 2020
 +
69
 +
27
 +
</pre>
 +
|
 +
<pre>
 +
Wed Jun 17 15:11:29 EEST 2020
 +
-69
 +
27
 +
</pre>
 +
}}
  
Data stored in regfile (cat /tmp/regfile) looks like this:
 
  
$ Wed Jun 17 15:11:29 EEST 2020
+
To view collected data in HEX execute this command via SSH:  
$ -69
 
$ 27
 
  
In HEX #command to view data via SSH: hexdump -v /tmp/regfile
+
$hexdump -v /tmp/regfile
  
  $ 0000000 5765 6420 4a75 6e20 3137 2031 353a 3132
+
  0000000 5765 6420 4a75 6e20 3137 2031 353a 3132
  $ 0000010 3a32 3020 4545 5354 2032 3032 300a 2d36
+
  0000010 3a32 3020 4545 5354 2032 3032 300a 2d36
  $ 0000020 380a 3137 0a00
+
  0000020 380a 3137 0a00
  $ 0000025
+
  0000025
==Reading Created Custom Modbus Registers==
+
 
 +
==Reading Created Custom Modbus Registers with Modbus TCP Master==
  
 
To read data via Modbus you can use:
 
To read data via Modbus you can use:
    • ComTestPro program;
+
<ul>
    • Modbus TCP Master;
+
<li>ComTestPro program;</li>
 +
<li>Modbus TCP Master;</li>
 +
</ul>
  
For example purpose we will be using ComTestPro program, which allows us to get Modbus data from device in Hex. So in order to get date from the router by reading custom Modbus registers we need to use following configuration:
+
With Modbus TCP master you can read data just by using ASCII data type and interactive test button.  
Protocol: Modbus TCP;
+
{{#switch:{{{series}}}
IP Address: 192.168.3.1 (routers LAN or WAN IP);
+
|RUT9XX = [[File:Configuration examples modbus tcp master test.png|border|class=tlt-border]]
Port: 502 (port number on which Modbus TCP Slave is listening);
+
|RUT2XX = [[File:Configuration examples modbus tcp master test.png|border|class=tlt-border]]
Device: 1
+
|RUTX  = [[File:Configuration examples rutx modbus tcp master test.png|border|class=tlt-border]]
Register: 1024 (the register number from which custom Modbus registers are started, keep in mind you need to -1 from the register which you configured in the webUI, for example we used 1025 but here we need to use 1024);
+
|TRB1  = [[File:Configuration examples trb1 modbus tcp master test.png|border|class=tlt-border]]
#Registers: 14 (registers lenght).
+
|TRB2  = [[File:Configuration examples rutx modbus tcp master test.png|border|class=tlt-border]]
 +
}}
  
With this configuration you should get routers date in hex. Below is the example of configuration and what answer do we get from the router:
 
  
[[File:Configuration examples modbus comtest pro.png|border|class=tlt-border]]
+
To determine how many registers to specify in the '''Register count/Values''' field you should divide character count by two. For example, if you have 28 characters you should input  14 to '''Register count/Values''' field.
  
And as you can see we received answer in hex which is:
+
[[File:Configuration_examples_modbus_register_count.png|border|class=tlt-border]]
 +
==Reading Created Custom Modbus Registers with ComTestPro==
 +
For this example we will be using <b>ComTestPro</b> program, which allows us to get Modbus data from device in <b>Hex</b>. So in order to get <b>date</b> from the router by reading <b>custom Modbus registers</b> we need to use following configuration:
 +
<ul>
 +
<li>Protocol: Modbus TCP;</li>
 +
<li>IP Address: 192.168.{{#ifeq:{{{series}}}|TRB1|2|1}}.1 (routers LAN or WAN IP);</li>
 +
<li>Port: 502 (port number on which Modbus TCP Slave is listening);</li>
 +
<li>Device: 1</li>
 +
<li>Register: 1024 (the register number from which <b>custom Modbus registers</b> are started, keep in mind you need to -1 from the register which you configured in the webUI, for example we used 1025 but here we need to use 1024);</li>
 +
<li>Registers: 14 (registers lenght).</li>
 +
</ul>
 +
With this configuration you should get routers <b>date</b> in <b>hex</b>. Below is the example of configuration and what reply we get from the router:  
  
$ 5468 7520 4A75 6C20 3330 2031 313A 3539 3A30 3820 5554 4320 3230 3230
+
{{#switch:{{{series}}}
 +
|RUT9XX = [[File:Configuration examples rutx modbus comtest pro.png|border|class=tlt-border]]
 +
|RUT2XX = [[File:Configuration examples rutx modbus comtest pro.png|border|class=tlt-border]]
 +
|RUTX  = [[File:Configuration examples rutx modbus comtest pro.png|border|class=tlt-border]]
 +
|TRB1  = [[File:Configuration examples trb1 modbus comtest pro.png|border|class=tlt-border]]
 +
|TRB2  = [[File:Configuration examples rutx modbus comtest pro.png|border|class=tlt-border]]
 +
}}
  
And by using certain websites, like this one: '''[https://www.scadacore.com/tools/programming-calculators/online-hex-converter/ online hex converter]''' and there we can analyze the data, and by entering the received hex we can see the routers date which in ASCII is:
+
And as you can see we received a reply in hex:  
  
  $ Thu Jul 30 11:59:08 UTC 2020
+
  5468 7520 4A75 6C20 3330 2031 313A 3539 3A30 3820 5554 4320 3230 3230
 +
 
 +
By using certain websites, like this: '''[https://www.scadacore.com/tools/programming-calculators/online-hex-converter/ hex converter]''' we can analyze the data by entering the received hex reply. After conversion we can see the routers date which in <b>ASCII</b> is:
 +
 
 +
Thu Jul 30 11:59:08 UTC 2020
  
 
[[File:Configuration examples modbus hex to ascii.png|border|class=tlt-border]]
 
[[File:Configuration examples modbus hex to ascii.png|border|class=tlt-border]]
 
 
  [[Category:{{{name}}} Configuration Examples]]
 
  [[Category:{{{name}}} Configuration Examples]]

Latest revision as of 11:53, 29 September 2020

Configuration examples modbus logo.png

Introduction

The goal of this manual is to help configuring Teltonika Networking Devices to get additional custom Modbus registers for device monitoring via Modbus if default registers are not enough. Default Modbus registers can be found on our Wiki page: Monitoring via Modbus

Configuring Teltonika Networking Device

For this example we will be using script to store data into regfile from which then you can read data via Modbus. To achieve follow this steps:

  1. Enable router to be as Modbus TCP slave (Network -> Modbus -> Modbus TCP Slave);
  2. Enable Custom Register Block in the webUI (Network -> Modbus -> Modbus TCP Slave);
    • Register file path: tmp/regfile (this is where new register will be stored);
    • First register number: 1025 (by default it is 1025 and recommend to keep it, if necessary it could be changed accordantly);
    • Register count: 32 (how much "space" there is given for additional Modbus registers, the more register you want to bigger count should be used).

Creating Custom Modbus Registers

In order to create custom Modbus register which would allow you to read certain routers information via Modbus, you will need to create a script or any other method for putting certain information into regfile.

Script which would log certain data into Modbus register. To add new script, connect to the device via SSH and use:

$ vi /bin/extramodbus (this script is for this manual purpose, yours might be different)

Insert following script (this script is for this manual purpose, yours might be different) example:

 #!/bin/ash
 while true
 do
 date > /tmp/regfile  #where data will be stored
 gsmctl -X >> /tmp/regfile
 gsmctl -E >> /tmp/regfile
 sleep 5
 done

After saving change execution rights with this command:

$ chmod +x /bin/<scriptname> #example: chmod +x /bin/extramodbus

Run the script to start logging data to regfile, to do that simply type in your terminal: <script name> &. For example:

$ extramodbus &

And script will run in the background.

With this script we will be able to get routers local time and couple GSM values each 5 seconds. Data stored in regfile (cat /tmp/regfile) looks like this:

Wed Jun 17 15:11:29 EEST 2020
-69
27


To view collected data in HEX execute this command via SSH:

$hexdump -v /tmp/regfile
0000000 5765 6420 4a75 6e20 3137 2031 353a 3132	
0000010 3a32 3020 4545 5354 2032 3032 300a 2d36
0000020 380a 3137 0a00
0000025

Reading Created Custom Modbus Registers with Modbus TCP Master

To read data via Modbus you can use:

  • ComTestPro program;
  • Modbus TCP Master;

With Modbus TCP master you can read data just by using ASCII data type and interactive test button.


To determine how many registers to specify in the Register count/Values field you should divide character count by two. For example, if you have 28 characters you should input 14 to Register count/Values field.

Configuration examples modbus register count.png

Reading Created Custom Modbus Registers with ComTestPro

For this example we will be using ComTestPro program, which allows us to get Modbus data from device in Hex. So in order to get date from the router by reading custom Modbus registers we need to use following configuration:

  • Protocol: Modbus TCP;
  • IP Address: 192.168.1.1 (routers LAN or WAN IP);
  • Port: 502 (port number on which Modbus TCP Slave is listening);
  • Device: 1
  • Register: 1024 (the register number from which custom Modbus registers are started, keep in mind you need to -1 from the register which you configured in the webUI, for example we used 1025 but here we need to use 1024);
  • Registers: 14 (registers lenght).

With this configuration you should get routers date in hex. Below is the example of configuration and what reply we get from the router:


And as you can see we received a reply in hex:

5468 7520 4A75 6C20 3330 2031 313A 3539 3A30 3820 5554 4320 3230 3230 

By using certain websites, like this: hex converter we can analyze the data by entering the received hex reply. After conversion we can see the routers date which in ASCII is:

Thu Jul 30 11:59:08 UTC 2020

Configuration examples modbus hex to ascii.png

[[Category:{{{name}}} Configuration Examples]]