Erick / Mbed 2 deprecated ICE_BLE_TEST

Dependencies:   NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed

Fork of ICE by Erick

Committer:
davidjhoward
Date:
Tue Sep 06 21:40:04 2016 +0000
Revision:
8:abe51ae5ef8b
Parent:
7:c0c03193612d
Child:
9:ef0ca2f8a8a6
modbus code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jmarkel44 0:65cfa4873284 1 /******************************************************************************
davidjhoward 4:c35db3946fd8 2 *
jmarkel44 0:65cfa4873284 3 * File: ModbusMaster.cpp
jmarkel44 0:65cfa4873284 4 * Desciption: source for the ICE Modbus Master
jmarkel44 0:65cfa4873284 5 *
jmarkel44 0:65cfa4873284 6 *****************************************************************************/
jmarkel44 0:65cfa4873284 7 #include "global.h"
jmarkel44 0:65cfa4873284 8 #include <stdio.h>
jmarkel44 0:65cfa4873284 9 #include "BLEDataHandler.h"
davidjhoward 4:c35db3946fd8 10 #include "ModbusMaster.h"
davidjhoward 8:abe51ae5ef8b 11 #include "MbedJSONValue.h"
jmarkel44 0:65cfa4873284 12
jmarkel44 0:65cfa4873284 13 /*****************************************************************************
jmarkel44 0:65cfa4873284 14 * Function: ModbusMaster
jmarkel44 0:65cfa4873284 15 * Description: entry point for the Modbus Master
jmarkel44 0:65cfa4873284 16 *
jmarkel44 0:65cfa4873284 17 * @param (IN) args (user-defined arguments)
jmarkel44 0:65cfa4873284 18 * @return none
jmarkel44 0:65cfa4873284 19 *****************************************************************************/
davidjhoward 7:c0c03193612d 20
davidjhoward 8:abe51ae5ef8b 21 struct Register {
davidjhoward 8:abe51ae5ef8b 22 std::string name;
davidjhoward 8:abe51ae5ef8b 23 std::string units;
davidjhoward 8:abe51ae5ef8b 24 double min;
davidjhoward 8:abe51ae5ef8b 25 double max;
davidjhoward 8:abe51ae5ef8b 26 int reg;
davidjhoward 8:abe51ae5ef8b 27 int rtype;
davidjhoward 8:abe51ae5ef8b 28 int type;
davidjhoward 8:abe51ae5ef8b 29 std::string fmt;
davidjhoward 8:abe51ae5ef8b 30 };
davidjhoward 8:abe51ae5ef8b 31 std::map<std::string,Register> IoConfigmap;
davidjhoward 8:abe51ae5ef8b 32
jmarkel44 0:65cfa4873284 33 void ModbusMaster(void const *args)
jmarkel44 0:65cfa4873284 34 {
jmarkel44 0:65cfa4873284 35 printf("\r%s has started...\n", __func__);
davidjhoward 8:abe51ae5ef8b 36 char scratch_buf[1024];
davidjhoward 8:abe51ae5ef8b 37 MbedJSONValue json_value;
jmarkel44 0:65cfa4873284 38
davidjhoward 8:abe51ae5ef8b 39 std::vector<mDot::mdot_file> file_list = GLOBAL_mdot->listUserFiles();
davidjhoward 8:abe51ae5ef8b 40 for (std::vector<mDot::mdot_file>::iterator i = file_list.begin(); i != file_list.end(); ++i) {
davidjhoward 8:abe51ae5ef8b 41 if( strncmp( i->name, "input", strlen("input")) == 0 ) {
davidjhoward 8:abe51ae5ef8b 42
davidjhoward 8:abe51ae5ef8b 43 printf("\r(%d)FOUND INPUT FILE: %s\n", __LINE__, i->name);
davidjhoward 8:abe51ae5ef8b 44
davidjhoward 8:abe51ae5ef8b 45 bool status = GLOBAL_mdot->readUserFile(i->name, (void *)scratch_buf, 1024);
davidjhoward 8:abe51ae5ef8b 46 if( status != true ) {
davidjhoward 8:abe51ae5ef8b 47 printf("\r(%d)read file failed, status=%d\n", __LINE__, status);
davidjhoward 8:abe51ae5ef8b 48 } else {
davidjhoward 8:abe51ae5ef8b 49 printf("\r(%d)Read File SUCCESS: %s\n", __LINE__, scratch_buf );
davidjhoward 8:abe51ae5ef8b 50 }
davidjhoward 8:abe51ae5ef8b 51
davidjhoward 8:abe51ae5ef8b 52 parse( json_value, scratch_buf );
davidjhoward 8:abe51ae5ef8b 53
davidjhoward 8:abe51ae5ef8b 54 std::string id = json_value["id"].get<std::string>().c_str();
davidjhoward 8:abe51ae5ef8b 55 IoConfigmap[id].name = json_value["name"].get<std::string>().c_str();
davidjhoward 8:abe51ae5ef8b 56 IoConfigmap[id].units = json_value["units"].get<std::string>().c_str();
davidjhoward 8:abe51ae5ef8b 57 IoConfigmap[id].min = json_value["min"].get<double>();
davidjhoward 8:abe51ae5ef8b 58 IoConfigmap[id].max = json_value["max"].get<double>();
davidjhoward 8:abe51ae5ef8b 59 IoConfigmap[id].reg = json_value["reg"].get<int>();
davidjhoward 8:abe51ae5ef8b 60 IoConfigmap[id].rtype = json_value["rtype"].get<int>();
davidjhoward 8:abe51ae5ef8b 61 IoConfigmap[id].type = json_value["type"].get<int>();
davidjhoward 8:abe51ae5ef8b 62 IoConfigmap[id].fmt = json_value["fmt"].get<std::string>().c_str();
davidjhoward 8:abe51ae5ef8b 63
davidjhoward 8:abe51ae5ef8b 64 }
davidjhoward 8:abe51ae5ef8b 65 logInfo("file: %s", i->name);
davidjhoward 7:c0c03193612d 66 }
davidjhoward 7:c0c03193612d 67
jmarkel44 0:65cfa4873284 68 while ( true ) {
davidjhoward 4:c35db3946fd8 69 // Send request to Fluorometer
davidjhoward 4:c35db3946fd8 70 printf("\rsending request to FLU\n");
davidjhoward 4:c35db3946fd8 71 modbus_read_L1V(1,9,13);
davidjhoward 4:c35db3946fd8 72 // Wait 30mS
davidjhoward 4:c35db3946fd8 73 printf("\rsent request to FLU\n");
davidjhoward 4:c35db3946fd8 74 osDelay(30);
davidjhoward 4:c35db3946fd8 75 printf("\rgetting TRASAR readings\n");
davidjhoward 4:c35db3946fd8 76 // Read data from Fluorometer
davidjhoward 4:c35db3946fd8 77 MB_FLU_VALUES flu_values;
davidjhoward 4:c35db3946fd8 78 if( mbFluGetData( &flu_values ) == false ) {
davidjhoward 4:c35db3946fd8 79 printf("\rCould not get TRASAR readings, power cycle\n");
davidjhoward 4:c35db3946fd8 80 DigitalOut flu_power(PA_11);
davidjhoward 4:c35db3946fd8 81 flu_power = 1; // turn modbus power off
davidjhoward 4:c35db3946fd8 82 osDelay(1000);
davidjhoward 4:c35db3946fd8 83 flu_power = 0; // provide power to the modbus
davidjhoward 4:c35db3946fd8 84 flu_values.trasar = 0.0;
davidjhoward 4:c35db3946fd8 85 osDelay(5000);
davidjhoward 4:c35db3946fd8 86 return;
davidjhoward 4:c35db3946fd8 87 }
jmarkel44 0:65cfa4873284 88 }
davidjhoward 4:c35db3946fd8 89 }
davidjhoward 4:c35db3946fd8 90
davidjhoward 4:c35db3946fd8 91
davidjhoward 4:c35db3946fd8 92 volatile char modbus_buffer_char;
davidjhoward 4:c35db3946fd8 93 volatile bool modbus_interrupt_complete = false;
davidjhoward 4:c35db3946fd8 94
davidjhoward 4:c35db3946fd8 95 uint8_t modbus_input_buffer[SIZE_MB_BUFFER];// 1byte address + 1 byte function +1 byte number of regs + 12 bytes of data + 2 bytes for crc response frame from slave
davidjhoward 4:c35db3946fd8 96 volatile uint8_t modbus_input_buffer_counter = 0;
davidjhoward 4:c35db3946fd8 97
davidjhoward 4:c35db3946fd8 98 //Frame crc calucation
davidjhoward 4:c35db3946fd8 99 uint16_t modbus_crc(uint8_t* buf, int len)
davidjhoward 4:c35db3946fd8 100 {
davidjhoward 4:c35db3946fd8 101 uint16_t crc = 0xFFFF;
davidjhoward 4:c35db3946fd8 102
davidjhoward 4:c35db3946fd8 103 for (int pos = 0; pos < len; pos++) {
davidjhoward 4:c35db3946fd8 104 crc ^= (uint16_t)buf[pos]; // XOR byte into least sig. byte of crc
davidjhoward 4:c35db3946fd8 105
davidjhoward 4:c35db3946fd8 106 for (int i = 8; i != 0; i--) {
davidjhoward 4:c35db3946fd8 107 // Loop over each bit
davidjhoward 4:c35db3946fd8 108 if ((crc & 0x0001) != 0) {
davidjhoward 4:c35db3946fd8 109 // If the LSB is set
davidjhoward 4:c35db3946fd8 110 crc >>= 1; // Shift right and XOR 0xA001
davidjhoward 4:c35db3946fd8 111 crc ^= 0xA001;
davidjhoward 4:c35db3946fd8 112 } else // Else LSB is not set
davidjhoward 4:c35db3946fd8 113 crc >>= 1; // Just shift right
davidjhoward 4:c35db3946fd8 114 }
davidjhoward 4:c35db3946fd8 115 }
davidjhoward 4:c35db3946fd8 116 // Note, this number has low and high bytes swapped, so use it accordingly (or swap bytes)
davidjhoward 4:c35db3946fd8 117 return crc;
davidjhoward 4:c35db3946fd8 118 }
davidjhoward 4:c35db3946fd8 119
davidjhoward 4:c35db3946fd8 120 RawSerial modbus(PA_2, PA_3);
davidjhoward 4:c35db3946fd8 121 DigitalOut modbus_enable0(PB_0);
davidjhoward 4:c35db3946fd8 122 DigitalOut modbus_enable1(PB_1);
davidjhoward 4:c35db3946fd8 123
davidjhoward 4:c35db3946fd8 124 void modbus_init( uint16_t baudRate )
davidjhoward 4:c35db3946fd8 125 {
davidjhoward 4:c35db3946fd8 126 modbus.baud(baudRate);
davidjhoward 4:c35db3946fd8 127 modbus.attach(&modbus_recv, RawSerial::RxIrq);
davidjhoward 4:c35db3946fd8 128 }
davidjhoward 4:c35db3946fd8 129
davidjhoward 4:c35db3946fd8 130 //call back when character goes into RX buffer for RS485 modbus
davidjhoward 4:c35db3946fd8 131 void modbus_recv()
davidjhoward 4:c35db3946fd8 132 {
davidjhoward 4:c35db3946fd8 133
davidjhoward 4:c35db3946fd8 134 if (modbus.readable()) {
davidjhoward 4:c35db3946fd8 135 modbus_buffer_char = modbus.getc();
davidjhoward 4:c35db3946fd8 136 if (modbus_input_buffer_counter == 0 && modbus_buffer_char == 0x00) {
davidjhoward 4:c35db3946fd8 137 modbus_input_buffer_counter = 0;
davidjhoward 4:c35db3946fd8 138 } else {
davidjhoward 4:c35db3946fd8 139 modbus_input_buffer[modbus_input_buffer_counter] = modbus_buffer_char;
davidjhoward 4:c35db3946fd8 140 modbus_input_buffer_counter++;
davidjhoward 4:c35db3946fd8 141 }
davidjhoward 4:c35db3946fd8 142 }
davidjhoward 4:c35db3946fd8 143
davidjhoward 4:c35db3946fd8 144 if (modbus_input_buffer_counter > modbus_input_buffer[2] + 4) {
davidjhoward 4:c35db3946fd8 145 modbus_interrupt_complete = true;
davidjhoward 4:c35db3946fd8 146 modbus_input_buffer_counter = 0;
davidjhoward 4:c35db3946fd8 147 }
davidjhoward 4:c35db3946fd8 148 }
davidjhoward 4:c35db3946fd8 149
davidjhoward 4:c35db3946fd8 150 // Read modbus master frame
davidjhoward 4:c35db3946fd8 151 void modbus_read_L1V(uint8_t slave_address, uint16_t firstReg, uint16_t noRegs)
davidjhoward 4:c35db3946fd8 152 {
davidjhoward 4:c35db3946fd8 153 uint8_t L1V[8] = {slave_address, 0x04, 0x00, 0x02, 0x00, 0x02, 0xD1, 0x16};
davidjhoward 4:c35db3946fd8 154
davidjhoward 4:c35db3946fd8 155 L1V[2] = (firstReg >> 8) & 0xFF;
davidjhoward 4:c35db3946fd8 156 L1V[3] = firstReg & 0xFF;
davidjhoward 4:c35db3946fd8 157 L1V[4] = (noRegs >> 8) & 0xFF;
davidjhoward 4:c35db3946fd8 158 L1V[5] = noRegs & 0xFF;
davidjhoward 4:c35db3946fd8 159 L1V[6] = modbus_crc(L1V,6) & 0xFF;
davidjhoward 4:c35db3946fd8 160 L1V[7] = (modbus_crc(L1V,6)>>8) & 0xFF;
davidjhoward 4:c35db3946fd8 161
davidjhoward 4:c35db3946fd8 162 modbus_enable0 = 1;
davidjhoward 4:c35db3946fd8 163 modbus_enable1 = 1;
davidjhoward 4:c35db3946fd8 164
davidjhoward 4:c35db3946fd8 165 for (uint8_t i = 0; i < 8; i++)
davidjhoward 4:c35db3946fd8 166 modbus.putc(L1V[i]);
davidjhoward 4:c35db3946fd8 167
davidjhoward 4:c35db3946fd8 168 wait_ms(2);
davidjhoward 4:c35db3946fd8 169 modbus_enable0 = 0;
davidjhoward 4:c35db3946fd8 170 modbus_enable1 = 0;
davidjhoward 4:c35db3946fd8 171
davidjhoward 4:c35db3946fd8 172 }
davidjhoward 4:c35db3946fd8 173
davidjhoward 4:c35db3946fd8 174 bool mbInterruptComplete()
davidjhoward 4:c35db3946fd8 175 {
davidjhoward 4:c35db3946fd8 176 if (modbus_interrupt_complete) {
davidjhoward 4:c35db3946fd8 177 modbus_interrupt_complete = false;
davidjhoward 4:c35db3946fd8 178 return true;
davidjhoward 4:c35db3946fd8 179 } else {
davidjhoward 4:c35db3946fd8 180 return false;
davidjhoward 4:c35db3946fd8 181 }
davidjhoward 4:c35db3946fd8 182 }
davidjhoward 4:c35db3946fd8 183
davidjhoward 4:c35db3946fd8 184 bool mbFluGetData( MB_FLU_VALUES *flu_values )
davidjhoward 4:c35db3946fd8 185 {
davidjhoward 4:c35db3946fd8 186 MR_REGISTER_FLOAT trasar;
davidjhoward 4:c35db3946fd8 187 MR_REGISTER_FLOAT tag;
davidjhoward 4:c35db3946fd8 188 MR_REGISTER_FLOAT rz;
davidjhoward 4:c35db3946fd8 189 MR_REGISTER_FLOAT rs;
davidjhoward 4:c35db3946fd8 190 MR_REGISTER_FLOAT tra_back;
davidjhoward 4:c35db3946fd8 191 MR_REGISTER_FLOAT turb;
davidjhoward 4:c35db3946fd8 192 MR_REGISTER_WORD cf;
davidjhoward 4:c35db3946fd8 193 // MR_REGISTER_WORD crc;
davidjhoward 4:c35db3946fd8 194
davidjhoward 4:c35db3946fd8 195 if (mbInterruptComplete() != true ) {
davidjhoward 4:c35db3946fd8 196 return false;
davidjhoward 4:c35db3946fd8 197 }
davidjhoward 4:c35db3946fd8 198
davidjhoward 4:c35db3946fd8 199 // printf("Address: %d, Function: %d, No Regs: %d, \r\n",modbus_input_buffer[0],modbus_input_buffer[1],modbus_input_buffer[2]/2);
davidjhoward 4:c35db3946fd8 200 //
davidjhoward 4:c35db3946fd8 201 // printf("Data: %x%x,%x%x,%x%x,%x%x,%x%x,%x%x,\r\n%x%x,%x%x,%x%x,%x%x,%x%x,%x%x,\r\n%x%x\r\n",
davidjhoward 4:c35db3946fd8 202 // modbus_input_buffer[3],modbus_input_buffer[4], modbus_input_buffer[5],modbus_input_buffer[6], // Trasar
davidjhoward 4:c35db3946fd8 203 // modbus_input_buffer[7],modbus_input_buffer[8], modbus_input_buffer[9],modbus_input_buffer[10], // Tag
davidjhoward 4:c35db3946fd8 204 // modbus_input_buffer[11],modbus_input_buffer[12], modbus_input_buffer[13],modbus_input_buffer[14], // Rz
davidjhoward 4:c35db3946fd8 205 // modbus_input_buffer[15],modbus_input_buffer[16], modbus_input_buffer[17],modbus_input_buffer[18], // Rs
davidjhoward 4:c35db3946fd8 206 // modbus_input_buffer[19],modbus_input_buffer[20], modbus_input_buffer[21],modbus_input_buffer[22], // TraBack
davidjhoward 4:c35db3946fd8 207 // modbus_input_buffer[23],modbus_input_buffer[24], modbus_input_buffer[25],modbus_input_buffer[26], // TraBack
davidjhoward 4:c35db3946fd8 208 // modbus_input_buffer[27],modbus_input_buffer[28]); // Cf
davidjhoward 4:c35db3946fd8 209 // printf("CRC: %x%x\r\n",modbus_input_buffer[29], modbus_input_buffer[30]);
davidjhoward 4:c35db3946fd8 210
davidjhoward 4:c35db3946fd8 211 trasar.b.lo_lo = modbus_input_buffer[4];
davidjhoward 4:c35db3946fd8 212 trasar.b.lo_hi = modbus_input_buffer[3];
davidjhoward 4:c35db3946fd8 213 trasar.b.hi_lo = modbus_input_buffer[6];
davidjhoward 4:c35db3946fd8 214 trasar.b.hi_hi = modbus_input_buffer[5];
davidjhoward 4:c35db3946fd8 215 // printf("Trasar=%2.2f, 0x%x, 0x%x\r\n",trasar.f, trasar.w.lo, trasar.w.hi);
davidjhoward 4:c35db3946fd8 216 flu_values->trasar = trasar.f;
davidjhoward 4:c35db3946fd8 217
davidjhoward 4:c35db3946fd8 218 tag.b.lo_lo = modbus_input_buffer[8];
davidjhoward 4:c35db3946fd8 219 tag.b.lo_hi = modbus_input_buffer[7];
davidjhoward 4:c35db3946fd8 220 tag.b.hi_lo = modbus_input_buffer[10];
davidjhoward 4:c35db3946fd8 221 tag.b.hi_hi = modbus_input_buffer[9];
davidjhoward 4:c35db3946fd8 222 // printf("tag=%2.2f, 0x%x, 0x%x\r\n",tag.f, tag.w.lo, tag.w.hi);
davidjhoward 4:c35db3946fd8 223 flu_values->tag = tag.f;
davidjhoward 4:c35db3946fd8 224
davidjhoward 4:c35db3946fd8 225 rz.b.lo_lo = modbus_input_buffer[12];
davidjhoward 4:c35db3946fd8 226 rz.b.lo_hi = modbus_input_buffer[11];
davidjhoward 4:c35db3946fd8 227 rz.b.hi_lo = modbus_input_buffer[14];
davidjhoward 4:c35db3946fd8 228 rz.b.hi_hi = modbus_input_buffer[13];
davidjhoward 4:c35db3946fd8 229 // printf("rz=%2.2f, 0x%x, 0x%x\r\n",rz.f, rz.w.lo, rz.w.hi);
davidjhoward 4:c35db3946fd8 230 flu_values->rz = rz.f;
davidjhoward 4:c35db3946fd8 231
davidjhoward 4:c35db3946fd8 232 rs.b.lo_lo = modbus_input_buffer[16];
davidjhoward 4:c35db3946fd8 233 rs.b.lo_hi = modbus_input_buffer[15];
davidjhoward 4:c35db3946fd8 234 rs.b.hi_lo = modbus_input_buffer[18];
davidjhoward 4:c35db3946fd8 235 rs.b.hi_hi = modbus_input_buffer[17];
davidjhoward 4:c35db3946fd8 236 // printf("rs=%2.2f, 0x%x, 0x%x\r\n",rs.f, rs.w.lo, rs.w.hi);
davidjhoward 4:c35db3946fd8 237 flu_values->rs = rs.f;
davidjhoward 4:c35db3946fd8 238
davidjhoward 4:c35db3946fd8 239 tra_back.b.lo_lo = modbus_input_buffer[20];
davidjhoward 4:c35db3946fd8 240 tra_back.b.lo_hi = modbus_input_buffer[19];
davidjhoward 4:c35db3946fd8 241 tra_back.b.hi_lo = modbus_input_buffer[22];
davidjhoward 4:c35db3946fd8 242 tra_back.b.hi_hi = modbus_input_buffer[21];
davidjhoward 4:c35db3946fd8 243 // printf("tra_back=%2.2f, 0x%x, 0x%x\r\n",tra_back.f, tra_back.w.lo, tra_back.w.hi);
davidjhoward 4:c35db3946fd8 244 flu_values->tra_back = tra_back.f;
davidjhoward 4:c35db3946fd8 245
davidjhoward 4:c35db3946fd8 246 turb.b.lo_lo = modbus_input_buffer[24];
davidjhoward 4:c35db3946fd8 247 turb.b.lo_hi = modbus_input_buffer[23];
davidjhoward 4:c35db3946fd8 248 turb.b.hi_lo = modbus_input_buffer[26];
davidjhoward 4:c35db3946fd8 249 turb.b.hi_hi = modbus_input_buffer[25];
davidjhoward 4:c35db3946fd8 250 // printf("turb=%2.2f, 0x%x, 0x%x\r\n",turb.f, turb.w.lo, turb.w.hi);
davidjhoward 4:c35db3946fd8 251 flu_values->turb = turb.f;
davidjhoward 4:c35db3946fd8 252
davidjhoward 4:c35db3946fd8 253 cf.b.lo = modbus_input_buffer[28];
davidjhoward 4:c35db3946fd8 254 cf.b.hi = modbus_input_buffer[27];
davidjhoward 4:c35db3946fd8 255 // printf("cf=%d, 0x%x,\r\n",cf.w, cf.w);
davidjhoward 4:c35db3946fd8 256 flu_values->cf = cf.w;
davidjhoward 4:c35db3946fd8 257
davidjhoward 4:c35db3946fd8 258 // crc.b.lo = modbus_input_buffer[30]; crc.b.hi = modbus_input_buffer[29];
davidjhoward 4:c35db3946fd8 259 // printf("crc=%d, 0x%x,\r\n",crc.w, crc.w);
davidjhoward 4:c35db3946fd8 260
davidjhoward 4:c35db3946fd8 261 return true;
davidjhoward 4:c35db3946fd8 262 }
davidjhoward 4:c35db3946fd8 263
davidjhoward 4:c35db3946fd8 264 bool mbTconGetData( MB_TCON_VALUES *tcon_values )
davidjhoward 4:c35db3946fd8 265 {
davidjhoward 4:c35db3946fd8 266 MR_REGISTER_INT tcon_cal;
davidjhoward 4:c35db3946fd8 267 MR_REGISTER_INT tcon_cmp;
davidjhoward 4:c35db3946fd8 268 MR_REGISTER_INT tcon_2pt;
davidjhoward 4:c35db3946fd8 269 MR_REGISTER_INT tcon_freq;
davidjhoward 4:c35db3946fd8 270 MR_REGISTER_INT rtd_degC;
davidjhoward 4:c35db3946fd8 271 MR_REGISTER_INT rtd_cal;
davidjhoward 4:c35db3946fd8 272 MR_REGISTER_INT rtd_raw;
davidjhoward 4:c35db3946fd8 273
davidjhoward 4:c35db3946fd8 274 if (mbInterruptComplete() != true ) {
davidjhoward 4:c35db3946fd8 275 return false;
davidjhoward 4:c35db3946fd8 276 }
davidjhoward 4:c35db3946fd8 277
davidjhoward 4:c35db3946fd8 278 // printf("Address: %d, Function: %d, No Regs: %d, \r\n",modbus_input_buffer[0],modbus_input_buffer[1],modbus_input_buffer[2]/2);
davidjhoward 4:c35db3946fd8 279 //
davidjhoward 4:c35db3946fd8 280 // printf("Data: %x%x,%x%x, %x%x,%x%x, %x%x,%x%x,\r\n%x%x,%x%x, %x%x,%x%x, %x%x,%x%x\r\n",
davidjhoward 4:c35db3946fd8 281 // modbus_input_buffer[3],modbus_input_buffer[4], modbus_input_buffer[5],modbus_input_buffer[6], // tcon_cal
davidjhoward 4:c35db3946fd8 282 // modbus_input_buffer[7],modbus_input_buffer[8], modbus_input_buffer[9],modbus_input_buffer[10], // tcon_cmp
davidjhoward 4:c35db3946fd8 283 // modbus_input_buffer[11],modbus_input_buffer[12], modbus_input_buffer[13],modbus_input_buffer[14], // tcon_2pt
davidjhoward 4:c35db3946fd8 284 // modbus_input_buffer[15],modbus_input_buffer[16], modbus_input_buffer[17],modbus_input_buffer[18], // rtd_degC
davidjhoward 4:c35db3946fd8 285 // modbus_input_buffer[19],modbus_input_buffer[20], modbus_input_buffer[21],modbus_input_buffer[22], // rtd_cal
davidjhoward 4:c35db3946fd8 286 // modbus_input_buffer[23],modbus_input_buffer[24], modbus_input_buffer[25],modbus_input_buffer[26]); // rtd_raw
davidjhoward 4:c35db3946fd8 287 // printf("CRC: %x%x\r\n",modbus_input_buffer[27], modbus_input_buffer[28]);
davidjhoward 4:c35db3946fd8 288
davidjhoward 4:c35db3946fd8 289 rtd_raw.b.lo_lo = modbus_input_buffer[4];
davidjhoward 4:c35db3946fd8 290 rtd_raw.b.lo_hi = modbus_input_buffer[3];
davidjhoward 4:c35db3946fd8 291 rtd_raw.b.hi_lo = modbus_input_buffer[6];
davidjhoward 4:c35db3946fd8 292 rtd_raw.b.hi_hi = modbus_input_buffer[5];
davidjhoward 4:c35db3946fd8 293 // printf("rtd_raw=%d M Ohm, 0x%x, 0x%x\r\n",rtd_raw.i, rtd_raw.w.lo, rtd_raw.w.hi);
davidjhoward 4:c35db3946fd8 294 tcon_values->rtd_raw = rtd_raw.i;
davidjhoward 4:c35db3946fd8 295
davidjhoward 4:c35db3946fd8 296 rtd_cal.b.lo_lo = modbus_input_buffer[8];
davidjhoward 4:c35db3946fd8 297 rtd_cal.b.lo_hi = modbus_input_buffer[7];
davidjhoward 4:c35db3946fd8 298 rtd_cal.b.hi_lo = modbus_input_buffer[10];
davidjhoward 4:c35db3946fd8 299 rtd_cal.b.hi_hi = modbus_input_buffer[9];
davidjhoward 4:c35db3946fd8 300 // printf("rtd_cal=%d M Ohm, 0x%x, 0x%x\r\n",rtd_cal.i, rtd_cal.w.lo, rtd_cal.w.hi);
davidjhoward 4:c35db3946fd8 301 tcon_values->rtd_cal = rtd_cal.i;
davidjhoward 4:c35db3946fd8 302
davidjhoward 4:c35db3946fd8 303 rtd_degC.b.lo_lo = modbus_input_buffer[12];
davidjhoward 4:c35db3946fd8 304 rtd_degC.b.lo_hi = modbus_input_buffer[11];
davidjhoward 4:c35db3946fd8 305 rtd_degC.b.hi_lo = modbus_input_buffer[14];
davidjhoward 4:c35db3946fd8 306 rtd_degC.b.hi_hi = modbus_input_buffer[13];
davidjhoward 4:c35db3946fd8 307 // printf("rtd_degC=%2.2f C, 0x%x, 0x%x\r\n",(rtd_degC.i/1000.0), rtd_degC.w.lo, rtd_degC.w.hi);
davidjhoward 4:c35db3946fd8 308 tcon_values->rtd_degC = (rtd_degC.i/1000.0);
davidjhoward 4:c35db3946fd8 309
davidjhoward 4:c35db3946fd8 310 tcon_freq.b.lo_lo = modbus_input_buffer[16];
davidjhoward 4:c35db3946fd8 311 tcon_freq.b.lo_hi = modbus_input_buffer[15];
davidjhoward 4:c35db3946fd8 312 tcon_freq.b.hi_lo = modbus_input_buffer[18];
davidjhoward 4:c35db3946fd8 313 tcon_freq.b.hi_hi = modbus_input_buffer[17];
davidjhoward 4:c35db3946fd8 314 // printf("tcon_freq=%d Hz, 0x%x, 0x%x\r\n",tcon_freq.i, tcon_freq.w.lo, tcon_freq.w.hi);
davidjhoward 4:c35db3946fd8 315 tcon_values->tcon_freq = tcon_freq.i;
davidjhoward 4:c35db3946fd8 316
davidjhoward 4:c35db3946fd8 317 tcon_2pt.b.lo_lo = modbus_input_buffer[20];
davidjhoward 4:c35db3946fd8 318 tcon_2pt.b.lo_hi = modbus_input_buffer[19];
davidjhoward 4:c35db3946fd8 319 tcon_2pt.b.hi_lo = modbus_input_buffer[22];
davidjhoward 4:c35db3946fd8 320 tcon_2pt.b.hi_hi = modbus_input_buffer[21];
davidjhoward 4:c35db3946fd8 321 // printf("tcon_2pt=%d uS, 0x%x, 0x%x\r\n",tcon_2pt.i, tcon_2pt.w.lo, tcon_2pt.w.hi);
davidjhoward 4:c35db3946fd8 322 tcon_values->tcon_2pt = tcon_2pt.i;
davidjhoward 4:c35db3946fd8 323
davidjhoward 4:c35db3946fd8 324 tcon_cmp.b.lo_lo = modbus_input_buffer[20];
davidjhoward 4:c35db3946fd8 325 tcon_cmp.b.lo_hi = modbus_input_buffer[19];
davidjhoward 4:c35db3946fd8 326 tcon_cmp.b.hi_lo = modbus_input_buffer[22];
davidjhoward 4:c35db3946fd8 327 tcon_cmp.b.hi_hi = modbus_input_buffer[21];
davidjhoward 4:c35db3946fd8 328 // printf("tcon_cmp=%d uS, 0x%x, 0x%x\r\n",tcon_cmp.i, tcon_cmp.w.lo, tcon_cmp.w.hi);
davidjhoward 4:c35db3946fd8 329 tcon_values->tcon_cmp = tcon_cmp.i;
davidjhoward 4:c35db3946fd8 330
davidjhoward 4:c35db3946fd8 331 tcon_cal.b.lo_lo = modbus_input_buffer[20];
davidjhoward 4:c35db3946fd8 332 tcon_cal.b.lo_hi = modbus_input_buffer[19];
davidjhoward 4:c35db3946fd8 333 tcon_cal.b.hi_lo = modbus_input_buffer[22];
davidjhoward 4:c35db3946fd8 334 tcon_cal.b.hi_hi = modbus_input_buffer[21];
davidjhoward 4:c35db3946fd8 335 // printf("tcon_cal=%d, 0x%x, 0x%x\r\n",tcon_cal.i, tcon_cal.w.lo, tcon_cal.w.hi);
davidjhoward 4:c35db3946fd8 336 tcon_values->tcon_cal = tcon_cal.i;
davidjhoward 4:c35db3946fd8 337
davidjhoward 4:c35db3946fd8 338 return true;
jmarkel44 0:65cfa4873284 339 }