Help reading data


andybdjuk

Recommended Posts

Hi, I am trying to read data from an inverter, I have been using Quickmod.

From the Attached info I have set the port ID to 0x0011- logical address 18, is this right?

Communication runs at 9,600 bps with 8 data bits and no parity.

I cannot get any communication with the divice, I know its working as it works on its own software.

Below is text for somebodys experimenting.

I am interested in the data from the 0xB6, ie voltages.

Can you help me set up quickmod to read this stuff

*************************

Serial Protocol

Every packet has the following common fields:

The first 4 bytes contain the packets source and destination:

0x0000: 16 bit destination address for the packet.

0x0000: 16 bit source address for the packet.

0x0000: 16 bit command ID.

The master device (the computer) uses address 0x0000. In the probe command from the Windows software, the source and destination addresses are both set to 0x0000. This may indicate the packet is a broadcast packet intended for all non-master devices on the bus. All data is transmitted as big-endian (most significant byte first).

0x00: The last byte of every packet is a checksum. It is the lower 8 bits of the sum of all the previous bytes in the packet.

I've included the responses to each command from my Soladin 600, address 0x0011. This appears to be the same address for all Soladin 600's.

0xC1: Probe

The first packet transmitted seems to be a probe command. Note that the source and destination addresses are both set to 0x0000.

TX: 00 00 00 00 C1 00 00 00 C1

RX: 00 00 11 00 C1 F3 00 00 C5

Other than the device address, the response from my Soladin 600 doesn't appear to contain any information.

In cases where there are more than once device, will they all respond to this command?

Can a devices address be changed?

0xB4: Firmware Information

Returns version information about the firmware.

TX: 11 00 00 00 B4 00 00 00 C5

RX: 00 00 11 00 B4 F3 00 00 00 00 00 00 00 E3 00 04 01 34 06 00 00 00 00 00 00 00 00 00 00 00 DA

0xE3: Firmware ID

0x0104: Firmware version (1.04)

0x0634: Firmware date

0xB6: Device Stats

Returns statistics about the operation of the device.

TX: 11 00 00 00 B6 00 00 00 C7

RX: 00 00 11 00 B6 F3 00 00 04 03 35 00 8A 13 F4 00 00 00 24 00 90 0B 00 1F DB BC 01 00 00 00 FD

0x06: 0x0000: Flags, normal operation in the response above

0x08: 0x0304: PV voltage * 10 = 77.2 V in the response above

0x0A: 0x0035: PV amperage * 100 = 0.53 A

0x0C: 0x138A: Grid frequency * 100 = 50.02 Hz

0x0E: 0x00F4: Grid voltage = 224 V

0x10: 0x0000: Unknown

0x12: 0x0024: Grid power output = 36 W

0x14: 0x000B90: Total grid power output * 100 = 29.60 kWh

0x17: 0x1F: Device temperature = 31

Link to comment
Share on other sites

This is not modbus so would not work with QuickMod. It looks like you can use the B6 function to get the data you want. Create a new Serial device with a NULL protocol. Then open the monitor and type in:

\x11\x00\x00\x00\xb6\x00\x00\x00\xc7

and see if you get a response.

Link to comment
Share on other sites

Thanks, i done as suggested and got the following:-

Tx (18:37:58.718): \x11\x00\x00\x00\xB6\x00\x00\x00\xC7

Rx (18:37:58.730): \x00\x00\x11\x00\xB6\xF3\x00\x00\xC3\x01\x77\x00\x8A\x13\xE7\x00\x00\x00\x31\x00\x9F\x84\x01\x18\x8A\x64\x07\x00\x00\x00\xDB

Can you give me some pointers as to how i get the usefull data from this string,

Thanks

Andy

Link to comment
Share on other sites

Well, PV voltage for example is the 8th and 9th byte of the string, so if you were to create a little sequence to poll with that string and get a string response, you can then parse out the necessary bytes. I recommend taking the string and converting it into an array of numbers using the asca() function. Then, PV voltage is simply (array[7] + array[8] * 256) / 10

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.