1

I am using Docklight Scripting to put together a VBScript that communicates with a device via RS232. All the commands are sent in Hex.

When I want to read from the device, I send a 32-bit address, a 16-bit read length, and an 8-bit checksum.

When I want to write to the device, I send a 16-bit data length, the data, followed by an 8-bit checksum.

In Hex, the data that is sent to the device is the following:

AA0001110200060013F81800104D
AA 00 01 11 02 0006 0013F818 0010 4D

(spaced for ease of reading)

AA000111020006 is the protocol header, where:

  • AA is the Protocol Byte
  • 00 is the Source ID
  • 01 is the Dest ID
  • 11 is the Message Type
  • 02 is the Command Byte
  • 0006 is the Length Byte(s)

The remainder of the string is broken down as follows:

  • 0013F818 is the 32-bit address
  • 0010 is the 16 bit read length
  • 4D is the 8-bit checksum

If the string is not correct, or the checksum is invalid the device replies back with an error string. However, I am not getting an error. The device replies back with the following hex string:

AA0100120200100001000000000100000000000001000029
AA 01 00 12 02 0010 00010000000001000000000000010000 29

(spaced for ease of reading)

Again, the first part of the string (AA00011102) is a part of the protocol header, where:

  • AA is the Protocol Byte
  • 01 is the Source ID
  • 00 is the Dest ID
  • 12 is the Message Type
  • 02 is the Command Byte

The difference between what is sent to the device, and what the device replies back with is that the length bytes is not a "static" part of the protocol header, and will change based of the request. The remainder of the string is broken down as follows:

  • 0010 is the Length Byte(s)
  • 00010000000001000000000000010000 is the data
  • 29 is the 8-bit Check Sum

The goal is to read a timer that is stored in the NVM. The timer is stored in the upper halves of 60 4-byte NVM words.

The instructions specify that I need to read the first two bytes of each word, and then sum the results.

Verbatim, the instructions say:

  • Read the NVM elapsed timer. The timer is stored in the upper halves of 60 4-byte words.

  • Read the first two bytes of each word of the timer. Read the 16 bit values of these locations:

    13F800H, 13F804H, 13808H, and continue to 13F8ECH.

  • Sum the results. Multiply the sum by 409.6 seconds, then divide by 3600 to get the results in hours.

My knowledge of bits, and bytes, and all other things is a bit cloudy. The first thing I need to confirm is that I am understanding the read protocol correctly.

  • I am assuming that when I specify 0010 as the 16 bit read length, that translates to the 16-bit values that the instructions want me to read.

  • The second thing I need to understand a little better is that when it tells me to read the first two bytes of each word, what exactly constitutes the first two bytes of each word?

  • I think what confuses me a little more is that the instructions say the timer is stored in the upper half of the 4 byte word (which to me seems like the first half).

I've sat with another colleague of mine for a day trying to figure out how to make this all work, and we haven't had any consistent results with our trials.

I have looked on the internet to find something that would explain this better in the context being used.

Another worry is that the technical data I am using to accomplish this project isn't 100% accurate in their instructions, and they have conflicting information or skipping information throughout their publication (which is probably close to 1000 pages long).

What I would really appreciate is someone who has a much better understanding of hex / binary to review the instructions I've posted, and provide some feedback on my interpretation of the instructions provided, and provide any information.

Community
  • 1
  • 1
Jonathan L
  • 11
  • 1
  • It looks as if the 0010 tells you how many bytes follow the length field. You have 16 bytes after the length field. Bytes in a word can be ordered in many different ways (search for "nuxi problem"). You'll need to know which ordering your data has - possibly by inspection - to determine which byte ordering you're using. – user3486184 Jul 24 '17 at 18:28
  • I read about the "nuxi" problem the other day - and we tried arranging the bytes in different ways and summing them up, but, I haven't had any consistent results or meaningful results that make any sense. There is a method to erase the timer, so I am going to try to do that and then look at the data again. I really think I am missing something somewhere - I'm not exactly sure where though – Jonathan L Jul 25 '17 at 18:43

0 Answers0