mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-06 03:50:13 +02:00
Add basic mobus support
This commit is contained in:
parent
966ae06da6
commit
393d954aa7
30 changed files with 4647 additions and 183 deletions
138
Software/ModbusError.h
Normal file
138
Software/ModbusError.h
Normal file
|
@ -0,0 +1,138 @@
|
|||
// =================================================================================================
|
||||
// eModbus: Copyright 2020 by Michael Harwerth, Bert Melis and the contributors to eModbus
|
||||
// MIT license - see license.md for details
|
||||
// =================================================================================================
|
||||
#ifndef _MODBUS_ERROR_H
|
||||
#define _MODBUS_ERROR_H
|
||||
#include "ModbusTypeDefs.h"
|
||||
|
||||
using namespace Modbus; // NOLINT
|
||||
|
||||
class ModbusError {
|
||||
public:
|
||||
// Constructor with error code
|
||||
inline explicit ModbusError(Error e) : err(e) {}
|
||||
// Empty constructor defaults to 0
|
||||
inline ModbusError() : err(SUCCESS) {}
|
||||
// Assignment operators
|
||||
inline ModbusError& operator=(const ModbusError& e) { err = e.err; return *this; }
|
||||
inline ModbusError& operator=(const Error e) { err = e; return *this; }
|
||||
// Copy constructor
|
||||
inline ModbusError(const ModbusError& m) : err(m.err) {}
|
||||
// Equality comparison
|
||||
inline bool operator==(const ModbusError& m) { return (err == m.err); }
|
||||
inline bool operator==(const Error e) { return (err == e); }
|
||||
// Inequality comparison
|
||||
inline bool operator!=(const ModbusError& m) { return (err != m.err); }
|
||||
inline bool operator!=(const Error e) { return (err != e); }
|
||||
inline explicit operator Error() { return err; }
|
||||
inline operator int() { return static_cast<int>(err); }
|
||||
|
||||
#ifndef MINIMAL
|
||||
inline explicit operator const char *() { return getText(err); }
|
||||
#endif
|
||||
|
||||
private:
|
||||
Error err; // The error code
|
||||
|
||||
#ifndef MINIMAL
|
||||
// Return error as static text
|
||||
inline static const char *getText(Error err) {
|
||||
switch (err) {
|
||||
case SUCCESS : // 0x00,
|
||||
return "Success";
|
||||
break;
|
||||
case ILLEGAL_FUNCTION : // 0x01,
|
||||
return "Illegal function code";
|
||||
break;
|
||||
case ILLEGAL_DATA_ADDRESS : // 0x02,
|
||||
return "Illegal data address";
|
||||
break;
|
||||
case ILLEGAL_DATA_VALUE : // 0x03,
|
||||
return "Illegal data value";
|
||||
break;
|
||||
case SERVER_DEVICE_FAILURE : // 0x04,
|
||||
return "Server device failure";
|
||||
break;
|
||||
case ACKNOWLEDGE : // 0x05,
|
||||
return "Acknowledge";
|
||||
break;
|
||||
case SERVER_DEVICE_BUSY : // 0x06,
|
||||
return "Server device busy";
|
||||
break;
|
||||
case NEGATIVE_ACKNOWLEDGE : // 0x07,
|
||||
return "Negative acknowledge";
|
||||
break;
|
||||
case MEMORY_PARITY_ERROR : // 0x08,
|
||||
return "Memory parity error";
|
||||
break;
|
||||
case GATEWAY_PATH_UNAVAIL : // 0x0A,
|
||||
return "Gateway path unavailable";
|
||||
break;
|
||||
case GATEWAY_TARGET_NO_RESP: // 0x0B,
|
||||
return "Gateway target not responding";
|
||||
break;
|
||||
case TIMEOUT : // 0xE0,
|
||||
return "Timeout";
|
||||
break;
|
||||
case INVALID_SERVER : // 0xE1,
|
||||
return "Invalid server";
|
||||
break;
|
||||
case CRC_ERROR : // 0xE2, // only for Modbus-RTU
|
||||
return "CRC check error";
|
||||
break;
|
||||
case FC_MISMATCH : // 0xE3,
|
||||
return "Function code mismatch";
|
||||
break;
|
||||
case SERVER_ID_MISMATCH : // 0xE4,
|
||||
return "Server ID mismatch";
|
||||
break;
|
||||
case PACKET_LENGTH_ERROR : // 0xE5,
|
||||
return "Packet length error";
|
||||
break;
|
||||
case PARAMETER_COUNT_ERROR : // 0xE6,
|
||||
return "Wrong # of parameters";
|
||||
break;
|
||||
case PARAMETER_LIMIT_ERROR : // 0xE7,
|
||||
return "Parameter out of bounds";
|
||||
break;
|
||||
case REQUEST_QUEUE_FULL : // 0xE8,
|
||||
return "Request queue full";
|
||||
break;
|
||||
case ILLEGAL_IP_OR_PORT : // 0xE9,
|
||||
return "Illegal IP or port";
|
||||
break;
|
||||
case IP_CONNECTION_FAILED : // 0xEA,
|
||||
return "IP connection failed";
|
||||
break;
|
||||
case TCP_HEAD_MISMATCH : // 0xEB,
|
||||
return "TCP header mismatch";
|
||||
break;
|
||||
case EMPTY_MESSAGE : // 0xEC,
|
||||
return "Incomplete request";
|
||||
break;
|
||||
case ASCII_FRAME_ERR : // 0xED,
|
||||
return "Invalid ASCII frame";
|
||||
break;
|
||||
case ASCII_CRC_ERR : // 0xEE,
|
||||
return "Invalid ASCII CRC";
|
||||
break;
|
||||
case ASCII_INVALID_CHAR : // 0xEF,
|
||||
return "Invalid ASCII character";
|
||||
break;
|
||||
case BROADCAST_ERROR : // 0xF0,
|
||||
return "Broadcast data invalid";
|
||||
break;
|
||||
case UNDEFINED_ERROR : // 0xFF // otherwise uncovered communication error
|
||||
default:
|
||||
return "Unspecified error";
|
||||
break;
|
||||
}
|
||||
return "What?";
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue