modbus rtu final

This commit is contained in:
Dmitry Borisenko
2020-09-18 03:44:03 +03:00
parent 9619a17abf
commit 65175e3663
4 changed files with 24 additions and 12 deletions

View File

@@ -1 +1 @@
modbus;id;anydata;Modbus;Регистр;order;addr[1];regaddr[0];c[1]
modbus;id;anydata;Modbus;Регистр;order;addr[1];reg[0];c[1]

View File

@@ -14,6 +14,7 @@ class LineParsing {
String _order;
String _addr;
String _reg;
String _pin;
String _map;
String _c;
@@ -31,6 +32,7 @@ class LineParsing {
_descr{""},
_order{""},
_addr{""},
_reg{""},
_pin{""},
_map{""},
_c{""},
@@ -79,6 +81,9 @@ class LineParsing {
if (arg.indexOf("addr[") != -1) {
_addr = extractInner(arg);
}
if (arg.indexOf("reg[") != -1) {
_reg = extractInner(arg);
}
}
}
@@ -127,7 +132,9 @@ class LineParsing {
String gaddr() {
return _addr;
}
String gregaddr() {
return _reg;
}
void clear() {
_key = "";
@@ -136,6 +143,7 @@ class LineParsing {
_descr = "";
_order = "";
_addr = "";
_reg = "";
_pin = "";
_map = "";
_c = "";
@@ -143,7 +151,6 @@ class LineParsing {
_state = "";
_db = "";
_type = "";
_addr = "";
}
String extractInnerDigit(String str) {

View File

@@ -8,35 +8,37 @@
#include "items/SensorConvertingClass.h"
ModbusMaster modbus1;
SoftwareSerial uart(10, 11); // RX, TX
SoftwareSerial uart(13, 12); // RX, TX
class SensorModbusClass : public SensorConvertingClass {
public:
SensorModbusClass() : SensorConvertingClass(){};
void SensorModbusInit() {
uart.begin(9600);
jsonWriteStr(configOptionJson, _key + "_map", _map);
jsonWriteStr(configOptionJson, _key + "_с", _c);
sensorReadingMap += _key + ","; //" " + _addr + " " + _regaddr
sensorReadingMap += _key + " " + _addr + " " + _reg + ",";
Serial.println(sensorReadingMap);
}
void SensorModbusRead(String key, uint8_t slaveAddress, uint16_t regAddress) {
float value;
int value;
modbus1.begin(slaveAddress, uart);
uint16_t reqisterValue = modbus1.readHoldingRegisters(regAddress, 1);
if (getResultMsg(&modbus1, reqisterValue)) {
reqisterValue = modbus1.getResponseBuffer(0);
value = reqisterValue;
} else {
value = NULL;
}
value = reqisterValue;
float valueFl = this->correction(key, value);
int valueFl = this->correction(key, value);
eventGen(key, "");
jsonWriteStr(configLiveJson, key, String(valueFl));
MqttClient::publishStatus(key, String(valueFl));
Serial.println("I sensor '" + key + "' data: " + String(valueFl));
Serial.println("I sensor '" + key + "' data: " + String(valueFl) + ", Slave dev addr: " + String(slaveAddress) + ", Register: " + String(regAddress));
}
bool getResultMsg(ModbusMaster* modbus1, uint16_t result) {

View File

@@ -1,5 +1,6 @@
#include "ItemsCmd.h"
#include "items/SensorModbusClass.h"
#include "ItemsCmd.h"
//#ifdef SensorModbusEnabled
//=========================================Модуль modbus===================================================================================
//modbus;id;anydata;Сенсоры;Температура;order;addr[1];regaddr[0];c[1]
@@ -15,6 +16,8 @@ void modbus() {
}
void modbusReading() {
String key = sCmd.order();
mySensorModbus.SensorModbusRead(key, 1, 0);
String addr = sCmd.next();
String regaddr = sCmd.next();
mySensorModbus.SensorModbusRead(key, addr.toInt(), regaddr.toInt());
}
//#endif