Only single server is supported from nanomodbus. Change multi-server example to single server

This commit is contained in:
Donghoon Park 2024-10-05 10:51:34 +09:00 committed by Valerio De Benedetto
parent 1af4409ea9
commit dc95d04fc9
4 changed files with 22 additions and 24 deletions

View File

@ -21,7 +21,7 @@
/* Private includes ----------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */ /* USER CODE BEGIN Includes */
#include "nanomodbus_stm32.h" #include "nanomodbus_port.h"
/* USER CODE END Includes */ /* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/
@ -46,12 +46,11 @@ DMA_HandleTypeDef hdma_usart1_tx;
/* USER CODE BEGIN PV */ /* USER CODE BEGIN PV */
nmbs_t nmbs; nmbs_t nmbs;
nmbs_server_t nmbs_servers[] = { nmbs_server_t nmbs_server =
{ {
.id = 0x01, .id = 0x01,
.coils = {0,}, .coils = {0,},
.regs = {0,}, .regs = {0,},
},
}; };
/* USER CODE END PV */ /* USER CODE END PV */
@ -102,7 +101,7 @@ int main(void)
MX_USART1_UART_Init(); MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
nanomodbus_server_init(&nmbs, nmbs_servers, sizeof(nmbs_servers)/sizeof(*nmbs_servers)); nmbs_server_init(&nmbs, &nmbs_server);
/* USER CODE END 2 */ /* USER CODE END 2 */

View File

@ -21,8 +21,7 @@ static ringBuf rb;
static void ringbuf_init(ringBuf* rb, void (*overflow_callback)(struct tRingBuf* rq)); static void ringbuf_init(ringBuf* rb, void (*overflow_callback)(struct tRingBuf* rq));
static void ringbuf_overflow_error(ringBuf* rb); static void ringbuf_overflow_error(ringBuf* rb);
static nmbs_server_t* servers; static nmbs_server_t* server;
static uint8_t server_num;
static nmbs_error server_read_coils(uint16_t address, uint16_t quantity, nmbs_bitfield coils_out, uint8_t unit_id, void* arg); static nmbs_error server_read_coils(uint16_t address, uint16_t quantity, nmbs_bitfield coils_out, uint8_t unit_id, void* arg);
static nmbs_error server_read_holding_registers(uint16_t address, uint16_t quantity, uint16_t* registers_out, uint8_t unit_id, void* arg); static nmbs_error server_read_holding_registers(uint16_t address, uint16_t quantity, uint16_t* registers_out, uint8_t unit_id, void* arg);
@ -31,7 +30,7 @@ static nmbs_error server_write_multiple_coils(uint16_t address, uint16_t quantit
static nmbs_error server_write_single_register(uint16_t address, uint16_t value, uint8_t unit_id, void* arg); static nmbs_error server_write_single_register(uint16_t address, uint16_t value, uint8_t unit_id, void* arg);
static nmbs_error server_write_multiple_registers(uint16_t address, uint16_t quantity, const uint16_t* registers, uint8_t unit_id, void* arg); static nmbs_error server_write_multiple_registers(uint16_t address, uint16_t quantity, const uint16_t* registers, uint8_t unit_id, void* arg);
nmbs_error nanomodbus_server_init(nmbs_t* nmbs, nmbs_server_t* _servers, uint8_t _server_num) nmbs_error nmbs_server_init(nmbs_t* nmbs, nmbs_server_t* _server)
{ {
ringbuf_init(&rb, ringbuf_overflow_error); ringbuf_init(&rb, ringbuf_overflow_error);
@ -43,6 +42,8 @@ nmbs_error nanomodbus_server_init(nmbs_t* nmbs, nmbs_server_t* _servers, uint8_t
conf.read = read_serial; conf.read = read_serial;
conf.write = write_serial; conf.write = write_serial;
server = _server;
nmbs_callbacks_create(&cb); nmbs_callbacks_create(&cb);
cb.read_coils = server_read_coils; cb.read_coils = server_read_coils;
cb.read_holding_registers = server_read_holding_registers; cb.read_holding_registers = server_read_holding_registers;
@ -51,17 +52,12 @@ nmbs_error nanomodbus_server_init(nmbs_t* nmbs, nmbs_server_t* _servers, uint8_t
cb.write_single_register = server_write_single_register; cb.write_single_register = server_write_single_register;
cb.write_multiple_registers = server_write_multiple_registers; cb.write_multiple_registers = server_write_multiple_registers;
servers = _servers;
server_num = _server_num;
for(size_t i = 0; i < server_num; i++) nmbs_error status = nmbs_server_create(nmbs, server->id, &conf, &cb);
{
nmbs_error status = nmbs_server_create(nmbs, servers[i].id, &conf, &cb);
if(status != NMBS_ERROR_NONE) if(status != NMBS_ERROR_NONE)
{ {
return status; return status;
} }
}
nmbs_set_byte_timeout(nmbs, 100); nmbs_set_byte_timeout(nmbs, 100);
nmbs_set_read_timeout(nmbs, 1000); nmbs_set_read_timeout(nmbs, 1000);
@ -72,14 +68,15 @@ nmbs_error nanomodbus_server_init(nmbs_t* nmbs, nmbs_server_t* _servers, uint8_t
static nmbs_server_t* get_server(uint8_t id) static nmbs_server_t* get_server(uint8_t id)
{ {
for(size_t i = 0; i < server_num; i++) if(id == server->id)
{ {
if(servers[i].id == id) return server;
}
else
{ {
return &servers[i]; return NULL;
} }
}
return (nmbs_server_t*)(NULL);
} }
static nmbs_error server_read_coils(uint16_t address, uint16_t quantity, nmbs_bitfield coils_out, uint8_t unit_id, void* arg) static nmbs_error server_read_coils(uint16_t address, uint16_t quantity, nmbs_bitfield coils_out, uint8_t unit_id, void* arg)

View File

@ -25,7 +25,7 @@ typedef struct tNmbsServer{
uint16_t regs[REG_BUF_SIZE]; uint16_t regs[REG_BUF_SIZE];
}nmbs_server_t; }nmbs_server_t;
nmbs_error nanomodbus_server_init(nmbs_t* nmbs, nmbs_server_t* servers, uint8_t server_num); nmbs_error nmbs_server_init(nmbs_t* nmbs, nmbs_server_t* server);
extern UART_HandleTypeDef NANOMB_UART; extern UART_HandleTypeDef NANOMB_UART;

View File

@ -7,6 +7,8 @@
- Blackpill board - Blackpill board
- STM32F401CCUx - STM32F401CCUx
- USART1 with DMA - USART1 with DMA
- PA9 : TX1
- PA10 : RX1
## Toolchain and environment ## Toolchain and environment