UniSet @VERSION@
JSModbusClient.h
1/*
2 * Copyright (c) 2025 Pavel Vainerman.
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as
6 * published by the Free Software Foundation, version 2.1.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Lesser General Lesser Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16// --------------------------------------------------------------------------
17#ifndef JSModbusClient_H_
18#define JSModbusClient_H_
19// --------------------------------------------------------------------------
20#include <memory>
21#include <string>
22#include <vector>
23#include "DebugStream.h"
24#include "modbus/ModbusTCPMaster.h"
25#include "Exceptions.h"
26// --------------------------------------------------------------------------
27namespace uniset
28{
29 // ----------------------------------------------------------------------
31 {
32 public:
35
36 void setLog( const std::shared_ptr<DebugStream>& log );
37
38 void connectTCP( const std::string& host, int port, timeout_t timeout_msec, bool forceDisconnect );
39 void disconnect();
40 inline bool isConnected() const noexcept
41 {
42 return tcp && tcp->isConnection();
43 }
44
45 ModbusRTU::ReadCoilRetMessage read01( ModbusRTU::ModbusAddr addr,
46 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count );
47 ModbusRTU::ReadInputStatusRetMessage read02( ModbusRTU::ModbusAddr addr,
48 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count );
49 ModbusRTU::ReadOutputRetMessage read03( ModbusRTU::ModbusAddr addr,
50 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count );
51 ModbusRTU::ReadInputRetMessage read04( ModbusRTU::ModbusAddr addr,
52 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count );
53
54 ModbusRTU::ForceSingleCoilRetMessage write05( ModbusRTU::ModbusAddr addr,
55 ModbusRTU::ModbusData reg, bool state );
56 ModbusRTU::WriteSingleOutputRetMessage write06( ModbusRTU::ModbusAddr addr,
57 ModbusRTU::ModbusData reg, ModbusRTU::ModbusData value );
58 ModbusRTU::ForceCoilsRetMessage write0F( ModbusRTU::ModbusAddr addr,
59 ModbusRTU::ModbusData start,
60 const std::vector<uint8_t>& values );
61 ModbusRTU::WriteOutputRetMessage write10( ModbusRTU::ModbusAddr addr,
62 ModbusRTU::ModbusData start,
63 const std::vector<ModbusRTU::ModbusData>& values );
64
65 ModbusRTU::DiagnosticRetMessage diag08( ModbusRTU::ModbusAddr addr,
66 ModbusRTU::DiagnosticsSubFunction subfunc,
67 ModbusRTU::ModbusData data );
68 ModbusRTU::MEIMessageRetRDI read4314( ModbusRTU::ModbusAddr addr,
69 ModbusRTU::ModbusByte devID,
70 ModbusRTU::ModbusByte objID );
71
72 private:
73 void ensureConnection();
74 void ensureTCP();
75
76 std::shared_ptr<DebugStream> log;
77 std::unique_ptr<ModbusTCPMaster> tcp;
78 std::string lastHost;
79 int lastPort = { 0 };
80 timeout_t lastTimeout = { 2000 };
81 bool reconnectEachRequest = { false };
82 };
83 // ----------------------------------------------------------------------
84} // namespace uniset
85// --------------------------------------------------------------------------
86#endif // JSModbusClient_H_
87// --------------------------------------------------------------------------
Definition JSModbusClient.h:31
Definition AccessConfig.h:30
Definition ModbusTypes.h:1238
Definition ModbusTypes.h:842
Definition ModbusTypes.h:1310
Definition ModbusTypes.h:458
Definition ModbusTypes.h:699
Definition ModbusTypes.h:602
Definition ModbusTypes.h:941