source: trunk/firmware/Modbus/modbus.h

Last change on this file was 6, checked in by f.jahn, 3 months ago
File size: 6.8 KB
Line 
1/*
2 * modbus.h
3 *
4 * Created: 03.09.2012 08:39:40
5 *  Author: Falko
6 */ 
7
8
9#ifndef MODBUS_H_
10#define MODBUS_H_
11 
12  #if MODBUS_SUPPORT == TRUE
13
14    #include "stdint.h"
15    #include "stdbool.h"
16    #include "main.h"
17        #include "sysdata.h"
18
19    //! brief Anzahl der Startbits, nach Modbus Spezifikation immer 1, stop bits werden aus den Einstellungen geladen
20    #define NUMBER_OF_STARTBITS                         1U
21 
22    //! brief Anzahl der Datenbits, nach Modbus Spezifikation immer 8
23    #define NUMBER_OF_DATABITS                          8U
24 
25    //! brief Max Timeput zwischen zwei gesendeten char
26    #define TIMEOUT_BETWEEN_CHARACTERS          1.5
27 
28    //! brief Timeput bei dem fertig gesendetes Frame erkannt wird
29    #define TIMEOUT_FRAME_COMPLETE                      3.5
30 
31    //! define der Größe der Ein- und Ausgangsbuffer
32    #define RXBUFFERSIZE                                256
33    #define TXBUFFERSIZE                                256
34 
35    #define FORWARD_DATA                                TRUE
36    #define SEND_TO_LOKALBUS                            1
37    #define RESPOND_TO_QUERY                            2       
38
39    #define MAX_ADRESS                                  ((sizeof(sys_data_struct_t) / 2)-1)
40   
41    #define MODBUS_UART_PARITY_EVEN                     0
42    #define MODBUS_UART_PARITY_ODD                      1
43    #define MODBUS_UART_PARITY_NONE                     2
44
45//    typedef union bword
46//    {
47//      uint16_t    w;
48//       int16_t    sw;
49//       uint8_t    lb;
50//        int8_t    slb;
51//       uint8_t    b[2];
52//        int8_t    sb[2];
53//    }
54//    bword_t;
55
56    typedef enum mb_error_codes_enum
57    {
58      MB_ERROR_NOTHING              = 0,
59      MB_ERROR_TIMEOUT              = 1,
60      MB_ERROR_CRC                  = 2,
61      MB_ERROR_SLAVE_ADRESS         = 3,
62      MB_ERROR_FUNCTION_CODE        = 4,
63      MB_ERROR_BYTE_COUNT           = 5,
64      MB_ERROR_START_ADRESS         = 6,
65      MB_ERROR_UART_PE              = 7,                                                                                //Parity
66      MB_ERROR_UART_NE              = 8,                                                                                //Noise
67      MB_ERROR_UART_FE              = 9,                                                                                //Frame
68      MB_ERROR_UART_ORE             = 10,                                                                               //Overrun
69    } 
70    mb_error_codes_t;
71
72
73
74    typedef enum
75    {
76      MB_QUERY_NOTHING,
77      MB_QUERY_READ_IDENT,
78      MB_QUERY_READ_DATA,
79      MB_QUERY_READ_LIPRO_DATA,
80      MB_QUERY_WRITE_LIPRO_BALANCER_VOLTAGE, 
81      MB_QUERY_WRITE_BUTTONS,
82      MB_QUERY_GSM_GATEWAY,
83      MB_QUERY_REMOTEBUS_GATEWAY,
84      MB_QUERY_WRITE_TO_GC,
85      MB_QUERY_SEND_DEVICE_ADDRESS,
86      MB_QUERY_SEND_SAVE_COMMAND,
87      MB_QUERY_GATEWAY,
88      MB_QUERY_SEND_DATA
89    } 
90    mb_status_t;
91
92
93    typedef struct
94    {
95      //TIM_HandleTypeDef             * timer;                                  //  Timer config
96      //TIM_OC_InitTypeDef            * timerOcConfig;                          //  Zeiger auf TimerInit Struktur
97      UART_HandleTypeDef            * uart;                                                                             //  Zeiger auf das Uart Modul
98      GPIO_TypeDef *                driverEnableGPIO;                                                   //  Zuständiger einschalt Port
99      uint16_t                      driverEnableGPIOPin;                                                //  Zuständiger einschalt Pin
100      uint32_t                      mb_t15_total_timer_ticks;                                   //  max timeout zwischen einzelnen char
101      uint32_t                      mb_t35_total_timer_ticks;                                   //  timeout frame complete
102      volatile bool                 mb_rx_frame_complete;                                               //  frame complete ja/nein
103      uint32_t                      response_timeout_counter;                                   //  antwort Timeout
104                                                                                                                                                                //  QUERY (Anfrage):
105      uint8_t                       last_query_slave_adress;                                    //  zugehörige Slave Andresse
106      uint8_t                       last_query_function_code;                                   //  function Code
107      bword_t                       last_query_start_adress;                                    //  start Adresse
108      bword_t                       last_query_number_of_register;                              //  Anzahl der Register
109      bool                          last_query_timeout;                                                 //  Timeout
110      bword_t                       last_query_tcp_id;                                                  //  stack ID
111      mb_status_t                   current_query;                                                              //  Zeiger auf Statusstruktur
112      uint8_t                       rx_buffer[RXBUFFERSIZE];                                    //  Bufferarray Empfangen
113      uint8_t                       tx_buffer[TXBUFFERSIZE];                                    //  Bufferarray Senden
114      uint32_t                      rx_head;                                                                    // 
115      uint32_t                      tx_head;                                                                    // 
116      volatile bool                 setTxLed;                                                                   //  status Led
117      volatile bool                 setRxLed;                                                                   //  status Led
118    } 
119    modbus_t;
120
121
122
123    //Public Functions Modbus
124 
125                          // Timer Interrupt erkennt Fehler bei Framekomplettierung
126    void                  mbTimerIsr                                  (modbus_t * mb_data);
127                          // Initialiserung des Moduls muss mit den passenden Parametern gefüllt werden
128   void mbInit(modbus_t * mb_data, uint32_t baudrate, uint32_t parityMode, uint16_t stopBits, UART_HandleTypeDef * usart);
129                          // überprüft ob ein Frame komplett ist
130    bool                  mbGetFrameComplete                          (modbus_t * mb_data);
131                       
132    void                  mbClearRxFrame                              (modbus_t * mb_data);
133                          // handelt den Interrupt
134    void                  mbUartIsr                                   (modbus_t* mb_data);
135
136
137    //Public Fuctions Modbus SLAVE
138 
139                          // Umgang mit ankommenden Anfragen und Verarbeitung dieser
140    void                  mbSlaveProcessRtuQuery                      (modbus_t * mb_data);
141                          // Bedeutung der Anfrage und wie mit dieser umgegangen werden soll
142    uint32_t              mbSlaveCheckModbusRtuQuery                  (modbus_t * mb_data);
143    //                    Verarbeite eine Anfrage
144    uint32_t              mbSlaveProcessPdu( uint8_t* response_string, uint8_t * msg, uint32_t tx_position, uint8_t deviceID);
145
146    //Public Fuctions Modbus MASTER
147    void                  mbMasterStartRtuReadHoldingRegister         (uint8_t slave_adress,  uint16_t start_adress, uint16_t number_of_registers, modbus_t * mb_data);
148    bool                  mbMasterGetTimeout                          (modbus_t * mb_data);     
149    void                  mbMasterCheckResponseTimeout                (modbus_t * mb_data);
150    mb_error_codes_t      mbMasterCheckReadMultipleRegisterResponse   (modbus_t * mb_data) ;
151    mb_error_codes_t      check_write_multiple_register_response      (modbus_t * mb_data) ;   
152    void                  mb_start_rtu_write_multiple_register        (uint8_t slave_adress, uint16_t adress, uint16_t * values, uint8_t number_of_registers, modbus_t  * mb_data);
153    void MODBUS_UART_IRQHandler(UART_HandleTypeDef *huart);
154  #endif
155#endif /* MODBUS_H_ */
Note: See TracBrowser for help on using the repository browser.