23 #include <unordered_map>
25 #include "IONotifyController.h"
26 #include "Calibration.h"
27 #include "DelayTimer.h"
28 #include "SMInterface.h"
29 #include "SharedMemory.h"
33 #include "RTUStorage.h"
34 #include "modbus/ModbusClient.h"
35 #include "Configuration.h"
44 MBConfig(
const std::shared_ptr<uniset::Configuration>& conf
46 , std::shared_ptr<SMInterface> _shm );
59 friend std::ostream& operator<<( std::ostream& os,
const ExchangeMode& em );
70 friend std::string to_string(
const SafeMode& m );
71 friend std::ostream& operator<<( std::ostream& os,
const SafeMode& m );
81 static DeviceType getDeviceType(
const std::string& dtype ) noexcept;
82 friend std::ostream& operator<<( std::ostream& os,
const DeviceType& dt );
98 rnum(VTypes::wsize(VTypes::vtUnknown)),
109 std::shared_ptr<RegInfo> reg;
112 friend std::ostream& operator<<( std::ostream& os,
const RSProperty& p );
114 typedef std::list<RSProperty> PList;
115 std::ostream& print_plist( std::ostream& os,
const PList& p );
117 typedef std::map<ModbusRTU::RegID, std::shared_ptr<RegInfo>> RegMap;
128 ModbusRTU::ModbusData mbval = { 0 };
129 ModbusRTU::ModbusData
mbreg = { 0 };
130 ModbusRTU::SlaveFunctionCode
mbfunc = { ModbusRTU::fnUnknown };
132 ModbusRTU::RegID regID = { 0 };
134 std::shared_ptr<RTUDevice> dev;
137 RTUStorage::RTUJack rtuJack = { RTUStorage::nUnknown };
147 RegMap::iterator rit;
161 friend std::ostream& operator<<( std::ostream& os,
const RegInfo& r );
162 friend std::ostream& operator<<( std::ostream& os,
const RegInfo* r );
167 std::unordered_map<size_t, std::shared_ptr<RegMap>> pollmap;
173 IOController::IOStateList::iterator resp_it;
176 bool resp_state = {
false };
177 bool resp_invert = {
false };
178 bool resp_force = {
false };
180 std::atomic<size_t> numreply = { 0 };
181 std::atomic<size_t> prev_numreply = { 0 };
188 IOController::IOStateList::iterator mode_it;
194 IOController::IOStateList::iterator safemode_it;
195 long safemode_value = { 1 };
198 bool checkRespond( std::shared_ptr<DebugStream>& log );
201 ComPort::Speed speed = { ComPort::ComSpeed38400 };
202 std::shared_ptr<RTUStorage> rtu188;
203 ComPort::Parity parity = { ComPort::NoParity };
204 ComPort::CharacterSize csize = { ComPort::CSize8 };
205 ComPort::StopBits stopBits = { ComPort::OneBit };
207 std::string getShortInfo()
const;
210 friend std::ostream& operator<<( std::ostream& os, RTUDevice& d );
212 typedef std::unordered_map<ModbusRTU::ModbusAddr, std::shared_ptr<RTUDevice>> RTUDeviceMap;
214 friend std::ostream& operator<<( std::ostream& os, RTUDeviceMap& d );
215 static void printMap(RTUDeviceMap& d);
217 typedef std::list<IOBase> ThresholdList;
223 mbfunc(ModbusRTU::fnUnknown),
227 std::shared_ptr<RTUDevice> dev;
228 ModbusRTU::ModbusData mbreg;
229 ModbusRTU::SlaveFunctionCode mbfunc;
231 std::shared_ptr<RegInfo> ri;
233 typedef std::list<InitRegInfo> InitList;
235 static void rtuQueryOptimization( RTUDeviceMap& m,
size_t maxQueryCount );
236 static void rtuQueryOptimizationForDevice(
const std::shared_ptr<RTUDevice>& d,
size_t maxQueryCount );
237 static void rtuQueryOptimizationForRegMap(
const std::shared_ptr<RegMap>& regmap,
size_t maxQueryCount );
241 ThresholdList thrlist;
242 RTUDeviceMap devices;
245 void loadConfig(
const std::shared_ptr<uniset::UniXML>& xml,
UniXML::iterator sensorsSection );
246 void initDeviceList(
const std::shared_ptr<UniXML>& xml );
250 std::string s_fvalue;
253 timeout_t recv_timeout = { 500 };
254 timeout_t default_timeout = { 5000 };
255 timeout_t aftersend_pause = { 0 };
257 timeout_t sleepPause_msec = { 10 };
260 xmlNode* cnode = { 0 };
261 std::shared_ptr<DebugStream> mblog;
265 std::string defaultMBtype;
266 std::string defaultMBaddr;
267 bool mbregFromID = {
false };
268 bool defaultMBinitOK = {
false };
269 bool noQueryOptimization = {
false };
270 std::shared_ptr<uniset::Configuration> conf;
271 std::shared_ptr<SMInterface> shm;
273 void cloneParams(
const std::shared_ptr<MBConfig>& conf );
274 std::string getShortInfo()
const;
278 bool initSMValue( ModbusRTU::ModbusData* data,
int count, RSProperty* p );
280 void readConfiguration(
const std::shared_ptr<uniset::UniXML>& xml, UniXML::iterator sensorsSection );
281 void initOffsetList();
283 std::shared_ptr<RTUDevice> addDev( RTUDeviceMap& dmap, ModbusRTU::ModbusAddr a, UniXML::iterator& it );
284 std::shared_ptr<RegInfo> addReg(std::shared_ptr<RegMap>& devices, ModbusRTU::RegID
id, ModbusRTU::ModbusData r, UniXML::iterator& it, std::shared_ptr<RTUDevice> dev );
285 RSProperty* addProp( PList& plist, RSProperty&& p );
287 bool initMTRitem(UniXML::iterator& it, std::shared_ptr<RegInfo>& p );
288 bool initRTU188item(UniXML::iterator& it, std::shared_ptr<RegInfo>& p );
289 bool initRSProperty( RSProperty& p, UniXML::iterator& it );
290 bool initRegInfo(std::shared_ptr<RegInfo>& r, UniXML::iterator& it, std::shared_ptr<RTUDevice>& dev );
291 bool initRTUDevice( std::shared_ptr<RTUDevice>& d, UniXML::iterator& it );
292 bool initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXML::iterator& it );
Definition: DelayTimer.h:30
Definition: MBConfig.h:42
bool initItem(UniXML::iterator &it)
Definition: MBConfig.cc:575
std::string prop_prefix
Definition: MBConfig.h:264
SafeMode
Definition: MBConfig.h:63
@ safeResetIfNotRespond
Definition: MBConfig.h:65
@ safeExternalControl
Definition: MBConfig.h:66
@ safeNone
Definition: MBConfig.h:64
DeviceType
Definition: MBConfig.h:74
@ dtRTU188
Definition: MBConfig.h:78
@ dtUnknown
Definition: MBConfig.h:75
@ dtRTU
Definition: MBConfig.h:76
@ dtMTR
Definition: MBConfig.h:77
size_t maxQueryCount
Definition: MBConfig.h:259
timeout_t polltime
Definition: MBConfig.h:256
InitList initRegList
Definition: MBConfig.h:243
ExchangeMode
Definition: MBConfig.h:52
@ emNone
Definition: MBConfig.h:53
@ emSkipExchange
Definition: MBConfig.h:57
@ emReadOnly
Definition: MBConfig.h:55
@ emSkipSaveToSM
Definition: MBConfig.h:56
@ emWriteOnly
Definition: MBConfig.h:54
Пассивный таймер
Definition: PassiveTimer.h:94
Definition: CommonEventLoop.h:15
const ObjectId DefaultObjectId
Definition: UniSetTypes.h:70
long ObjectId
Definition: UniSetTypes_i.idl:30
Definition: MBConfig.h:220
Definition: MBConfig.h:89
VTypes::VType vType
Definition: MBConfig.h:92
int8_t nbit
Definition: MBConfig.h:91
uint8_t nbyte
Definition: MBConfig.h:94
uint16_t rnum
Definition: MBConfig.h:93
Definition: MBConfig.h:165
uniset::ObjectId safemode_id
Definition: MBConfig.h:193
long safeMode
Definition: MBConfig.h:192
DeviceType dtype
Definition: MBConfig.h:169
ModbusRTU::ModbusAddr mbaddr
Definition: MBConfig.h:166
bool ask_every_reg
Definition: MBConfig.h:184
Definition: MBConfig.h:119
size_t q_count
Definition: MBConfig.h:145
ModbusRTU::ModbusData mbreg
Definition: MBConfig.h:129
ModbusRTU::SlaveFunctionCode mbfunc
Definition: MBConfig.h:130
MTR::MTRType mtrType
Definition: MBConfig.h:141
bool mb_initOK
Definition: MBConfig.h:154
size_t q_num
Definition: MBConfig.h:144
bool sm_initOK
Definition: MBConfig.h:158