UniSet @VERSION@
ModbusTypes.h
1// -------------------------------------------------------------------------
2#ifndef ModbusTypes_H_
3#define ModbusTypes_H_
4// -------------------------------------------------------------------------
5#include <ostream>
6#include <cstdint>
7#include <bitset>
8#include <string>
9#include <list>
10#include "ModbusRTUErrors.h"
11// -------------------------------------------------------------------------
12/* Основные предположения:
13 * - В случае неправильного формата пакета(запроса), логической ошибки и т.п
14 * ОТВЕТ просто не посылается, а пакет отбрасывается...
15 * - CRC считается по всей посылке (с начальным адресом)
16 * - CRC инициализируется значением 0xffff
17 * - CRC не переворачивается
18 * - Все двухбайтовые слова переворачиваются. Порядок байт: старший младший
19*/
20// -------------------------------------------------------------------------
21namespace uniset
22{
23 // -------------------------------------------------------------------------
24 namespace ModbusRTU
25 {
26 // Базовые типы
27 typedef uint8_t ModbusByte;
28 const size_t BitsPerByte = 8;
29 typedef uint8_t ModbusAddr;
30 typedef uint16_t ModbusData;
31 const uint8_t BitsPerData = 16;
32 typedef uint16_t ModbusCRC;
34 // ---------------------------------------------------------------------
36 enum SlaveFunctionCode
37 {
38 fnUnknown = 0x00,
39 fnReadCoilStatus = 0x01,
40 fnReadInputStatus = 0x02,
41 fnReadOutputRegisters = 0x03,
42 fnReadInputRegisters = 0x04,
43 fnForceSingleCoil = 0x05,
44 fnWriteOutputSingleRegister = 0x06,
45 fnDiagnostics = 0x08,
46 fnForceMultipleCoils = 0x0F,
47 fnWriteOutputRegisters = 0x10,
48 fnReadFileRecord = 0x14,
49 fnWriteFileRecord = 0x15,
50 fnMEI = 0x2B,
51 fnSetDateTime = 0x50,
52 fnRemoteService = 0x53,
53 fnJournalCommand = 0x65,
54 fnFileTransfer = 0x66
55 };
56
58 enum DiagnosticsSubFunction
59 {
60 subEcho = 0x00,
61 dgRestartComm = 0x01,
62 dgDiagReg = 0x02,
63 dgChangeASCII = 0x03,
64 dgForceListen = 0x04,
65 // 05.. 09 RESERVED
66 dgClearCounters = 0x0A,
67 dgBusMsgCount = 0x0B,
68 dgBusErrCount = 0x0C,
69 dgBusExceptCount = 0x0D,
70 dgMsgSlaveCount = 0x0E,
71 dgNoNoResponseCount = 0x0F,
72 dgSlaveNAKCount = 0x10,
73 dgSlaveBusyCount = 0x11,
74 dgBusCharOverrunCount = 0x12,
75 // = 0x13, /*!< RESERVED */
76 dgClearOverrunCounter = 0x14
77 // 21 ...65535 RESERVED
78 };
79
80
81 using RegID = size_t;
82
89 RegID genRegID( const ModbusRTU::ModbusData r, const uint8_t fn );
90
91 // определение размера данных в зависимости от типа сообщения
92 // возвращает -1 - если динамический размер сообщения или размер неизвестен
93 ssize_t szRequestDiagnosticData( DiagnosticsSubFunction f );
94
96 enum RDIObjectID
97 {
98 rdiVendorName = 0x0,
99 rdiProductCode = 0x1,
100 rdiMajorMinorRevision = 0x2,
101 rdiVendorURL = 0x3,
102 rdiProductName = 0x4,
103 rdiModelName = 0x5,
104 rdiUserApplicationName = 0x6
105 // 0x07 .. 0x7F - reserved
106 // 0x80 .. 0xFF - optionaly defined (product dependant)
107 };
108
110 enum RDIRequestDeviceID
111 {
112 rdevMinNum = 0,
113 rdevBasicDevice = 0x1, // request to get the basic device identification (stream access)
114 rdevRegularDevice = 0x2, // request to get the regular device identification (stream access)
115 rdevExtentedDevice = 0x3, // request to get the extended device identification (stream access)
116 rdevSpecificDevice = 0x4, // request to get the extended device identification (stream access)
117 rdevMaxNum = 0x5
118 };
119
120 std::string rdi2str( int id );
121 // -----------------------------------------------------------------------
122
124 enum
125 {
127 MAXLENPACKET = 508,
128 BroadcastAddr = 0,
129 AnyAddr = 255,
130 MAXPDULEN = 253, // 255 - 2(CRC)
131 MAXDATALEN = 125
135 };
136
137 const uint8_t MBErrMask = 0x80;
138 // ---------------------------------------------------------------------
139 uint16_t SWAPSHORT( uint16_t x );
140 // ---------------------------------------------------------------------
142 ModbusCRC checkCRC( ModbusByte* start, size_t len );
143 const size_t szCRC = sizeof(ModbusCRC);
144 // ---------------------------------------------------------------------
146 std::ostream& mbPrintMessage(std::ostream& os, ModbusByte* b, size_t len );
147 // -------------------------------------------------------------------------
148 ModbusAddr str2mbAddr( const std::string& val );
149 ModbusData str2mbData( const std::string& val );
150 std::string dat2str( const ModbusData dat );
151 std::string addr2str( const ModbusAddr addr );
152 std::string b2str( const ModbusByte b );
153 // -------------------------------------------------------------------------
154 float dat2f( const ModbusData dat1, const ModbusData dat2 );
155 size_t numBytes( const size_t nbits ); // сколько байт нужно для указанного количества бит
156 // -------------------------------------------------------------------------
157 // вспомогательная структура для предотвращения утечки памяти (RAII)
159 {
160 DataGuard( size_t sz ):
161 len(sz)
162 {
163 data = new ModbusRTU::ModbusData[sz];
164 }
165
166 ~DataGuard()
167 {
168 delete[] data;
169 }
170
171 ModbusRTU::ModbusData* data;
172 size_t len;
173 };
174 // -----------------------------------------------------------------------------
175 bool isWriteFunction( SlaveFunctionCode c );
176 bool isReadFunction( SlaveFunctionCode c );
177 // -------------------------------------------------------------------------
180 {
181 ModbusAddr addr;
182 ModbusByte func;
184 ModbusHeader(): addr(0), func(0) {}
185 } __attribute__((packed));
186
187 const size_t szModbusHeader = sizeof(ModbusHeader);
188
189 std::ostream& operator<<(std::ostream& os, const ModbusHeader& m );
190 std::ostream& operator<<(std::ostream& os, const ModbusHeader* m );
191 // -----------------------------------------------------------------------
193 {
194 ModbusRTU::ModbusData tID;
195 ModbusRTU::ModbusData pID;
196 ModbusRTU::ModbusData len;
198 MBAPHeader(): tID(0), pID(0), len(0) {}
199
200 void swapdata();
201
202 } __attribute__((packed));
203
204 std::ostream& operator<<(std::ostream& os, const MBAPHeader& m );
205 // -----------------------------------------------------------------------
206
211 {
213
214 ModbusMessage( ModbusMessage&& ) = default;
215 ModbusMessage& operator=(ModbusMessage&& ) = default;
216 ModbusMessage( const ModbusMessage& ) = default;
217 ModbusMessage& operator=(const ModbusMessage& ) = default;
218
219 inline ModbusByte func() const
220 {
221 return pduhead.func;
222 }
223 inline ModbusAddr addr() const
224 {
225 return pduhead.addr;
226 }
227 inline ModbusRTU::ModbusData tID() const
228 {
229 return mbaphead.tID;
230 }
231 inline ModbusRTU::ModbusData pID() const
232 {
233 return mbaphead.pID;
234 }
235 inline ModbusRTU::ModbusData aduLen() const
236 {
237 return mbaphead.len;
238 }
239
240 u_int8_t* buf();
241 ModbusRTU::ModbusData len() const;
242 void swapHead();
243 void makeMBAPHeader( ModbusRTU::ModbusData tID, bool noCRC = true, ModbusRTU::ModbusData pID = 0 );
244
245 ModbusRTU::ModbusData pduLen() const;
246 ModbusCRC pduCRC( size_t len ) const;
247 static size_t maxSizeOfMessage();
248
249 void clear();
250
251 MBAPHeader mbaphead;
252 ModbusHeader pduhead;
253 ModbusByte data[MAXLENPACKET + szCRC];
255 // Это поле вспомогательное и игнорируется при пересылке
256 size_t dlen = { 0 };
257 } __attribute__((packed));
258
259 std::ostream& operator<<(std::ostream& os, const ModbusMessage& m );
260 std::ostream& operator<<(std::ostream& os, const ModbusMessage* m );
261 // -----------------------------------------------------------------------
264 public ModbusHeader
265 {
266 ModbusByte ecode = { erNoError };
267 ModbusCRC crc = { 0 };
268
269 // ------- from slave -------
270 ErrorRetMessage( const ModbusMessage& m );
271 ErrorRetMessage& operator=( const ModbusMessage& m );
272 void init( const ModbusMessage& m );
273 static ModbusCRC getCrc( const ModbusMessage& m );
274 static ModbusCRC calcCRC( const ModbusMessage& m );
275
276 // ------- to master -------
277 ErrorRetMessage( ModbusAddr _from, ModbusByte _func, ModbusByte ecode );
278 static void make_to( ModbusAddr addr, ModbusByte _func, ModbusByte ecode, ModbusMessage& m );
279
282 void transport_msg_to( ModbusMessage& m ) const;
283
287 inline static size_t szData()
288 {
289 return sizeof(ModbusByte) + szCRC;
290 }
291 };
292
293 std::ostream& operator<<(std::ostream& os, ErrorRetMessage& m );
294 std::ostream& operator<<(std::ostream& os, ErrorRetMessage* m );
295 // -----------------------------------------------------------------------
296 struct DataBits
297 {
298 DataBits( ModbusByte b );
299 DataBits( std::string s ); // example "10001111"
300 DataBits();
301
302 const DataBits& operator=(const ModbusByte& r);
303
304 operator ModbusByte();
305 ModbusByte mbyte();
306
307 bool operator[] ( const size_t i ) const
308 {
309 return b[i];
310 }
311 void set( int n, bool s )
312 {
313 b.set(n, s);
314 }
315
316 std::bitset<BitsPerByte> b;
317 };
318
319 std::ostream& operator<<(std::ostream& os, DataBits& m );
320 std::ostream& operator<<(std::ostream& os, DataBits* m );
321 // -----------------------------------------------------------------------
323 {
324 DataBits16( ModbusData d );
325 DataBits16( const std::string& s ); // example "1000111110001111"
326 DataBits16();
327
328 const DataBits16& operator=(const ModbusData& r);
329
330 operator ModbusData();
331 ModbusData mdata() const;
332
333 bool operator[]( const size_t i ) const
334 {
335 return b[i];
336 }
337 void set( int n, bool s )
338 {
339 b.set(n, s);
340 }
341 void reset()
342 {
343 b.reset();
344 }
345
346 std::bitset<BitsPerData> b;
347 };
348
349 std::ostream& operator<<(std::ostream& os, DataBits16& m );
350 std::ostream& operator<<(std::ostream& os, DataBits16* m );
351 // -----------------------------------------------------------------------
353 {
354 ModbusByte bcnt = { 0 };
355 ModbusByte data[MAXPDULEN];
357 BitsBuffer();
358
363 bool addData( DataBits d );
364
372 bool setBit( uint8_t dnum, uint8_t bnum, bool state );
373
380 bool setByBitNum( uint16_t num, bool state );
381
388 bool getData( uint8_t dnum, DataBits& d ) const;
389
396 bool getByBitNum( uint16_t num, bool& state ) const;
397
405 bool getBit( uint8_t dnum, uint8_t bnum, bool& state ) const;
406
408 void clear();
409
411 inline bool isFull() const
412 {
413 return ( (size_t)bcnt >= sizeof(data) );
414 }
415 };
416 std::ostream& operator<<(std::ostream& os, BitsBuffer& m );
417 std::ostream& operator<<(std::ostream& os, BitsBuffer* m );
418 // -----------------------------------------------------------------------
421 public ModbusHeader
422 {
423 ModbusData start = { 0 };
424 ModbusData count = { 0 };
425 ModbusCRC crc = { 0 };
426
427 // ------- to slave -------
428 ReadCoilMessage( ModbusAddr addr, ModbusData start, ModbusData count );
429 static void make_to( ModbusAddr addr, ModbusData start, ModbusData count, ModbusMessage& m );
430
433 void transport_msg_to( ModbusMessage& m ) const;
434
435 // ------- from master -------
436 ReadCoilMessage( const ModbusMessage& m );
437 ReadCoilMessage& operator=( const ModbusMessage& m );
438 void init( const ModbusMessage& m );
439 static ModbusCRC getCrc( const ModbusMessage& m );
440 static ModbusCRC calcCRC( const ModbusMessage& m );
441
443 inline static size_t szData()
444 {
445 return sizeof(ModbusData) * 2 + szCRC;
446 }
447
448 } __attribute__((packed));
449
450 std::ostream& operator<<(std::ostream& os, ReadCoilMessage& m );
451 std::ostream& operator<<(std::ostream& os, ReadCoilMessage* m );
452
453 // -----------------------------------------------------------------------
456 public ModbusHeader,
457 public BitsBuffer
458 {
459 // ------- from slave -------
461 ReadCoilRetMessage& operator=( const ModbusMessage& m );
462 void init( const ModbusMessage& m );
463 static ModbusCRC getCrc( const ModbusMessage& m );
464 static ModbusCRC calcCRC( const ModbusMessage& m );
465
469 static inline int szHead()
470 {
471 return sizeof(ModbusByte); // bcnt
472 }
473
475 static size_t getDataLen( const ModbusMessage& m );
476 ModbusCRC crc = { 0 };
477
479 size_t szData() const;
480
481 // ------- to master -------
482 ReadCoilRetMessage( ModbusAddr _from );
483
486 void transport_msg_to( ModbusMessage& m ) const;
487 };
488
489 std::ostream& operator<<(std::ostream& os, ReadCoilRetMessage& m );
490 std::ostream& operator<<(std::ostream& os, ReadCoilRetMessage* m );
491 // -----------------------------------------------------------------------
494 public ModbusHeader
495 {
496 ModbusData start = { 0 };
497 ModbusData count = { 0 };
498 ModbusCRC crc = { 0 };
499
500 // ------- to slave -------
501 ReadInputStatusMessage( ModbusAddr addr, ModbusData start, ModbusData count );
502 static void make_to( ModbusAddr addr, ModbusData start, ModbusData count, ModbusMessage& m );
503
506 void transport_msg_to( ModbusMessage& m ) const;
507
508 // ------- from master -------
510 ReadInputStatusMessage& operator=( const ModbusMessage& m );
511
512 void init( const ModbusMessage& m );
513 static ModbusCRC getCrc( const ModbusMessage& m );
514 static ModbusCRC calcCRC( const ModbusMessage& m );
515
517 inline static size_t szData()
518 {
519 return sizeof(ModbusData) * 2 + szCRC;
520 }
521
522 } __attribute__((packed));
523
524 std::ostream& operator<<(std::ostream& os, ReadInputStatusMessage& m );
525 std::ostream& operator<<(std::ostream& os, ReadInputStatusMessage* m );
526 // -----------------------------------------------------------------------
529 public ModbusHeader,
530 public BitsBuffer
531 {
532 // ------- from slave -------
534 ReadInputStatusRetMessage& operator=( const ModbusMessage& m );
535 void init( const ModbusMessage& m );
536 static ModbusCRC getCrc( const ModbusMessage& m );
537 static ModbusCRC calcCRC( const ModbusMessage& m );
538
542 static inline size_t szHead()
543 {
544 return sizeof(ModbusByte); // bcnt
545 }
546
548 static size_t getDataLen( const ModbusMessage& m );
549 ModbusCRC crc = { 0 };
550
552 size_t szData() const;
553
554 // ------- to master -------
555 ReadInputStatusRetMessage( ModbusAddr _from );
556
559 void transport_msg_to( ModbusMessage& m ) const;
560 };
561
562 std::ostream& operator<<(std::ostream& os, ReadInputStatusRetMessage& m );
563 std::ostream& operator<<(std::ostream& os, ReadInputStatusRetMessage* m );
564 // -----------------------------------------------------------------------
565
568 public ModbusHeader
569 {
570 ModbusData start = { 0 };
571 ModbusData count = { 0 };
572 ModbusCRC crc = { 0 };
573
574 // ------- to slave -------
575 ReadOutputMessage( ModbusAddr addr, ModbusData start, ModbusData count );
576 static void make_to( ModbusAddr addr, ModbusData start, ModbusData count, ModbusMessage& m );
579 void transport_msg_to( ModbusMessage& m ) const;
580
581 // ------- from master -------
583 ReadOutputMessage& operator=( const ModbusMessage& m );
584 void init( const ModbusMessage& m );
585 static ModbusCRC getCrc( const ModbusMessage& m );
586 static ModbusCRC calcCRC( const ModbusMessage& m );
587
589 inline static size_t szData()
590 {
591 return sizeof(ModbusData) * 2 + szCRC;
592 }
593
594 } __attribute__((packed));
595
596 std::ostream& operator<<(std::ostream& os, ReadOutputMessage& m );
597 std::ostream& operator<<(std::ostream& os, ReadOutputMessage* m );
598 // -----------------------------------------------------------------------
601 public ModbusHeader
602 {
603 ModbusByte bcnt = { 0 };
604 ModbusData data[MAXLENPACKET / sizeof(ModbusData)];
606 // ------- from slave -------
608 ReadOutputRetMessage& operator=( const ModbusMessage& m );
609 void init( const ModbusMessage& m );
610 static ModbusCRC getCrc( const ModbusMessage& m );
611 static ModbusCRC calcCRC( const ModbusMessage& m );
612
616 static inline size_t szHead()
617 {
618 // bcnt
619 return sizeof(ModbusByte);
620 }
621
623 static size_t getDataLen( const ModbusMessage& m );
624 ModbusCRC crc = { 0 };
625
626 // ------- to master -------
627 ReadOutputRetMessage( ModbusAddr _from );
628
633 bool addData( ModbusData d );
634
636 void clear();
637
639 inline bool isFull() const
640 {
641 return ( count * sizeof(ModbusData) >= MAXLENPACKET );
642 }
643
645 size_t szData() const;
646
649 void transport_msg_to( ModbusMessage& m ) const;
650
651 // Это поле не входит в стандарт modbus
652 // оно вспомогательное и игнорируется при
653 // преобразовании в ModbusMessage.
654 // Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
655 // Используйте специальную функцию transport_msg()
656 size_t count = { 0 };
657 };
658
659 std::ostream& operator<<(std::ostream& os, ReadOutputRetMessage& m );
660 std::ostream& operator<<(std::ostream& os, ReadOutputRetMessage* m );
661 // -----------------------------------------------------------------------
664 public ModbusHeader
665 {
666 ModbusData start = { 0 };
667 ModbusData count = { 0 };
668 ModbusCRC crc = { 0 };
669
670 // ------- to slave -------
671 ReadInputMessage( ModbusAddr addr, ModbusData start, ModbusData count );
672 static void make_to( ModbusAddr addr, ModbusData start, ModbusData count, ModbusMessage& m );
675 void transport_msg_to( ModbusMessage& m ) const;
676
677 // ------- from master -------
679 ReadInputMessage& operator=( const ModbusMessage& m );
680 void init( const ModbusMessage& m );
681 static ModbusCRC getCrc( const ModbusMessage& m );
682 static ModbusCRC calcCRC( const ModbusMessage& m );
683
685 inline static size_t szData()
686 {
687 return sizeof(ModbusData) * 2 + szCRC;
688 }
689
690 } __attribute__((packed));
691
692 std::ostream& operator<<(std::ostream& os, ReadInputMessage& m );
693 std::ostream& operator<<(std::ostream& os, ReadInputMessage* m );
694 // -----------------------------------------------------------------------
695
698 public ModbusHeader
699 {
700 ModbusByte bcnt = { 0 };
701 ModbusData data[MAXLENPACKET / sizeof(ModbusData)];
703 // ------- from slave -------
705 ReadInputRetMessage& operator=( const ModbusMessage& m );
706 void init( const ModbusMessage& m );
707 static ModbusCRC getCrc( const ModbusMessage& m );
708 static ModbusCRC calcCRC( const ModbusMessage& m );
709
713 static inline size_t szHead()
714 {
715 // bcnt
716 return sizeof(ModbusByte);
717 }
718
720 static size_t getDataLen( const ModbusMessage& m );
721 ModbusCRC crc = { 0 };
722
723 // ------- to master -------
724 ReadInputRetMessage( ModbusAddr _from );
725
730 bool addData( ModbusData d );
731
733 void clear();
734
736 inline bool isFull() const
737 {
738 return ( count * sizeof(ModbusData) >= MAXLENPACKET );
739 }
740
741 void swapData();
742
744 size_t szData() const;
745
748 void transport_msg_to( ModbusMessage& m ) const;
749
750 // Это поле не входит в стандарт modbus
751 // оно вспомогательное и игнорируется при
752 // преобразовании в ModbusMessage.
753 // Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
754 // Используйте специальную функцию transport_msg()
755 size_t count = { 0 };
756 };
757
758 std::ostream& operator<<(std::ostream& os, ReadInputRetMessage& m );
759 std::ostream& operator<<(std::ostream& os, ReadInputRetMessage* m );
760 // -----------------------------------------------------------------------
763 public ModbusHeader
764 {
765 ModbusData start = { 0 };
766 ModbusData quant = { 0 };
767 ModbusByte bcnt = { 0 };
769 ModbusByte data[MAXLENPACKET - sizeof(ModbusData) * 2 - sizeof(ModbusByte)];
770 ModbusCRC crc = { 0 };
772 // ------- to slave -------
773 ForceCoilsMessage( ModbusAddr addr, ModbusData start );
776 void transport_msg_to( ModbusMessage& m ) const;
777
782 bool addData( DataBits d );
783
784 // return number of bit
785 // -1 - error
786 int addBit( bool state );
787
788 bool setBit( uint8_t nbit, bool state );
789
790 inline size_t last() const
791 {
792 return quant;
793 }
794
801 bool getData( uint8_t dnum, DataBits& d ) const;
802
803 void clear();
804 inline bool isFull() const
805 {
806 return ( (int)bcnt >= MAXPDULEN );
807 }
808
809 // ------- from master -------
810 ForceCoilsMessage( const ModbusMessage& m );
811 ForceCoilsMessage& operator=( const ModbusMessage& m );
812 void init( const ModbusMessage& m );
813 static ModbusCRC getCrc( const ModbusMessage& m );
814 static ModbusCRC calcCRC( const ModbusMessage& m );
815
817 size_t szData() const;
818
822 static inline size_t szHead()
823 {
824 // start + quant + count
825 return sizeof(ModbusData) * 2 + sizeof(ModbusByte);
826 }
827
829 static size_t getDataLen( const ModbusMessage& m );
830
832 static bool checkFormat( const ModbusMessage& m );
833
834 } __attribute__((packed));
835
836 std::ostream& operator<<(std::ostream& os, ForceCoilsMessage& m );
837 std::ostream& operator<<(std::ostream& os, ForceCoilsMessage* m );
838 // -----------------------------------------------------------------------
841 public ModbusHeader
842 {
843 ModbusData start = { 0 };
844 ModbusData quant = { 0 };
845 ModbusCRC crc = { 0 };
846
847 // ------- from slave -------
849 ForceCoilsRetMessage& operator=( const ModbusMessage& m );
850 void init( const ModbusMessage& m );
851 static ModbusCRC getCrc( const ModbusMessage& m );
852 static ModbusCRC calcCRC( const ModbusMessage& m );
853
854 // ------- to master -------
860 ForceCoilsRetMessage( ModbusAddr _from, ModbusData start = 0, ModbusData quant = 0 );
861 static void make_to( ModbusAddr _from, ModbusData start, ModbusData count, ModbusMessage& m );
862
864 void set( ModbusData start, ModbusData quant );
865
868 void transport_msg_to( ModbusMessage& m ) const;
869
873 inline static size_t szData()
874 {
875 return sizeof(ModbusData) * 2 + sizeof(ModbusCRC);
876 }
877 };
878
879 std::ostream& operator<<(std::ostream& os, ForceCoilsRetMessage& m );
880 std::ostream& operator<<(std::ostream& os, ForceCoilsRetMessage* m );
881 // -----------------------------------------------------------------------
882
885 public ModbusHeader
886 {
887 ModbusData start = { 0 };
888 ModbusData quant = { 0 };
889 ModbusByte bcnt = { 0 };
891 ModbusData data[MAXLENPACKET / sizeof(ModbusData) - sizeof(ModbusData) * 2 - sizeof(ModbusByte)];
892 ModbusCRC crc = { 0 };
894 // ------- to slave -------
895 WriteOutputMessage( ModbusAddr addr, ModbusData start );
898 void transport_msg_to( ModbusMessage& m ) const;
899
900 bool addData( ModbusData d );
901 void clear();
902 inline bool isFull() const
903 {
904 return ( quant >= MAXDATALEN );
905 }
906
907 // ------- from master -------
909 WriteOutputMessage& operator=( const ModbusMessage& m );
910 void init( const ModbusMessage& m );
911 static ModbusCRC getCrc( const ModbusMessage& m );
912 static ModbusCRC calcCRC( const ModbusMessage& m );
913
915 size_t szData() const;
916
920 static inline size_t szHead()
921 {
922 // start + quant + count
923 return sizeof(ModbusData) * 2 + sizeof(ModbusByte);
924 }
925
927 static size_t getDataLen( const ModbusMessage& m );
928
930 static bool checkFormat( const ModbusMessage& m );
931
932 } __attribute__((packed));
933
934
935 std::ostream& operator<<(std::ostream& os, WriteOutputMessage& m );
936 std::ostream& operator<<(std::ostream& os, WriteOutputMessage* m );
937
940 public ModbusHeader
941 {
942 ModbusData start = { 0 };
943 ModbusData quant = { 0 };
945 // ------- from slave -------
947 WriteOutputRetMessage& operator=( const ModbusMessage& m );
948 void init( const ModbusMessage& m );
949 static ModbusCRC getCrc( const ModbusMessage& m );
950 static ModbusCRC calcCRC( const ModbusMessage& m );
951 ModbusCRC crc = { 0 };
952
953 // ------- to master -------
959 WriteOutputRetMessage( ModbusAddr _from, ModbusData start = 0, ModbusData quant = 0 );
960 static void make_to( ModbusAddr _from, ModbusData start, ModbusData quant, ModbusMessage& m );
961
963 void set( ModbusData start, ModbusData quant );
964
967 void transport_msg_to( ModbusMessage& m ) const;
968
972 inline static size_t szData()
973 {
974 return sizeof(ModbusData) * 2 + sizeof(ModbusCRC);
975 }
976 };
977
978 std::ostream& operator<<(std::ostream& os, WriteOutputRetMessage& m );
979 std::ostream& operator<<(std::ostream& os, WriteOutputRetMessage* m );
980 // -----------------------------------------------------------------------
983 public ModbusHeader
984 {
985 ModbusData start = { 0 };
986 ModbusData data = { 0 };
987 ModbusCRC crc = { 0 };
990 inline bool cmd() const
991 {
992 return (data & 0xFF00);
993 }
994
995 // ------- to slave -------
996 ForceSingleCoilMessage( ModbusAddr addr, ModbusData reg, bool state );
997 static void make_to( ModbusAddr addr, ModbusData ref, bool state, ModbusMessage& m );
1000 void transport_msg_to( ModbusMessage& m ) const;
1001
1002 // ------- from master -------
1004 ForceSingleCoilMessage& operator=( const ModbusMessage& m );
1005 void init( const ModbusMessage& m );
1006 static ModbusCRC getCrc( const ModbusMessage& m );
1007 static ModbusCRC calcCRC( const ModbusMessage& m );
1008
1010 static size_t szData();
1011
1015 static inline size_t szHead()
1016 {
1017 return sizeof(ModbusData);
1018 }
1019
1023 static size_t getDataLen( const ModbusMessage& m );
1024
1026 static bool checkFormat( const ModbusMessage& m );
1027 } __attribute__((packed));
1028
1029
1030 std::ostream& operator<<(std::ostream& os, ForceSingleCoilMessage& m );
1031 std::ostream& operator<<(std::ostream& os, ForceSingleCoilMessage* m );
1032 // -----------------------------------------------------------------------
1033
1036 public ModbusHeader
1037 {
1038 ModbusData start = { 0 };
1039 ModbusData data = { 0 };
1040 ModbusCRC crc = { 0 };
1041
1043 inline bool cmd() const
1044 {
1045 return (data & 0xFF00);
1046 }
1047
1048 // ------- from slave -------
1050 ForceSingleCoilRetMessage& operator=( const ModbusMessage& m );
1051 void init( const ModbusMessage& m );
1052 static ModbusCRC getCrc( const ModbusMessage& m );
1053 static ModbusCRC calcCRC( const ModbusMessage& m );
1054
1055 // ------- to master -------
1059 ForceSingleCoilRetMessage( ModbusAddr _from );
1060 static void make_to( ModbusAddr addr, ModbusData start, bool cmd, ModbusMessage& m );
1061
1063 void set( ModbusData start, bool cmd );
1064
1067 void transport_msg_to( ModbusMessage& m ) const;
1068
1072 inline static size_t szData()
1073 {
1074 return 2 * sizeof(ModbusData) + sizeof(ModbusCRC);
1075 }
1076 };
1077
1078 std::ostream& operator<<(std::ostream& os, ForceSingleCoilRetMessage& m );
1079 std::ostream& operator<<(std::ostream& os, ForceSingleCoilRetMessage* m );
1080 // -----------------------------------------------------------------------
1081
1084 public ModbusHeader
1085 {
1086 ModbusData start = { 0 };
1087 ModbusData data = { 0 };
1088 ModbusCRC crc = { 0 };
1091 // ------- to slave -------
1092 WriteSingleOutputMessage( ModbusAddr addr, ModbusData reg = 0, ModbusData data = 0 );
1093 static void make_to( ModbusAddr addr, ModbusData start, ModbusData data, ModbusMessage& m );
1096 void transport_msg_to( ModbusMessage& m ) const;
1097
1098 // ------- from master -------
1100 WriteSingleOutputMessage& operator=( const ModbusMessage& m );
1101 void init( const ModbusMessage& m );
1102 static ModbusCRC getCrc( const ModbusMessage& m );
1103 static ModbusCRC calcCRC( const ModbusMessage& m );
1104
1106 static size_t szData();
1107
1111 static inline size_t szHead()
1112 {
1113 return sizeof(ModbusData);
1114 }
1115
1119 static size_t getDataLen( const ModbusMessage& m );
1120
1122 static bool checkFormat( const ModbusMessage& m );
1123 } __attribute__((packed));
1124
1125
1126 std::ostream& operator<<(std::ostream& os, WriteSingleOutputMessage& m );
1127 std::ostream& operator<<(std::ostream& os, WriteSingleOutputMessage* m );
1128 // -----------------------------------------------------------------------
1129
1132 public ModbusHeader
1133 {
1134 ModbusData start = { 0 };
1135 ModbusData data = { 0 };
1136 ModbusCRC crc = { 0 };
1137
1138
1139 // ------- from slave -------
1141 WriteSingleOutputRetMessage& operator=( const ModbusMessage& m );
1142 void init( const ModbusMessage& m );
1143 static ModbusCRC getCrc( const ModbusMessage& m );
1144 static ModbusCRC calcCRC( const ModbusMessage& m );
1145
1146 // ------- to master -------
1151 WriteSingleOutputRetMessage( ModbusAddr _from, ModbusData start = 0 );
1152 static void make_to( ModbusAddr addr, ModbusData start, ModbusData data, ModbusMessage& m );
1153
1155 void set( ModbusData start, ModbusData data );
1156
1159 void transport_msg_to( ModbusMessage& m ) const;
1160
1164 inline static size_t szData()
1165 {
1166 return 2 * sizeof(ModbusData) + sizeof(ModbusCRC);
1167 }
1168 };
1169
1170 std::ostream& operator<<(std::ostream& os, WriteSingleOutputRetMessage& m );
1171 std::ostream& operator<<(std::ostream& os, WriteSingleOutputRetMessage* m );
1172 // -----------------------------------------------------------------------
1175 public ModbusHeader
1176 {
1177 ModbusData subf = { 0 };
1178 ModbusData data[MAXLENPACKET / sizeof(ModbusData)];
1180 // ------- from slave -------
1181 DiagnosticMessage( const ModbusMessage& m );
1182 DiagnosticMessage& operator=( const ModbusMessage& m );
1183 void init( const ModbusMessage& m );
1184 static ModbusCRC getCrc( const ModbusMessage& m );
1185 static ModbusCRC calcCRC( const ModbusMessage& m );
1186
1190 static inline size_t szHead()
1191 {
1192 return sizeof(ModbusData); // subf
1193 }
1194
1196 static size_t getDataLen( const ModbusMessage& m );
1197 ModbusCRC crc = { 0 };
1198
1199 // ------- to master -------
1200 DiagnosticMessage( ModbusAddr _from, DiagnosticsSubFunction subf, ModbusData d = 0 );
1201
1206 bool addData( ModbusData d );
1207
1209 void clear();
1210
1212 inline bool isFull() const
1213 {
1214 // (1)subf + data count
1215 return ( 1 + count >= MAXDATALEN );
1216 }
1217
1219 size_t szData() const;
1220
1223 void transport_msg_to( ModbusMessage& m ) const;
1224
1225 // Это поле не входит в стандарт modbus
1226 // оно вспомогательное и игнорируется при
1227 // преобразовании в ModbusMessage.
1228 // Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
1229 // Используйте специальную функцию transport_msg()
1230 size_t count = { 0 };
1231 };
1232 std::ostream& operator<<(std::ostream& os, DiagnosticMessage& m );
1233 std::ostream& operator<<(std::ostream& os, DiagnosticMessage* m );
1234 // -----------------------------------------------------------------------
1237 public DiagnosticMessage
1238 {
1241 DiagnosticRetMessage( ModbusAddr a, DiagnosticsSubFunction subf, ModbusData d = 0 );
1242 };
1243
1244 std::ostream& operator<<(std::ostream& os, DiagnosticRetMessage& m );
1245 std::ostream& operator<<(std::ostream& os, DiagnosticRetMessage* m );
1246 // -----------------------------------------------------------------------
1249 public ModbusHeader
1250 {
1251 ModbusByte type;
1252 ModbusByte devID;
1253 ModbusByte objID;
1255 ModbusCRC crc = { 0 };
1257 // ------- to slave -------
1258 MEIMessageRDI( ModbusAddr addr, ModbusByte devID, ModbusByte objID );
1259 static void make_to( ModbusAddr addr, ModbusByte devID, ModbusByte objID, ModbusMessage& m );
1260
1263 void transport_msg_to( ModbusMessage& m ) const;
1264
1265 // ------- from master -------
1266 MEIMessageRDI( const ModbusMessage& m );
1267 MEIMessageRDI& operator=( const ModbusMessage& m );
1268 void init( const ModbusMessage& m );
1269 static ModbusCRC getCrc( const ModbusMessage& m );
1270 static ModbusCRC calcCRC( const ModbusMessage& m );
1271
1275 static inline size_t szHead()
1276 {
1277 return sizeof(ModbusByte) * 3;
1278 }
1279
1281 static inline size_t szData()
1282 {
1283 return sizeof(ModbusByte) * 3 + szCRC;
1284 }
1285
1286 // вспомогательные функции
1287 bool checkFormat() const;
1288
1289 } __attribute__((packed));
1290 // -----------------------------------------------------------------------
1291 std::ostream& operator<<(std::ostream& os, MEIMessageRDI& m );
1292 std::ostream& operator<<(std::ostream& os, MEIMessageRDI* m );
1293 // -----------------------------------------------------------------------
1294
1296 {
1297 RDIObjectInfo(): id(0), val("") {}
1298 RDIObjectInfo( ModbusByte id, const std::string& v ): id(id), val(v) {}
1299 RDIObjectInfo( ModbusByte id, const ModbusByte* dat, ModbusByte len );
1300
1301 ModbusByte id;
1302 std::string val;
1303 };
1304
1305 using RDIObjectList = std::list<RDIObjectInfo>;
1306
1309 public ModbusHeader
1310 {
1311 ModbusByte type;
1312 ModbusByte devID;
1313 ModbusByte conformity;
1314 ModbusByte mf;
1315 ModbusByte objID;
1316 ModbusByte objNum;
1318 RDIObjectList dlist;
1319 ModbusCRC crc = { 0 };
1320
1321 // ------- from slave -------
1323 MEIMessageRetRDI( const ModbusMessage& m );
1324 MEIMessageRetRDI& operator=( const ModbusMessage& m );
1325 void init( const ModbusMessage& m );
1326 static ModbusCRC getCrc( const ModbusMessage& m );
1327 static ModbusCRC calcCRC( const ModbusMessage& m );
1328
1329 // предварительная инициализации, только заголовочной части, без данных
1330 void pre_init( const ModbusMessage& m );
1331
1333 static inline size_t szHead()
1334 {
1335 return sizeof(ModbusByte) * 6;
1336 }
1337
1338 // /*! узнать длину данных следующих за предварительным заголовком ( в байтах ) */
1339 // static int getDataLen( ModbusMessage& m );
1340
1341 // ------- to master -------
1342 MEIMessageRetRDI( ModbusAddr _from, ModbusByte devID, ModbusByte conformity, ModbusByte mf, ModbusByte objID );
1343
1348 bool addData( ModbusByte id, const std::string& value );
1349 bool addData( RDIObjectInfo& dat );
1350
1352 void clear();
1353
1355 inline bool isFull() const
1356 {
1357 return ( bcnt >= MAXPDULEN );
1358 }
1359
1361 size_t szData() const;
1362
1365 void transport_msg_to( ModbusMessage& m ) const;
1366
1367 size_t bcnt = { 0 };
1368 };
1369
1370 std::ostream& operator<<(std::ostream& os, MEIMessageRetRDI& m );
1371 std::ostream& operator<<(std::ostream& os, MEIMessageRetRDI* m );
1372 std::ostream& operator<<(std::ostream& os, RDIObjectList& dl );
1373 std::ostream& operator<<(std::ostream& os, RDIObjectList* dl );
1374 // -----------------------------------------------------------------------
1375 // -----------------------------------------------------------------------
1376
1379 public ModbusHeader
1380 {
1381 ModbusData cmd = { 0 };
1382 ModbusData num = { 0 };
1383 ModbusCRC crc = { 0 };
1384
1385 // -------------
1387 JournalCommandMessage& operator=( const ModbusMessage& m );
1388 static ModbusCRC getCrc( const ModbusMessage& m );
1389 static ModbusCRC calcCRC( const ModbusMessage& m );
1390
1392 inline static size_t szData()
1393 {
1394 return sizeof(ModbusData) * 2 + szCRC;
1395 }
1396
1397 } __attribute__((packed));
1398
1399 std::ostream& operator<<(std::ostream& os, JournalCommandMessage& m );
1400 std::ostream& operator<<(std::ostream& os, JournalCommandMessage* m );
1401 // -----------------------------------------------------------------------
1404 public ModbusHeader
1405 {
1406 ModbusByte bcnt = { 0 };
1407 // ModbusByte data[MAXLENPACKET-1]; /*!< данные */
1408
1409 // В связи со спецификой реализации ответной части (т.е. modbus master)
1410 // данные приходится делать не байтовым потоком, а "словами"
1411 // которые в свою очередь будут перевёрнуты при посылке...
1412 ModbusData data[MAXLENPACKET / sizeof(ModbusData)];
1414 // -------------
1415 JournalCommandRetMessage( ModbusAddr _from );
1416
1423 bool setData( ModbusByte* b, int len );
1424
1426 void clear();
1427
1429 inline bool isFull() const
1430 {
1431 return ( count >= MAXDATALEN );
1432 }
1433
1435 size_t szData() const;
1436
1437 static ModbusCRC getCrc( const ModbusMessage& m );
1438 static ModbusCRC calcCRC( const ModbusMessage& m );
1439
1442 void transport_msg_to( ModbusMessage& m ) const;
1443
1444 // Это поле не входит в стандарт modbus
1445 // оно вспомогательное и игнорируется при
1446 // преобразовании в ModbusMessage.
1447 // Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
1448 // Используйте специальную функцию transport_msg()
1449 size_t count = { 0 };
1450 };
1451
1452 std::ostream& operator<<(std::ostream& os, JournalCommandRetMessage& m );
1453 std::ostream& operator<<(std::ostream& os, JournalCommandRetMessage* m );
1454 // -----------------------------------------------------------------------
1460 {
1461 // -------------
1462 JournalCommandRetOK( ModbusAddr _from );
1463 void set( ModbusData cmd, ModbusData ecode );
1464 static void set( JournalCommandRetMessage& m, ModbusData cmd, ModbusData ecode );
1465 };
1466
1467 std::ostream& operator<<(std::ostream& os, JournalCommandRetOK& m );
1468 std::ostream& operator<<(std::ostream& os, JournalCommandRetOK* m );
1469 // -----------------------------------------------------------------------
1470
1473 public ModbusHeader
1474 {
1475 ModbusByte hour = { 0 };
1476 ModbusByte min = { 0 };
1477 ModbusByte sec = { 0 };
1478 ModbusByte day = { 1 };
1479 ModbusByte mon = { 1 };
1480 ModbusByte year = { 0 };
1481 ModbusByte century = { 20 };
1483 ModbusCRC crc = { 0 };
1484
1485 // ------- to slave -------
1486 SetDateTimeMessage( ModbusAddr addr );
1489 void transport_msg_to( ModbusMessage& m ) const;
1490
1491 // ------- from master -------
1493 SetDateTimeMessage& operator=( const ModbusMessage& m );
1495 static ModbusCRC getCrc( const ModbusMessage& m );
1496 static ModbusCRC calcCRC( const ModbusMessage& m );
1497
1498 static bool checkFormat( const ModbusMessage& m );
1499
1501 inline static size_t szData()
1502 {
1503 return sizeof(ModbusByte) * 7 + szCRC;
1504 }
1505
1506 } __attribute__((packed));
1507
1508 std::ostream& operator<<(std::ostream& os, SetDateTimeMessage& m );
1509 std::ostream& operator<<(std::ostream& os, SetDateTimeMessage* m );
1510 // -----------------------------------------------------------------------
1511
1514 public SetDateTimeMessage
1515 {
1516
1517 // ------- from slave -------
1519 SetDateTimeRetMessage& operator=( const ModbusMessage& m );
1520 void init( const ModbusMessage& m );
1521 static ModbusCRC getCrc( const ModbusMessage& m );
1522 static ModbusCRC calcCRC( const ModbusMessage& m );
1523
1524 // ------- to master -------
1525 SetDateTimeRetMessage( ModbusAddr _from );
1527 static void cpy( SetDateTimeRetMessage& reply, const SetDateTimeMessage& query );
1528
1531 void transport_msg_to( ModbusMessage& m ) const;
1532 };
1533 // -----------------------------------------------------------------------
1534
1537 public ModbusHeader
1538 {
1539 ModbusByte bcnt = { 0 };
1542 ModbusByte data[MAXLENPACKET - sizeof(ModbusByte)];
1543 ModbusCRC crc = { 0 };
1545 // -----------
1547 RemoteServiceMessage& operator=( const ModbusMessage& m );
1548 void init( const ModbusMessage& m );
1549 static ModbusCRC getCrc( const ModbusMessage& m );
1550 static ModbusCRC calcCRC( const ModbusMessage& m );
1551
1553 size_t szData() const;
1554
1558 static inline size_t szHead()
1559 {
1560 return sizeof(ModbusByte); // bcnt
1561 }
1562
1564 static size_t getDataLen( const ModbusMessage& m );
1565
1566 } __attribute__((packed));
1567
1568 std::ostream& operator<<(std::ostream& os, RemoteServiceMessage& m );
1569 std::ostream& operator<<(std::ostream& os, RemoteServiceMessage* m );
1570 // -----------------------------------------------------------------------
1572 public ModbusHeader
1573 {
1574 ModbusByte bcnt = { 0 };
1576 ModbusByte data[MAXLENPACKET - sizeof(ModbusByte)];
1577
1578 RemoteServiceRetMessage( ModbusAddr _from );
1579
1586 bool setData( ModbusByte* b, int len );
1587
1589 void clear();
1590
1592 inline bool isFull() const
1593 {
1594 return ( count >= sizeof(data) );
1595 }
1596
1598 size_t szData() const;
1599
1600 static ModbusCRC getCrc( const ModbusMessage& m );
1601 static ModbusCRC calcCRC( const ModbusMessage& m );
1602
1605 void transport_msg_to( ModbusMessage& m ) const;
1606
1607 // Это поле не входит в стандарт modbus
1608 // оно вспомогательное и игнорируется при
1609 // преобразовании в ModbusMessage.
1610 size_t count = { 0 };
1611 };
1612 // -----------------------------------------------------------------------
1613
1615 public ModbusHeader
1616 {
1618 {
1619 ModbusByte reftype;
1620 ModbusData numfile;
1621 ModbusData numrec;
1622 ModbusData reglen;
1623 } __attribute__((packed));
1624
1625 ModbusByte bcnt = { 0 };
1628 SubRequest data[MAXLENPACKET / sizeof(SubRequest) - sizeof(ModbusByte)];
1629 ModbusCRC crc = { 0 };
1631 // -----------
1633 ReadFileRecordMessage& operator=( const ModbusMessage& m );
1634 void init( const ModbusMessage& m );
1635 static ModbusCRC getCrc( const ModbusMessage& m );
1636 static ModbusCRC calcCRC( const ModbusMessage& m );
1637
1639 size_t szData() const;
1640
1644 static inline size_t szHead()
1645 {
1646 return sizeof(ModbusByte); // bcnt
1647 }
1648
1650 static size_t getDataLen( const ModbusMessage& m );
1651
1653 bool checkFormat() const;
1654
1655 // это поле служебное и не используется в реальном обмене
1656 size_t count = { 0 };
1657 };
1658
1659 std::ostream& operator<<(std::ostream& os, ReadFileRecordMessage& m );
1660 std::ostream& operator<<(std::ostream& os, ReadFileRecordMessage* m );
1661 // -----------------------------------------------------------------------
1662
1664 public ModbusHeader
1665 {
1666 ModbusData numfile = { 0 };
1667 ModbusData numpacket = { 0 };
1668 ModbusCRC crc = { 0 };
1670 // ------- to slave -------
1671 FileTransferMessage( ModbusAddr addr, ModbusData numfile, ModbusData numpacket );
1672 static void make_to( ModbusAddr addr, ModbusByte numfile, ModbusByte numpacket, ModbusMessage& m );
1674 void transport_msg_to( ModbusMessage& m ) const;
1675
1676
1677 // ------- from master -------
1679 FileTransferMessage& operator=( const ModbusMessage& m );
1680 void init( const ModbusMessage& m );
1681 static ModbusCRC getCrc( const ModbusMessage& m );
1682 static ModbusCRC calcCRC( const ModbusMessage& m );
1683
1685 static inline size_t szData()
1686 {
1687 return sizeof(ModbusData) * 2 + szCRC;
1688 }
1689
1690 } __attribute__((packed));
1691
1692 std::ostream& operator<<(std::ostream& os, FileTransferMessage& m );
1693 std::ostream& operator<<(std::ostream& os, FileTransferMessage* m );
1694 // -----------------------------------------------------------------------
1695
1697 public ModbusHeader
1698 {
1699 // 255 - max of bcnt...(1 byte)
1700 // static const int MaxDataLen = 255 - szCRC - szModbusHeader - sizeof(ModbusData)*3 - sizeof(ModbusByte)*2;
1701 static const size_t MaxDataLen = MAXLENPACKET - sizeof(ModbusData) * 3 - sizeof(ModbusByte) * 2;
1702
1703 ModbusByte bcnt;
1704 ModbusData numfile;
1705 ModbusData numpacks;
1706 ModbusData packet;
1707 ModbusByte dlen;
1708 ModbusByte data[MaxDataLen];
1709
1710
1711 // ------- from slave -------
1713 FileTransferRetMessage& operator=( const ModbusMessage& m );
1714 void init( const ModbusMessage& m );
1715 static ModbusCRC getCrc( const ModbusMessage& m );
1716 static ModbusCRC calcCRC( const ModbusMessage& m );
1717
1718 ModbusCRC crc = { 0 };
1719 static size_t szHead()
1720 {
1721 return sizeof(ModbusByte);
1722 }
1723 static size_t getDataLen( const ModbusMessage& m );
1724
1725 // ------- to master -------
1726 FileTransferRetMessage( ModbusAddr _from );
1727
1731 bool set( ModbusData numfile, ModbusData file_num_packets, ModbusData packet, ModbusByte* b, ModbusByte len );
1732
1734 void clear();
1735
1737 size_t szData() const;
1738
1741 void transport_msg_to( ModbusMessage& m ) const;
1742 };
1743
1744 std::ostream& operator<<(std::ostream& os, FileTransferRetMessage& m );
1745 std::ostream& operator<<(std::ostream& os, FileTransferRetMessage* m );
1746 // -----------------------------------------------------------------------
1747 } // end of ModbusRTU namespace
1748 // -------------------------------------------------------------------------
1749} // end of namespace uniset
1750// ---------------------------------------------------------------------------
1751#endif // ModbusTypes_H_
1752// ---------------------------------------------------------------------------
Definition AccessConfig.h:30
Definition ModbusTypes.h:353
bool getData(uint8_t dnum, DataBits &d) const
Definition ModbusTypes.cc:683
bool setByBitNum(uint16_t num, bool state)
Definition ModbusTypes.cc:656
ModbusByte data[MAXPDULEN]
Definition ModbusTypes.h:355
bool isFull() const
Definition ModbusTypes.h:411
bool addData(DataBits d)
Definition ModbusTypes.cc:674
bool getByBitNum(uint16_t num, bool &state) const
Definition ModbusTypes.cc:694
void clear()
Definition ModbusTypes.cc:713
ModbusByte bcnt
Definition ModbusTypes.h:354
bool getBit(uint8_t dnum, uint8_t bnum, bool &state) const
Definition ModbusTypes.cc:701
bool setBit(uint8_t dnum, uint8_t bnum, bool state)
Definition ModbusTypes.cc:643
Definition ModbusTypes.h:323
Definition ModbusTypes.h:297
Definition ModbusTypes.h:159
Definition ModbusTypes.h:1176
size_t szData() const
Definition ModbusTypes.cc:2825
bool isFull() const
Definition ModbusTypes.h:1212
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:2777
static size_t szHead()
Definition ModbusTypes.h:1190
bool addData(ModbusData d)
Definition ModbusTypes.cc:2762
ModbusData data[MAXLENPACKET/sizeof(ModbusData)]
Definition ModbusTypes.h:1178
static size_t getDataLen(const ModbusMessage &m)
Definition ModbusTypes.cc:2734
void clear()
Definition ModbusTypes.cc:2771
size_t count
Definition ModbusTypes.h:1230
Definition ModbusTypes.h:1238
Definition ModbusTypes.h:265
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:354
static size_t szData()
Definition ModbusTypes.h:287
Definition ModbusTypes.h:1665
static size_t szData()
Definition ModbusTypes.h:1685
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:4004
ModbusCRC crc
Definition ModbusTypes.h:1668
ModbusData numpacket
Definition ModbusTypes.h:1667
ModbusData numfile
Definition ModbusTypes.h:1666
Definition ModbusTypes.h:1698
void clear()
Definition ModbusTypes.cc:4164
ModbusByte bcnt
Definition ModbusTypes.h:1703
ModbusData packet
Definition ModbusTypes.h:1706
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:4184
ModbusData numfile
Definition ModbusTypes.h:1704
ModbusByte dlen
Definition ModbusTypes.h:1707
ModbusData numpacks
Definition ModbusTypes.h:1705
size_t szData() const
Definition ModbusTypes.cc:4178
Definition ModbusTypes.h:764
static size_t szHead()
Definition ModbusTypes.h:822
ModbusData quant
Definition ModbusTypes.h:766
ModbusData start
Definition ModbusTypes.h:765
ModbusByte bcnt
Definition ModbusTypes.h:767
bool getData(uint8_t dnum, DataBits &d) const
Definition ModbusTypes.cc:1615
size_t szData() const
Definition ModbusTypes.cc:1743
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:1649
static size_t getDataLen(const ModbusMessage &m)
Definition ModbusTypes.cc:1748
bool addData(DataBits d)
Definition ModbusTypes.cc:1577
ModbusCRC crc
Definition ModbusTypes.h:770
ModbusByte data[MAXLENPACKET - sizeof(ModbusData) *2 - sizeof(ModbusByte)]
Definition ModbusTypes.h:769
Definition ModbusTypes.h:842
ModbusData quant
Definition ModbusTypes.h:844
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:1840
ModbusData start
Definition ModbusTypes.h:843
static size_t szData()
Definition ModbusTypes.h:873
Definition ModbusTypes.h:984
static size_t getDataLen(const ModbusMessage &m)
Definition ModbusTypes.cc:2277
static size_t szHead()
Definition ModbusTypes.h:1015
ModbusData data
Definition ModbusTypes.h:986
ModbusData start
Definition ModbusTypes.h:985
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:2201
bool cmd() const
Definition ModbusTypes.h:990
static size_t szData()
Definition ModbusTypes.cc:2272
ModbusCRC crc
Definition ModbusTypes.h:987
ModbusData data
Definition ModbusTypes.h:1039
ModbusData start
Definition ModbusTypes.h:1038
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:2352
bool cmd() const
Definition ModbusTypes.h:1043
static size_t szData()
Definition ModbusTypes.h:1072
Definition ModbusTypes.h:1380
static size_t szData()
Definition ModbusTypes.h:1392
ModbusData cmd
Definition ModbusTypes.h:1381
ModbusData num
Definition ModbusTypes.h:1382
Definition ModbusTypes.h:1405
size_t szData() const
Definition ModbusTypes.cc:3400
bool isFull() const
Definition ModbusTypes.h:1429
ModbusData data[MAXLENPACKET/sizeof(ModbusData)]
Definition ModbusTypes.h:1412
bool setData(ModbusByte *b, int len)
Definition ModbusTypes.cc:3308
void clear()
Definition ModbusTypes.cc:3331
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:3353
size_t count
Definition ModbusTypes.h:1449
ModbusByte bcnt
Definition ModbusTypes.h:1406
Definition ModbusTypes.h:1460
Definition ModbusTypes.h:193
ModbusRTU::ModbusData len
Definition ModbusTypes.h:196
ModbusRTU::ModbusData pID
Definition ModbusTypes.h:195
ModbusRTU::ModbusData tID
Definition ModbusTypes.h:194
Definition ModbusTypes.h:1250
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:2912
static size_t szData()
Definition ModbusTypes.h:1281
ModbusCRC crc
Definition ModbusTypes.h:1255
ModbusByte devID
Definition ModbusTypes.h:1252
static size_t szHead()
Definition ModbusTypes.h:1275
ModbusByte objID
Definition ModbusTypes.h:1253
ModbusByte type
Definition ModbusTypes.h:1251
Definition ModbusTypes.h:1310
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:3158
ModbusByte objNum
Definition ModbusTypes.h:1316
ModbusByte objID
Definition ModbusTypes.h:1315
void clear()
Definition ModbusTypes.cc:3137
bool addData(ModbusByte id, const std::string &value)
Definition ModbusTypes.cc:3124
ModbusByte mf
Definition ModbusTypes.h:1314
ModbusByte conformity
Definition ModbusTypes.h:1313
static size_t szHead()
Definition ModbusTypes.h:1333
size_t szData() const
Definition ModbusTypes.cc:3199
bool isFull() const
Definition ModbusTypes.h:1355
ModbusByte type
Definition ModbusTypes.h:1311
ModbusByte devID
Definition ModbusTypes.h:1312
Definition ModbusTypes.h:180
ModbusAddr addr
Definition ModbusTypes.h:181
ModbusByte func
Definition ModbusTypes.h:182
Definition ModbusTypes.h:211
ModbusByte data[MAXLENPACKET+szCRC]
Definition ModbusTypes.h:253
size_t dlen
Definition ModbusTypes.h:256
Definition ModbusTypes.h:1296
Definition ModbusTypes.h:422
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:408
static size_t szData()
Definition ModbusTypes.h:443
Definition ModbusTypes.h:458
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:776
size_t szData() const
Definition ModbusTypes.cc:770
static int szHead()
Definition ModbusTypes.h:469
static size_t getDataLen(const ModbusMessage &m)
Definition ModbusTypes.cc:756
ModbusByte reftype
Definition ModbusTypes.h:1619
ModbusData numrec
Definition ModbusTypes.h:1621
ModbusData reglen
Definition ModbusTypes.h:1622
ModbusData numfile
Definition ModbusTypes.h:1620
Definition ModbusTypes.h:1616
static size_t getDataLen(const ModbusMessage &m)
Definition ModbusTypes.cc:3978
size_t count
Definition ModbusTypes.h:1656
static size_t szHead()
Definition ModbusTypes.h:1644
ModbusByte bcnt
Definition ModbusTypes.h:1625
size_t szData() const
Definition ModbusTypes.cc:3972
bool checkFormat() const
Definition ModbusTypes.cc:3919
ModbusCRC crc
Definition ModbusTypes.h:1629
SubRequest data[MAXLENPACKET/sizeof(SubRequest) - sizeof(ModbusByte)]
Definition ModbusTypes.h:1628
Definition ModbusTypes.h:665
static size_t szData()
Definition ModbusTypes.h:685
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:1312
Definition ModbusTypes.h:699
bool addData(ModbusData d)
Definition ModbusTypes.cc:1473
static size_t getDataLen(const ModbusMessage &m)
Definition ModbusTypes.cc:1456
bool isFull() const
Definition ModbusTypes.h:736
size_t szData() const
Definition ModbusTypes.cc:1550
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:1507
static size_t szHead()
Definition ModbusTypes.h:713
ModbusData data[MAXLENPACKET/sizeof(ModbusData)]
Definition ModbusTypes.h:701
size_t count
Definition ModbusTypes.h:755
void clear()
Definition ModbusTypes.cc:1483
ModbusByte bcnt
Definition ModbusTypes.h:700
Definition ModbusTypes.h:495
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:843
static size_t szData()
Definition ModbusTypes.h:517
static size_t getDataLen(const ModbusMessage &m)
Definition ModbusTypes.cc:968
size_t szData() const
Definition ModbusTypes.cc:982
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:1005
static size_t szHead()
Definition ModbusTypes.h:542
Definition ModbusTypes.h:569
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:1057
static size_t szData()
Definition ModbusTypes.h:589
Definition ModbusTypes.h:602
size_t szData() const
Definition ModbusTypes.cc:1287
bool isFull() const
Definition ModbusTypes.h:639
static size_t szHead()
Definition ModbusTypes.h:616
size_t count
Definition ModbusTypes.h:656
static size_t getDataLen(const ModbusMessage &m)
Definition ModbusTypes.cc:1192
ModbusByte bcnt
Definition ModbusTypes.h:603
void clear()
Definition ModbusTypes.cc:1219
bool addData(ModbusData d)
Definition ModbusTypes.cc:1209
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:1243
ModbusData data[MAXLENPACKET/sizeof(ModbusData)]
Definition ModbusTypes.h:604
Definition ModbusTypes.h:1538
size_t szData() const
Definition ModbusTypes.cc:3797
ModbusByte data[MAXLENPACKET - sizeof(ModbusByte)]
Definition ModbusTypes.h:1542
static size_t szHead()
Definition ModbusTypes.h:1558
ModbusCRC crc
Definition ModbusTypes.h:1543
ModbusByte bcnt
Definition ModbusTypes.h:1539
static size_t getDataLen(const ModbusMessage &m)
Definition ModbusTypes.cc:3802
Definition ModbusTypes.h:1573
bool isFull() const
Definition ModbusTypes.h:1592
ModbusByte data[MAXLENPACKET - sizeof(ModbusByte)]
Definition ModbusTypes.h:1576
void clear()
Definition ModbusTypes.cc:3847
bool setData(ModbusByte *b, int len)
Definition ModbusTypes.cc:3829
ModbusByte bcnt
Definition ModbusTypes.h:1574
size_t szData() const
Definition ModbusTypes.cc:3854
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:3860
size_t count
Definition ModbusTypes.h:1610
Definition ModbusTypes.h:1474
static size_t szData()
Definition ModbusTypes.h:1501
ModbusByte year
Definition ModbusTypes.h:1480
ModbusByte mon
Definition ModbusTypes.h:1479
ModbusByte century
Definition ModbusTypes.h:1481
ModbusByte hour
Definition ModbusTypes.h:1475
ModbusByte sec
Definition ModbusTypes.h:1477
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:3632
ModbusByte min
Definition ModbusTypes.h:1476
ModbusByte day
Definition ModbusTypes.h:1478
Definition ModbusTypes.h:1515
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:3727
Definition ModbusTypes.h:886
static size_t szHead()
Definition ModbusTypes.h:920
ModbusByte bcnt
Definition ModbusTypes.h:889
ModbusData start
Definition ModbusTypes.h:887
ModbusCRC crc
Definition ModbusTypes.h:892
size_t szData() const
Definition ModbusTypes.cc:2036
ModbusData quant
Definition ModbusTypes.h:888
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:1926
ModbusData data[MAXLENPACKET/sizeof(ModbusData) - sizeof(ModbusData) *2 - sizeof(ModbusByte)]
Definition ModbusTypes.h:891
static size_t getDataLen(const ModbusMessage &m)
Definition ModbusTypes.cc:2041
Definition ModbusTypes.h:941
static size_t szData()
Definition ModbusTypes.h:972
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:2135
ModbusData start
Definition ModbusTypes.h:942
ModbusData quant
Definition ModbusTypes.h:943
Definition ModbusTypes.h:1085
ModbusCRC crc
Definition ModbusTypes.h:1088
static size_t szData()
Definition ModbusTypes.cc:2493
ModbusData data
Definition ModbusTypes.h:1087
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:2422
static size_t szHead()
Definition ModbusTypes.h:1111
static size_t getDataLen(const ModbusMessage &m)
Definition ModbusTypes.cc:2498
ModbusData start
Definition ModbusTypes.h:1086
static size_t szData()
Definition ModbusTypes.h:1164
ModbusData data
Definition ModbusTypes.h:1135
ModbusData start
Definition ModbusTypes.h:1134
ModbusMessage transport_msg() const
Definition ModbusTypes.cc:2579