source: trunk/firmware/CubeMX/Inc/modbus.h@ 5

Last change on this file since 5 was 1, checked in by f.jahn, 3 years ago
File size: 7.6 KB
RevLine 
[1]1/*
2 * modbus.h
3 *
4 * Created: 03.09.2012 08:39:40
5 * Author: Falko Jahn
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 "sysdata.h"
17 #include "main.h"
18
19 //! brief Anzahl der Startbits, nach Modbus Spezifikation immer 1, stop bits werden aus den Einstellungen geladen
20 #define NUMBER_OF_STARTBITS 1
21
22 //! brief Anzahl der Datenbits, nach Modbus Spezifikation immer 8
23 #define NUMBER_OF_DATABITS 8
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_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 typedef enum
73 {
74 ACCESS_MODE_READ_ONLY = 0, // Muss als erstes damit nicht initialisierte Register automatisch 0 = READ ONLY sind
75 ACCESS_MODE_READ_WRITE,
76 ACCESS_MODE_WRITE_PROTECTABLE,
77 } accessMode_t;
78
79 typedef enum
80 {
81 MB_QUERY_NOTHING,
82 MB_QUERY_READ_IDENT,
83 MB_QUERY_READ_DATA,
84 MB_QUERY_READ_LIPRO_DATA,
85 MB_QUERY_WRITE_LIPRO_BALANCER_VOLTAGE,
86 MB_QUERY_WRITE_BUTTONS,
87 MB_QUERY_GSM_GATEWAY,
88 MB_QUERY_REMOTEBUS_GATEWAY,
89 MB_QUERY_WRITE_TO_GC,
90 MB_QUERY_SEND_DEVICE_ADDRESS,
91 MB_QUERY_SEND_SAVE_COMMAND,
92 MB_QUERY_GATEWAY,
93 MB_QUERY_SEND_DATA
94 }
95 mb_status_t;
96
97
98 typedef struct
99 {
100 //TIM_HandleTypeDef * timer; // Timer config
101 //TIM_OC_InitTypeDef * timerOcConfig; // Zeiger auf TimerInit Struktur
102 UART_HandleTypeDef *uart; // Zeiger auf das Uart Modul
103 GPIO_TypeDef * driverEnableGPIO; // Zuständiger einschalt Port
104 uint16_t driverEnableGPIOPin; // Zuständiger einschalt Pin
105 uint32_t mb_t15_total_timer_ticks; // max timeout zwischen einzelnen char
106 uint32_t mb_t35_total_timer_ticks; // timeout frame complete
107 volatile bool mb_rx_frame_complete; // frame complete ja/nein
108 uint32_t response_timeout_counter; // antwort Timeout
109 // QUERY (Anfrage):
110 uint8_t last_query_slave_adress; // zugehörige Slave Andresse
111 uint8_t last_query_function_code; // function Code
112 bword_t last_query_start_adress; // start Adresse
113 bword_t last_query_number_of_register; // Anzahl der Register
114 bool last_query_timeout; // Timeout
115 bword_t last_query_tcp_id; // stack ID
116 mb_status_t current_query; // Zeiger auf Statusstruktur
117 uint8_t rx_buffer[RXBUFFERSIZE]; // Bufferarray Empfangen
118 uint8_t tx_buffer[TXBUFFERSIZE]; // Bufferarray Senden
119 uint32_t rx_head; //
120 uint32_t tx_head; //
121 volatile bool setTxLed; // status Led
122 volatile bool setRxLed; // status Led
123 accessMode_t* accessModeTable;
124 uint16_t* currentAccessState;
125 }
126 modbus_t;
127
128
129
130 //Public Functions Modbus
131
132 // Timer Interrupt erkennt Fehler bei Framekomplettierung
133 void mbTimerIsr (modbus_t * mb_data);
134 // Initialiserung des Moduls muss mit den passenden Parametern gefüllt werden
135 void mbInit(modbus_t * mb_data, uint32_t baudrate, uint32_t parityMode, UART_HandleTypeDef * usart, accessMode_t * accessModeTable, uint16_t * currentAccessState);
136 // überprüft ob ein Frame komplett ist
137 bool mbGetFrameComplete (modbus_t * mb_data);
138
139 void mbClearRxFrame (modbus_t * mb_data);
140 // handelt den Interrupt
141 void mbUartIsr (modbus_t* mb_data);
142
143
144 //Public Fuctions Modbus SLAVE
145
146 // Umgang mit ankommenden Anfragen und Verarbeitung dieser
147 void mbSlaveProcessRtuQuery (modbus_t * mb_data);
148 // Bedeutung der Anfrage und wie mit dieser umgegangen werden soll
149 uint32_t mbSlaveCheckModbusRtuQuery (modbus_t * mb_data);
150 // Verarbeite eine Anfrage
151 uint32_t mbSlaveProcessPdu( uint8_t* response_string, uint8_t * msg, uint32_t tx_position, uint8_t deviceID, modbus_t * mb_data);
152
153 //Public Fuctions Modbus MASTER
154 void mbMasterStartRtuReadHoldingRegister (uint8_t slave_adress, uint16_t start_adress, uint16_t number_of_registers, modbus_t * mb_data);
155 bool mbMasterGetTimeout (modbus_t * mb_data);
156 void mbMasterCheckResponseTimeout (modbus_t * mb_data);
157 mb_error_codes_t mbMasterCheckReadMultipleRegisterResponse (modbus_t * mb_data) ;
158 mb_error_codes_t check_write_multiple_register_response (modbus_t * mb_data) ;
159 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);
160 void MODBUS_UART_IRQHandler(UART_HandleTypeDef *huart);
161
162 #endif
163#endif /* MODBUS_H_ */
Note: See TracBrowser for help on using the repository browser.