motorcontroldemo_035/Vinclude/V_ModBus.h
2019-07-29 08:17:46 +03:00

127 lines
4.6 KiB
C

/*!
Copyright 2017 ÀÎ "ÍÈÈÝÒ" è ÎÎÎ "ÍÏÔ ÂÅÊÒÎÐ"
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
\file V_ModBus.h
\brief Äðàéâåð ModBus (ñì. TModBus)
\author Alecksey Anuchin
\version v 1.1 24/03/2017
\defgroup V_ModBus Äðàéâåð ModBus (ñì. TModBus)
@{
*/
#ifndef V_MODBUS_H
#define V_MODBUS_H
#ifdef __cplusplus
extern "C" {
#endif
#include "mbod.h"
#define MODBUS_MAX_RX_COUNT 10
/*! \class TModBus
\brief Äðàéâåð ModBus
Êëàññ \a TModBus, îñíîâàííûé íà ñòðóêòóðå SModBus, îáðàáàòûâàåò
âõîäÿùèå ïîñûëêè ïî RS-485 êàê ïîñûëêè ModBus (RTU). */
//! ñì. TModBus
//! Ñòðóêòóðà modbus äëÿ õðàíåíèÿ âíóòðåííèõ äàííûõ
typedef struct {volatile Uint16 In[MODBUS_MAX_RX_COUNT];//!<Ìàññèâ äëÿ ïðèíÿòèÿ äàííûõ
volatile Uint16 InCount;//!<Ñ÷åò÷èê äëÿ ìàññèâà ïðèíÿòûõ äàííûõ
volatile MB_Record /*const*/ *Addr;//!<Óêàçàòåëü íà ñëîâàðü
volatile Uint16 TimeOut;//!<Òåêóùèé òàéìàóò, êîòîðûé íàäî âûäåðæèâàòü
volatile Uint16 TimeOut1_5;//!<Ðàññ÷èòàííûé òàéìàóò 1,5 äëèíû ïåðåäàííîãî áàéòà
volatile Uint16 TimeOut2_5;//!<Ðàññ÷èòàííûé òàéìàóò 2,5 äëèíû ïåðåäàííîãî áàéòà
volatile Uint16 ToSend;//!<Äàííûå äëÿ îòïðàâêè
volatile Uint16 NumOfHRs;//!<Êîëè÷åñòâî Holding Registers
volatile Uint16 MiddleOfHRs;//!<Ñåðåäèíà Holding Registers
volatile Uint16 InitialStepOfHRs;//!<Øàã Holding Registers
volatile Uint16 NumOfIRs;//!<Êîëè÷åñòâî Input Registers
volatile Uint16 MiddleOfIRs;//!<Ñåðåäèíà Input Registers
volatile Uint16 InitialStepOfIRs;//!<Øàã Input Registers
volatile Uint16 NumOfCs;//!<Êîëè÷åñòâî Coils
volatile Uint16 MiddleOfCs;//!<Ñåðåäèíà Coils
volatile Uint16 InitialStepOfCs;//!<Øàã Coils
volatile Uint16 NumOfDIs;//!<Êîëè÷åñòâî Discrete Inputs
volatile Uint16 MiddleOfDIs;//!<Ñåðåäèíà Discrete Inputs
volatile Uint16 InitialStepOfDIs;//!<Øàã Discrete Inputs
volatile Uint16 RxCRC;//!<Ïðèíèìàåìàÿ êîíòðîëüíàÿ ñóììà
volatile Uint16 TxCRC;//!<Ïåðåäàâàåìàÿ êîíòðîëüíàÿ ñóììà
volatile Uint16 MagicNumber;//!<Ýì...
volatile int16 TxState;//!<Ñîñòîÿíèå ïåðåäà÷è
volatile Uint16 temp;//!<
volatile int16 RecievedCounter;//!<Ñ÷åò÷èê äëÿ îòñ÷èûâàíèÿ òàéìàóòà ïî ïðèåìó
UART_TypeDef *UART;//!Óêàçàòåëü íà èñïîëüçóåìûé ìîäóëü UART
} MODBUS_INT;
#define MODBUS_INT_DEFAULTS {{0},0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0xFFFF,0xFFFF, 0xA001,-1, 0,0, \
}
struct SModBus{Uint32 BaudRate;//!<Ñêîðîñòü ðàáîòû ïî RS
Uint16 ExecutionFreq;//!< ×àñòîòà òàêòèðîâàíèÿ ìîäóëÿ
Uint16 RSNodeID; //!< Íîìåð óçëà â ñåòè
Uint16 Enabled; //!< Ðàçðåøåíèå èçìåíåíèÿ ïàðàìåòðîâ ïðèâîäà ÷åðåç ModBus
Uint16 Refresh; //!< Ôëàã èçìåíåíèÿ ïàðàìåòðîâ ïî Modbus
int16 error;
int16 errorCode;
int16 AutoRestart;
int16 clear_error;
Uint16 received_data;
Uint16 GPIOsValue;
Uint16 isOnline;//!< Â ñåòè ìû èëè íåò (èäóò ëè ïàêåòû)
Uint32 OfflineCounter;//!< Ñ÷åò÷èê èíêðåìåíòèðóåòñÿ ñ ÷àñòîòîé âûçîâà ïðîöåäóðû ModBus_Execute è îáíóëÿåòñÿ, åñëè â ñåòè åñòü ïàêåòû
Uint32 OfflineCounterMax;//!< Òàéìàóò îòñóòñòâèÿ ïàêåòîâ â ñåòè (â åäèíèöàõ ñ÷¸òà OfflineCounter)
Uint16 ReceiveByteCounter;//!< Ñ÷åò÷èê ïðèíÿòûõ áàéò
Uint16 ReceivePacketCounter;//!< Ñ÷åò÷èê ïðèíÿòûõ ïîñûëîê
MODBUS_INT MBInternals;//!< Ñëóæåáíûå ïåðåìåííûå äëÿ ðàáîòû äðàéâåðà (íå äëÿ ïîëüçîâàòåëÿ)
void (*Init)(volatile struct SModBus*);
void (*Execute)(volatile struct SModBus*);
};
typedef volatile struct SModBus TModBus;
#define MODBUS_DEFAULTS {9600,10000, 0x01, 1, 0,\
0,0,0,0,0,0,0,0,0,0,0,\
MODBUS_INT_DEFAULTS,\
ModBus_Init, \
ModBus_Execute,\
}
//! \memberof TModBus
void ModBus_Init(TModBus *p);
//! \memberof TModBus
void ModBus_Execute(TModBus *p);
//! \memberof TModBus
int16 ModBus_FindVocAddr(TModBus *p,volatile MB_Record Table[], Uint16 TableSize, int16 Type, Uint16 Index, int16 NumOfIndexs, int16 Mid, int16 Step);
#ifdef __cplusplus
}
#endif
#endif
/*@}*/