XRW2G Menu▼

XRW2G Menu

Introduction

The XBee, RS-232 and USB versions of the XRW2G module can be set to World Data Mode by placing a jumper on the internal JP3 header. The jumper must be in place on start-up. In this mode, the XRW2G will transmit a 98 byte data packet over the serial port at user defined intervals. The XBee version transmits the packet using a 2.4GHz 802.15.4 XBee-PRO wireless transceiver. Channel D is used with the default PAN ID. You will need an XBee-PRO or XBee modem to receive data for your application.  We manufacture a variety of XBee and XBee-PRO modems.

Data Format

'#'                   0  STX
UNIT ID PREFIX        1  First character (A-Z) for serial number
UNIT ID MSB           2  high byte of sending station ID
UNIT ID LSB           3  low byte of sending station ID
PACKET LENGTH         4  number of byte for packet including STX through CRC
PACKET TYPE           5  type of packet we are sending, 14
SEQUENCE MSB          6
SEQUENCE LSB          7

PULSE_COUNT[0] MSB    8  
PULSE_COUNT[0] LSB    9
PULSE_TIME[0] MSB     10
PULSE_TIME[0] LSB     11
PULSE_MIN_TIME[0] MSB 12
PULSE_MIN_TIME[0] LSB 13
PULSE_MAX_TIME[0] MSB 14
PULSE_MAX_TIME[0] LSB 15
PULSE_SUM[0] MSB      16
PULSE_SUM[0]          17
PULSE_SUM[0]          18
PULSE_SUM[0] LSB      19

PULSE_COUNT[1] MSB    20  
PULSE_COUNT[1] LSB    21
PULSE_TIME[1] MSB     22
PULSE_TIME[1] LSB     23
PULSE_MIN_TIME[1] MSB 24
PULSE_MIN_TIME[1] LSB 25
PULSE_MAX_TIME[1] MSB 26
PULSE_MAX_TIME[1] LSB 27
PULSE_SUM[1] MSB      28
PULSE_SUM[1]          29
PULSE_SUM[1]          30
PULSE_SUM[1] LSB      31

PULSE_COUNT[2] MSB    32 
PULSE_COUNT[2] LSB    33
PULSE_TIME[2] MSB     34
PULSE_TIME[2] LSB     35
PULSE_MIN_TIME[2] MSB 36
PULSE_MIN_TIME[2] LSB 37
PULSE_MAX_TIME[2] MSB 38
PULSE_MAX_TIME[2] MSB  39
PULSE_SUM[2] MSB      40
PULSE_SUM[2]          41
PULSE_SUM[2]          42
PULSE_SUM[2] LSB      43

ANALOG_CURRENT[0] MSB 44
ANALOG_CURRENT[0] LSB 45
ANALOG_AVG[0] MSB     46
ANALOG_AVG[0] LSB     47
ANALOG_STD_DEV[0] MSB 48
ANALOG_STD_DEV[0] LSB 49

ANALOG_CURRENT[1] MSB 50
ANALOG_CURRENT[1] LSB 51
ANALOG_AVG[1] MSB     52
ANALOG_AVG[1] LSB     53
ANALOG_STD_DEV[1] MSB 54
ANALOG_STD_DEV[1] LSB 55

ANALOG_CURRENT[2] MSB 56
ANALOG_CURRENT[2] LSB 57
ANALOG_AVG[2] MSB     58
ANALOG_AVG[2] LSB     59
ANALOG_STD_DEV[2] MSB 60
ANALOG_STD_DEV[2] LSB 61

ANALOG_CURRENT[3] MSB 62
ANALOG_CURRENT[3] LSB 63
ANALOG_AVG[3] MSB     64
ANALOG_AVG[3] LSB     65
ANALOG_STD_DEV[3] MSB 66
ANALOG_STD_DEV[3] LSB 67

ANALOG_CURRENT[4] MSB 68
ANALOG_CURRENT[4] LSB 69
ANALOG_AVG[4] MSB     70
ANALOG_AVG[4] LSB     71
ANALOG_STD_DEV[4] MSB 72
ANALOG_STD_DEV[4] LSB 73

ANALOG_CURRENT[5] MSB 74
ANALOG_CURRENT[5] LSB 75
ANALOG_AVG[5] MSB     76
ANALOG_AVG[5] LSB     77
ANALOG_STD_DEV[5] MSB 78
ANALOG_STD_DEV[5] LSB 79

ANALOG_CURRENT[6] MSB 80
ANALOG_CURRENT[6] LSB 81
ANALOG_AVG[6] MSB     82
ANALOG_AVG[6] LSB     83
ANALOG_STD_DEV[6] MSB 84
ANALOG_STD_DEV[6] LSB 85

ANALOG_CURRENT[7] MSB 86
ANALOG_CURRENT[7] LSB 87
ANALOG_AVG[7] MSB     88
ANALOG_AVG[7] LSB     89
ANALOG_STD_DEV[7] MSB 90
ANALOG_STD_DEV[7] LSB 91

UPTIME_MINUTES MSB    92
UPTIME_MINUTES LSB    93

INTERVAL MS MSB       94
INTERVAL MS LSB       95

CRC MSB               96 high byte of CRC on everything after STX and before CRC
CRC LSB               97 low byte of CRC

Example Code:

C CRC Function

int16 crc_chk(int8 *data, int8 length) {
	int8 j;
	int16 reg_crc=0xFFFF;

	while ( length-- ) {
		reg_crc ^= *data++;

		for ( j=0 ; j<8 ; j++ ) {
			if ( reg_crc & 0x01 ) {
				reg_crc=(reg_crc>>1) ^ 0xA001;
			} else {
				reg_crc=reg_crc>>1;
			}
		}	
	}
	
	return reg_crc;
}