nymea-plugins-modbus/schrack/cionmodbusrtuconnection.h

232 lines
8.9 KiB
C++

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright 2013 - 2022, nymea GmbH
* Contact: contact@nymea.io
*
* This fileDescriptor is part of nymea.
* This project including source code and documentation is protected by
* copyright law, and remains the property of nymea GmbH. All rights, including
* reproduction, publication, editing and translation, are reserved. The use of
* this project is subject to the terms of a license agreement to be concluded
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
* under https://nymea.io/license
*
* GNU Lesser General Public License Usage
* Alternatively, this project may be redistributed and/or modified under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; version 3. This project is distributed in the hope that
* it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this project. If not, see <https://www.gnu.org/licenses/>.
*
* For any further details and any questions please contact us under
* contact@nymea.io or see our FAQ/Licensing Information on
* https://nymea.io/license/faq
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* WARNING
*
* This file has been autogenerated. Any changes in this file may be overwritten.
* If you want to change something, update the register json or the tool.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef CIONMODBUSRTUCONNECTION_H
#define CIONMODBUSRTUCONNECTION_H
#include <QObject>
#include "../modbus/modbusdatautils.h"
#include <hardware/modbus/modbusrtumaster.h>
class CionModbusRtuConnection : public QObject
{
Q_OBJECT
public:
enum Registers {
RegisterChargingEnabled = 100,
RegisterChargingCurrentSetpoint = 101,
RegisterStatusBits = 121,
RegisterCurrentChargingCurrentE3 = 126,
RegisterMaxChargingCurrentE3 = 127,
RegisterMaxChargingCurrentCableE3 = 128,
RegisterCpSignalState = 139,
RegisterChargingDuration = 151,
RegisterPluggedInDuration = 153,
RegisterU1Voltage = 167,
RegisterGridVoltage = 302,
RegisterMinChargingCurrent = 507
};
Q_ENUM(Registers)
explicit CionModbusRtuConnection(ModbusRtuMaster *modbusRtuMaster, quint16 slaveId, QObject *parent = nullptr);
~CionModbusRtuConnection() = default;
ModbusRtuMaster *modbusRtuMaster() const;
quint16 slaveId() const;
ModbusDataUtils::ByteOrder endianness() const;
void setEndianness(ModbusDataUtils::ByteOrder endianness);
/* Charging enabled - Address: 100, Size: 1 */
quint16 chargingEnabled() const;
ModbusRtuReply *setChargingEnabled(quint16 chargingEnabled);
/* Charging current setpoint [A] - Address: 101, Size: 1 */
quint16 chargingCurrentSetpoint() const;
ModbusRtuReply *setChargingCurrentSetpoint(quint16 chargingCurrentSetpoint);
/* Mode3-State A, B, C, D, U - Address: 121, Size: 1 */
quint16 statusBits() const;
/* Status bits - Address: 139, Size: 1 */
quint16 cpSignalState() const;
/* U1 voltage [V] - Address: 167, Size: 1 */
float u1Voltage() const;
/* Voltage of the power supply grid [V] - Address: 302, Size: 1 */
float gridVoltage() const;
/* Minimum charging current [A] - Address: 507, Size: 1 */
quint16 minChargingCurrent() const;
/* Current charging Ampere [A] - Address: 126, Size: 1 */
quint16 currentChargingCurrentE3() const;
/* Maximum charging current [A] - Address: 127, Size: 1 */
quint16 maxChargingCurrentE3() const;
/* Maximum charging current of connected cable [A] - Address: 128, Size: 1 */
quint16 maxChargingCurrentCableE3() const;
/* Charging duration [ms] - Address: 151, Size: 2 */
quint32 chargingDuration() const;
/* Plugged in duration [ms] - Address: 153, Size: 2 */
quint32 pluggedInDuration() const;
/* Read block from start addess 126 with size of 3 registers containing following 3 properties:
- Current charging Ampere [A] - Address: 126, Size: 1
- Maximum charging current [A] - Address: 127, Size: 1
- Maximum charging current of connected cable [A] - Address: 128, Size: 1
*/
void updateE3Block();
/* Read block from start addess 151 with size of 4 registers containing following 2 properties:
- Charging duration [ms] - Address: 151, Size: 2
- Plugged in duration [ms] - Address: 153, Size: 2
*/
void updateDurationsBlock();
virtual void initialize();
virtual void update();
void updateChargingEnabled();
void updateChargingCurrentSetpoint();
void updateStatusBits();
void updateCpSignalState();
void updateU1Voltage();
void updateGridVoltage();
void updateMinChargingCurrent();
void updateCurrentChargingCurrentE3();
void updateMaxChargingCurrentE3();
void updateMaxChargingCurrentCableE3();
void updateChargingDuration();
void updatePluggedInDuration();
ModbusRtuReply *readChargingEnabled();
ModbusRtuReply *readChargingCurrentSetpoint();
ModbusRtuReply *readStatusBits();
ModbusRtuReply *readCpSignalState();
ModbusRtuReply *readU1Voltage();
ModbusRtuReply *readGridVoltage();
ModbusRtuReply *readMinChargingCurrent();
ModbusRtuReply *readCurrentChargingCurrentE3();
ModbusRtuReply *readMaxChargingCurrentE3();
ModbusRtuReply *readMaxChargingCurrentCableE3();
ModbusRtuReply *readChargingDuration();
ModbusRtuReply *readPluggedInDuration();
/* Read block from start addess 126 with size of 3 registers containing following 3 properties:
- Current charging Ampere [A] - Address: 126, Size: 1
- Maximum charging current [A] - Address: 127, Size: 1
- Maximum charging current of connected cable [A] - Address: 128, Size: 1
*/
ModbusRtuReply *readBlockE3();
/* Read block from start addess 151 with size of 4 registers containing following 2 properties:
- Charging duration [ms] - Address: 151, Size: 2
- Plugged in duration [ms] - Address: 153, Size: 2
*/
ModbusRtuReply *readBlockDurations();
signals:
void initializationFinished();
void endiannessChanged(ModbusDataUtils::ByteOrder endianness);
void chargingEnabledChanged(quint16 chargingEnabled);
void chargingCurrentSetpointChanged(quint16 chargingCurrentSetpoint);
void statusBitsChanged(quint16 statusBits);
void cpSignalStateChanged(quint16 cpSignalState);
void u1VoltageChanged(float u1Voltage);
void gridVoltageChanged(float gridVoltage);
void minChargingCurrentChanged(quint16 minChargingCurrent);
void currentChargingCurrentE3Changed(quint16 currentChargingCurrentE3);
void maxChargingCurrentE3Changed(quint16 maxChargingCurrentE3);
void maxChargingCurrentCableE3Changed(quint16 maxChargingCurrentCableE3);
void chargingDurationChanged(quint32 chargingDuration);
void pluggedInDurationChanged(quint32 pluggedInDuration);
protected:
quint16 m_chargingEnabled = 0;
quint16 m_chargingCurrentSetpoint = 6;
quint16 m_statusBits = 85;
quint16 m_cpSignalState = 0;
float m_u1Voltage = 32;
float m_gridVoltage = 0;
quint16 m_minChargingCurrent = 13;
quint16 m_currentChargingCurrentE3 = 6;
quint16 m_maxChargingCurrentE3 = 32;
quint16 m_maxChargingCurrentCableE3 = 32;
quint32 m_chargingDuration = 0;
quint32 m_pluggedInDuration = 0;
void processChargingEnabledRegisterValues(const QVector<quint16> values);
void processChargingCurrentSetpointRegisterValues(const QVector<quint16> values);
void processStatusBitsRegisterValues(const QVector<quint16> values);
void processCpSignalStateRegisterValues(const QVector<quint16> values);
void processU1VoltageRegisterValues(const QVector<quint16> values);
void processGridVoltageRegisterValues(const QVector<quint16> values);
void processMinChargingCurrentRegisterValues(const QVector<quint16> values);
void processCurrentChargingCurrentE3RegisterValues(const QVector<quint16> values);
void processMaxChargingCurrentE3RegisterValues(const QVector<quint16> values);
void processMaxChargingCurrentCableE3RegisterValues(const QVector<quint16> values);
void processChargingDurationRegisterValues(const QVector<quint16> values);
void processPluggedInDurationRegisterValues(const QVector<quint16> values);
private:
ModbusRtuMaster *m_modbusRtuMaster = nullptr;
quint16 m_slaveId = 1;
QVector<ModbusRtuReply *> m_pendingInitReplies;
ModbusDataUtils::ByteOrder m_endianness = ModbusDataUtils::ByteOrderBigEndian;
void verifyInitFinished();
};
QDebug operator<<(QDebug debug, CionModbusRtuConnection *cionModbusRtuConnection);
#endif // CIONMODBUSRTUCONNECTION_H