Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed
Fork of ICE by
Diff: src/ModbusMaster/ModbusMaster.cpp
- Revision:
- 15:a6ee32969e8e
- Parent:
- 9:ef0ca2f8a8a6
- Child:
- 23:03bf3d549002
--- a/src/ModbusMaster/ModbusMaster.cpp Wed Sep 07 14:51:00 2016 +0000
+++ b/src/ModbusMaster/ModbusMaster.cpp Wed Sep 07 18:26:56 2016 +0000
@@ -22,6 +22,7 @@
{
printf("\r%s has started...\n", __func__);
char scratch_buf[1024];
+ bool status;
MbedJSONValue json_value;
// configure modbus registers based in all files that start with "input"
@@ -49,8 +50,9 @@
ModbusRegisterMap[id].reg = json_value["reg"].get<int>();
ModbusRegisterMap[id].rtype = json_value["rtype"].get<int>();
ModbusRegisterMap[id].type = json_value["type"].get<int>();
+ ModbusRegisterMap[id].size = json_value["size"].get<int>();
+ ModbusRegisterMap[id].order = json_value["order"].get<int>();
ModbusRegisterMap[id].fmt = json_value["fmt"].get<std::string>().c_str();
-
}
}
@@ -59,7 +61,30 @@
std::map<std::string, ModbusRegister>::iterator iter;
for (iter = ModbusRegisterMap.begin(); iter != ModbusRegisterMap.end(); ++iter) {
-// SendModbusCommand(iter->first.node,(uint16_t)iter->first.reg,13);
+ printf("\rReading node=%d, reg=%d, size=%d, order=%d\n", iter->second.node, iter->second.reg, iter->second.size, iter->second.order );
+ SendModbusCommand(iter->second.node, iter->second.reg, iter->second.size);
+ osDelay(30);
+
+ switch( iter->second.type ) {
+ case TYPE_32BIT_FLOAT:
+ float float_value;
+ status = ReadModbus_32bit_float( &float_value, iter->second.order );
+ if( status == true )
+ {
+ ModbusRegisterMap[iter->first].float_value = float_value;
+ }
+ break;
+ case TYPE_32BIT_INT:
+ break;
+ case TYPE_32BIT_UINT:
+ break;
+ case TYPE_16BIT_INT:
+ break;
+ case TYPE_16BIT_UINT:
+ break;
+ default:
+ break;
+ }
}
}
}
@@ -157,159 +182,30 @@
}
}
-bool mbFluGetData( MB_FLU_VALUES *flu_values )
+bool ReadModbus_32bit_float( float *float_value, int order )
{
- MR_REGISTER_FLOAT trasar;
- MR_REGISTER_FLOAT tag;
- MR_REGISTER_FLOAT rz;
- MR_REGISTER_FLOAT rs;
- MR_REGISTER_FLOAT tra_back;
- MR_REGISTER_FLOAT turb;
- MR_REGISTER_WORD cf;
-// MR_REGISTER_WORD crc;
-
+ MR_REGISTER_32_BIT_FLOAT value;
+
if (mbInterruptComplete() != true ) {
return false;
}
-// printf("Address: %d, Function: %d, No Regs: %d, \r\n",modbus_input_buffer[0],modbus_input_buffer[1],modbus_input_buffer[2]/2);
-//
-// 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",
-// modbus_input_buffer[3],modbus_input_buffer[4], modbus_input_buffer[5],modbus_input_buffer[6], // Trasar
-// modbus_input_buffer[7],modbus_input_buffer[8], modbus_input_buffer[9],modbus_input_buffer[10], // Tag
-// modbus_input_buffer[11],modbus_input_buffer[12], modbus_input_buffer[13],modbus_input_buffer[14], // Rz
-// modbus_input_buffer[15],modbus_input_buffer[16], modbus_input_buffer[17],modbus_input_buffer[18], // Rs
-// modbus_input_buffer[19],modbus_input_buffer[20], modbus_input_buffer[21],modbus_input_buffer[22], // TraBack
-// modbus_input_buffer[23],modbus_input_buffer[24], modbus_input_buffer[25],modbus_input_buffer[26], // TraBack
-// modbus_input_buffer[27],modbus_input_buffer[28]); // Cf
-// printf("CRC: %x%x\r\n",modbus_input_buffer[29], modbus_input_buffer[30]);
-
- trasar.b.lo_lo = modbus_input_buffer[4];
- trasar.b.lo_hi = modbus_input_buffer[3];
- trasar.b.hi_lo = modbus_input_buffer[6];
- trasar.b.hi_hi = modbus_input_buffer[5];
-// printf("Trasar=%2.2f, 0x%x, 0x%x\r\n",trasar.f, trasar.w.lo, trasar.w.hi);
- flu_values->trasar = trasar.f;
-
- tag.b.lo_lo = modbus_input_buffer[8];
- tag.b.lo_hi = modbus_input_buffer[7];
- tag.b.hi_lo = modbus_input_buffer[10];
- tag.b.hi_hi = modbus_input_buffer[9];
-// printf("tag=%2.2f, 0x%x, 0x%x\r\n",tag.f, tag.w.lo, tag.w.hi);
- flu_values->tag = tag.f;
-
- rz.b.lo_lo = modbus_input_buffer[12];
- rz.b.lo_hi = modbus_input_buffer[11];
- rz.b.hi_lo = modbus_input_buffer[14];
- rz.b.hi_hi = modbus_input_buffer[13];
-// printf("rz=%2.2f, 0x%x, 0x%x\r\n",rz.f, rz.w.lo, rz.w.hi);
- flu_values->rz = rz.f;
-
- rs.b.lo_lo = modbus_input_buffer[16];
- rs.b.lo_hi = modbus_input_buffer[15];
- rs.b.hi_lo = modbus_input_buffer[18];
- rs.b.hi_hi = modbus_input_buffer[17];
-// printf("rs=%2.2f, 0x%x, 0x%x\r\n",rs.f, rs.w.lo, rs.w.hi);
- flu_values->rs = rs.f;
-
- tra_back.b.lo_lo = modbus_input_buffer[20];
- tra_back.b.lo_hi = modbus_input_buffer[19];
- tra_back.b.hi_lo = modbus_input_buffer[22];
- tra_back.b.hi_hi = modbus_input_buffer[21];
-// printf("tra_back=%2.2f, 0x%x, 0x%x\r\n",tra_back.f, tra_back.w.lo, tra_back.w.hi);
- flu_values->tra_back = tra_back.f;
-
- turb.b.lo_lo = modbus_input_buffer[24];
- turb.b.lo_hi = modbus_input_buffer[23];
- turb.b.hi_lo = modbus_input_buffer[26];
- turb.b.hi_hi = modbus_input_buffer[25];
-// printf("turb=%2.2f, 0x%x, 0x%x\r\n",turb.f, turb.w.lo, turb.w.hi);
- flu_values->turb = turb.f;
-
- cf.b.lo = modbus_input_buffer[28];
- cf.b.hi = modbus_input_buffer[27];
-// printf("cf=%d, 0x%x,\r\n",cf.w, cf.w);
- flu_values->cf = cf.w;
-
-// crc.b.lo = modbus_input_buffer[30]; crc.b.hi = modbus_input_buffer[29];
-// printf("crc=%d, 0x%x,\r\n",crc.w, crc.w);
-
+ switch( order ) {
+ case BigEndian:
+ value.b.lo_lo = modbus_input_buffer[6];
+ value.b.lo_hi = modbus_input_buffer[5];
+ value.b.hi_lo = modbus_input_buffer[4];
+ value.b.hi_hi = modbus_input_buffer[3];
+ break;
+ case BigEndianReverseWord:
+ value.b.lo_lo = modbus_input_buffer[4];
+ value.b.lo_hi = modbus_input_buffer[3];
+ value.b.hi_lo = modbus_input_buffer[6];
+ value.b.hi_hi = modbus_input_buffer[5];
+ break;
+ default:
+ return false;
+ }
+ *float_value = value.f;
return true;
}
-
-bool mbTconGetData( MB_TCON_VALUES *tcon_values )
-{
- MR_REGISTER_INT tcon_cal;
- MR_REGISTER_INT tcon_cmp;
- MR_REGISTER_INT tcon_2pt;
- MR_REGISTER_INT tcon_freq;
- MR_REGISTER_INT rtd_degC;
- MR_REGISTER_INT rtd_cal;
- MR_REGISTER_INT rtd_raw;
-
- if (mbInterruptComplete() != true ) {
- return false;
- }
-
-// printf("Address: %d, Function: %d, No Regs: %d, \r\n",modbus_input_buffer[0],modbus_input_buffer[1],modbus_input_buffer[2]/2);
-//
-// 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",
-// modbus_input_buffer[3],modbus_input_buffer[4], modbus_input_buffer[5],modbus_input_buffer[6], // tcon_cal
-// modbus_input_buffer[7],modbus_input_buffer[8], modbus_input_buffer[9],modbus_input_buffer[10], // tcon_cmp
-// modbus_input_buffer[11],modbus_input_buffer[12], modbus_input_buffer[13],modbus_input_buffer[14], // tcon_2pt
-// modbus_input_buffer[15],modbus_input_buffer[16], modbus_input_buffer[17],modbus_input_buffer[18], // rtd_degC
-// modbus_input_buffer[19],modbus_input_buffer[20], modbus_input_buffer[21],modbus_input_buffer[22], // rtd_cal
-// modbus_input_buffer[23],modbus_input_buffer[24], modbus_input_buffer[25],modbus_input_buffer[26]); // rtd_raw
-// printf("CRC: %x%x\r\n",modbus_input_buffer[27], modbus_input_buffer[28]);
-
- rtd_raw.b.lo_lo = modbus_input_buffer[4];
- rtd_raw.b.lo_hi = modbus_input_buffer[3];
- rtd_raw.b.hi_lo = modbus_input_buffer[6];
- rtd_raw.b.hi_hi = modbus_input_buffer[5];
-// printf("rtd_raw=%d M Ohm, 0x%x, 0x%x\r\n",rtd_raw.i, rtd_raw.w.lo, rtd_raw.w.hi);
- tcon_values->rtd_raw = rtd_raw.i;
-
- rtd_cal.b.lo_lo = modbus_input_buffer[8];
- rtd_cal.b.lo_hi = modbus_input_buffer[7];
- rtd_cal.b.hi_lo = modbus_input_buffer[10];
- rtd_cal.b.hi_hi = modbus_input_buffer[9];
-// printf("rtd_cal=%d M Ohm, 0x%x, 0x%x\r\n",rtd_cal.i, rtd_cal.w.lo, rtd_cal.w.hi);
- tcon_values->rtd_cal = rtd_cal.i;
-
- rtd_degC.b.lo_lo = modbus_input_buffer[12];
- rtd_degC.b.lo_hi = modbus_input_buffer[11];
- rtd_degC.b.hi_lo = modbus_input_buffer[14];
- rtd_degC.b.hi_hi = modbus_input_buffer[13];
-// 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);
- tcon_values->rtd_degC = (rtd_degC.i/1000.0);
-
- tcon_freq.b.lo_lo = modbus_input_buffer[16];
- tcon_freq.b.lo_hi = modbus_input_buffer[15];
- tcon_freq.b.hi_lo = modbus_input_buffer[18];
- tcon_freq.b.hi_hi = modbus_input_buffer[17];
-// printf("tcon_freq=%d Hz, 0x%x, 0x%x\r\n",tcon_freq.i, tcon_freq.w.lo, tcon_freq.w.hi);
- tcon_values->tcon_freq = tcon_freq.i;
-
- tcon_2pt.b.lo_lo = modbus_input_buffer[20];
- tcon_2pt.b.lo_hi = modbus_input_buffer[19];
- tcon_2pt.b.hi_lo = modbus_input_buffer[22];
- tcon_2pt.b.hi_hi = modbus_input_buffer[21];
-// printf("tcon_2pt=%d uS, 0x%x, 0x%x\r\n",tcon_2pt.i, tcon_2pt.w.lo, tcon_2pt.w.hi);
- tcon_values->tcon_2pt = tcon_2pt.i;
-
- tcon_cmp.b.lo_lo = modbus_input_buffer[20];
- tcon_cmp.b.lo_hi = modbus_input_buffer[19];
- tcon_cmp.b.hi_lo = modbus_input_buffer[22];
- tcon_cmp.b.hi_hi = modbus_input_buffer[21];
-// printf("tcon_cmp=%d uS, 0x%x, 0x%x\r\n",tcon_cmp.i, tcon_cmp.w.lo, tcon_cmp.w.hi);
- tcon_values->tcon_cmp = tcon_cmp.i;
-
- tcon_cal.b.lo_lo = modbus_input_buffer[20];
- tcon_cal.b.lo_hi = modbus_input_buffer[19];
- tcon_cal.b.hi_lo = modbus_input_buffer[22];
- tcon_cal.b.hi_hi = modbus_input_buffer[21];
-// printf("tcon_cal=%d, 0x%x, 0x%x\r\n",tcon_cal.i, tcon_cal.w.lo, tcon_cal.w.hi);
- tcon_values->tcon_cal = tcon_cal.i;
-
- return true;
-}
\ No newline at end of file
