ccgx:modbustcp_faq
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
ccgx:modbustcp_faq [2018-03-28 11:52] – [Advanced debugging] justin_tyers_live_a_c | ccgx:modbustcp_faq [2023-10-31 10:32] (current) – jpasop | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== |
- | ==== Introduction ==== | + | ==== 1. Introduction ==== |
- | ModbusTCP | + | Modbus-TCP |
- | Besides reading this FAQ, make sure to also read the ModbusTCP section in our [[https:// | + | Modbus-TCP is an industry standard protocol, that can be used to interface PLCs or other third party equipment with Victron products. Through the Modbus-TCP interface you can read and write data to the chargers, battery monitors, inverter/chargers and other products connected to the GX device. |
- | ==== Supported ModbusTCP function codes ==== | + | Besides reading this GX Modbus-TCP Manual, make sure to also read the Modbus-TCP section in our [[https:// |
- | The supported function codes are: | + | By default, Modbus-TCP is disabled. To enable it, go into the settings menu, scroll down to ' |
- | * ReadHoldingRegisters = 3 | + | |
- | * ReadInputRegisters = 4 | + | |
- | * WriteSingleRegister = 6 | + | |
- | * WriteMultipleRegisters = 16 | + | |
- | Note that there is no difference between function code 3 and 4. | + | ==== 2. Addressing, Unit-ID and Registers ==== |
- | ==== Product categories and registers ==== | + | === 2.1 Definitions |
+ | The Modbus-TCP protocol has two fields for addressing. There is the Unit-id, also referred to as Address, Station address or Slave-address in some PLC software. And the other field is the Register address. | ||
- | In the ModbusTCP Registerlist xlsx file, there is a column called 'dbus-service-name' | + | * The **Unit-ID** is the device-selector: |
+ | * The **Register Address** then determines the parameter | ||
- | Note that besides device-specific | + | === 2.2 Unit-IDs === |
+ | |||
+ | To see a list of available devices, and their Address, go to Settings -> Services -> Modbus/TCP -> Available services: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Additionally this information is also documented on the ‘Unit ID mapping’ tab in the Modbus-TCP excel sheet. | ||
+ | |||
+ | For the overall system data, look for com.victronenergy.system in the excel sheet, and use Unit-ID 100. | ||
+ | |||
+ | Note that both Unit-ID 0 and Unit-ID 100 map to the same internal address. We recommend to use ID 100, since many Modbus-TCP clients and PLCs do not work with ID 0. | ||
+ | |||
+ | === 2.3 Register addresses === | ||
+ | |||
+ | The list of available | ||
+ | |||
+ | Besides registers for connected Chargers, Inverters, and other products, there is also a set of registers that represent the entire system: com.victronenergy.system. This service is also where the //System Overview// pages in the GUI, and the VRM Dashboard get their data. | ||
+ | |||
+ | Note that not all list registers are available for each device. For example a BMV Battery Monitor has lots of readings: historical data such as maximum/ | ||
+ | |||
+ | Use this table to map the definition in the ' | ||
^ Device class ^ Product types ^ Registers | ^ Device class ^ Product types ^ Registers | ||
Line 32: | Line 50: | ||
| com.victronenergy.grid | Energy meters configured to measure the grid | 2600 to 2609 | | | com.victronenergy.grid | Energy meters configured to measure the grid | 2600 to 2609 | | ||
| com.victronenergy.gps | GPS | 2800 to 2807 | | | com.victronenergy.gps | GPS | 2800 to 2807 | | ||
+ | | com.victronenergy.tank | Tank sensors | 3000 to 3007 | | ||
| com.victronenergy.genset | Generators | | com.victronenergy.genset | Generators | ||
| com.victronenergy.temperature | Temperature sensors < | | com.victronenergy.temperature | Temperature sensors < | ||
+ | | com.victronenery.meteo | IMT solar irradiation sensors | 3600 to 3603 | | ||
- | (1): Only the Venus GX is provided with temperature sensor inputs. The battery temperature | + | (1): These are the auxiliary temperature sensors built-in to our GX devices, such as the Venus GX. For details, see [[venus-os: |
+ | |||
+ | ==== 3. Supported Modbus-TCP function codes ==== | ||
+ | |||
+ | The supported function codes are: | ||
+ | * ReadHoldingRegisters = 3 | ||
+ | * ReadInputRegisters = 4 | ||
+ | * WriteSingleRegister = 6 | ||
+ | * WriteMultipleRegisters = 16 | ||
+ | |||
+ | Note that there is no difference between function code 3 and 4. | ||
+ | |||
+ | ==== 5. Mapping example ==== | ||
+ | The purpose of this example is to show how to interpret the information in the worksheets of the | ||
+ | excel sheet containing the Modbus-TCP mapping. This excel sheet is available for download from our website on the [[https:// | ||
+ | |||
+ | To request the input voltage of a Multi or Quattro, | ||
+ | |||
+ | The Modbus-TCP reply will contain 2302. Divide it by 10, as specified in cell E3, and then you have the voltage: 230.2 Volts AC. | ||
+ | |||
+ | ==== 6. Error codes and trouble shooting ==== | ||
+ | |||
+ | === 6.1 The common cause: Unit-ID / Register combination === | ||
+ | |||
+ | In case a certain read or write is not successful, most likely there is an issue in the unitid/ | ||
+ | |||
+ | Besides double checking the mapping, there are two ways to see where the error lies. One is to check the last error as shown in the GX Device menus. And secondly you can look at the error code as is visible on (most but not all) PLCs. See the two sections below for details. | ||
+ | |||
+ | === 6.2 Looking up the last Modbus-TCP Error on the GX Device=== | ||
+ | |||
+ | To see why a certain register | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | === 6.3 Error codes === | ||
+ | |||
+ | These error codes are returned by our software to the PLC; and most PLC software tools allow seeing them. | ||
- | General note: not all list registers are available for each device. For example a BMV Battery Monitor has lots of readings: historical data such as maximum/ | ||
- | ==== Error codes ==== | ||
^Code^Name^Description^ | ^Code^Name^Description^ | ||
|0x01|IllegalFunction|The requested function is not supported.| | |0x01|IllegalFunction|The requested function is not supported.| | ||
- | |0x02|IllegalDataAddress|The | + | |0x02|IllegalDataAddress|The |
|0x03|IllegalDataValue|The requested quantity of registers is invalid. See the modbus specs, http:// | |0x03|IllegalDataValue|The requested quantity of registers is invalid. See the modbus specs, http:// | ||
- | |0x0A|GatewayPathUnavailable|Unit-id is defined in the mapping list, but there is no device found on the mapped port. Double check the unit-id mapping list in the excel sheet, and make sure that the device is properly connected to the CCGX, switched on, and that its data is available on the CCGX display.| | + | |0x0A|GatewayPathUnavailable|The requested |
- | |0x0B|GatewayTargetDeviceFailedToRespond|Requested | + | |0x0B|GatewayTargetDeviceFailedToRespond|Requested |
- | ==== Mapping example ==== | ||
- | The purpose of this example is to show how to interpret the information in the worksheets of the | ||
- | excel sheet containing the modbustcp mapping. This excel sheet is available for download from our website on the [[https:// | ||
- | To request the input voltage of a Multi or Quattro, connected to the VE.Bus sockets on the CCGX, use the following settings: unit-id 246, and set the data address of the first request register to 3. | + | ==== 7. Support ==== |
- | The ModbusTCP reply will contain 2302. Divide it by 10, as specified in cell E3, and then you have the voltage: 230.2 Volts AC. | + | The recommended method for support on Modbus-TCP questions is to use the [[https://community.victronenergy.com/ |
- | ==== Enabling ModbusTCP | + | Direct company support is only offered |
- | By default, ModbusTCP is disabled. To enable it, go into the settings menu, scroll down to ' | + | |
- | ==== What is a unit-id and what do I need to set it to? ==== | + | ==== 8. FAQ ==== |
- | The unit-id, sometimes called ‘slave address’, specifies how a product connected to the CCGX needs to be addressed. See the tab ‘Unit ID mapping’ tab in the Modbus-TCP excel sheet. | + | |
- | ==== Which products can be interfaced via Modbus TCP? ==== | + | === Q1: Which products can be interfaced via Modbus-TCP? === |
All products that can be connected to the [[https:// | All products that can be connected to the [[https:// | ||
- | ==== Can I change a configuration setting in a Multi - for example: the absorption voltage? | + | === Q2: Can I change a configuration setting in a Multi - for example: the absorption voltage? === |
No. | No. | ||
- | ==== Can I request multiple registers at the same time? ==== | + | === Q3: Can I request multiple registers at the same time? === |
Yes, you can! Though make sure not to include non existing registers in your query. Querying register 1 to 100 for example will not work, since registers 1 and 2 do not exist. | Yes, you can! Though make sure not to include non existing registers in your query. Querying register 1 to 100 for example will not work, since registers 1 and 2 do not exist. | ||
- | ==== Can I implement more features myself? | + | === Q4: Can I implement more features myself? === |
Yes, you can! We are, slowly, making the Color Control code open source, and the Modbus-TCP sources are already available on https:// | Yes, you can! We are, slowly, making the Color Control code open source, and the Modbus-TCP sources are already available on https:// | ||
- | ==== In a parallel or three-phase system, how can I address a single unit? ==== | + | === Q5: In a parallel or three-phase system, how can I address a single unit? === |
- | You cannot interface with them individually if they are configured for parallel-working; | + | You cannot interface with them individually if they are configured for parallel-working; |
+ | === Q6: Will unit-id' | ||
- | ==== Will unit-id' | + | No. |
- | It may change in the case of VEdirect Devices connected via USB - but even then our experience is that it will only change in the first reboot. | + | === Q7: Advanced debugging === |
- | Unit-id' | ||
- | ==== Advanced debugging ==== | ||
- | If all unit-id' | + | If all unit-id' |
Follow these steps: | Follow these steps: | ||
- | - Enable SSH | + | - [[ccgx: |
- | - Login: use for example Putty in Windows - or simply type //ssh root@192.168.12.10// on a Linux or Mac terminal console. Replace that ip addresses with the one on the CCGX. Use the password as entered in step 1. (see [[ccgx: | + | - Login with SSH (use for example Putty in Windows - or simply type //ssh root@[ip address here]// on a Linux or Mac terminal console. |
- List the latest log file:< | - List the latest log file:< | ||
- | cat / | + | cat /var/ |
</ | </ | ||
Line 100: | Line 148: | ||
2016-01-08 16: | 2016-01-08 16: | ||
- | In most cases the problem will be found in either the unit's id address; or the register addresses. Double check the numbers shown in the output with the numbers as used in your modbustcp | + | In most cases the problem will be found in either the unit's id address; or the register addresses. Double check the numbers shown in the output with the numbers as used in your Modbus-TCP |
+ | |||
+ | === Q8: Does Modbus-TCP support ESS? === | ||
+ | |||
+ | Yes. See the [[https:// | ||
- | ==== Does Modbus TCP support Hub-4? ==== | ||
- | Yes. See the [[https:// | ||
- | ==== Disqus ==== | ||
- | ~~DISQUS~~ |
ccgx/modbustcp_faq.1522230743.txt.gz · Last modified: 2018-03-28 11:52 by justin_tyers_live_a_c