Browse Source

update

master
zhaohe 2 years ago
parent
commit
5dd710e6e2
  1. 8
      components/modbus/modbus_client.cpp
  2. 4
      components/modbus/modbus_processer.hpp
  3. 63
      components/sub_modbus_module/sub_modbus_board_initer.cpp
  4. 26
      components/sub_modbus_module/sub_modbus_board_initer.hpp

8
components/modbus/modbus_client.cpp

@ -6,10 +6,10 @@
#include "sdk\os\delay.hpp"
using namespace iflytop;
static uint8_t modbus_rx_buf[256];
static uint8_t modbus_tx_buf[256];
static uint8_t modbus_rx_buf[255];
static uint8_t modbus_tx_buf[255];
static bool modbus_rx_is_ready = false;
static int modbus_rx_size = 256;
static int modbus_rx_size = 0;
static void modbux_tx(uint8_t* rx, uint16_t len) { ModulebusClient::Inst()->sendpacket(rx, len); }
static void modbux_process_rx(modbus_processer_context_t* context) { ModulebusClient::Inst()->process_rx_packet(context); }
@ -36,7 +36,7 @@ void ModulebusClient::init(ZIUartReceiver* receiver, ZIUartSender* sender, int d
receiver->startRx([this](uint8_t* data, size_t len) { //
if (modbus_rx_is_ready) return;
if (len > 256) return;
if (len > 255) return;
memcpy(modbus_rx_buf, data, len);
modbus_rx_size = len;
modbus_rx_is_ready = true;

4
components/modbus/modbus_processer.hpp

@ -12,10 +12,10 @@ typedef struct modbus_processer {
uint8_t modbus_device_id; // default 0x01;
uint8_t* modbus_processer_rx_buf;
int modbus_processer_rx_buf_size; //
uint8_t modbus_processer_rx_buf_size; //
uint8_t* modbus_processer_tx_buf;
int modbus_processer_tx_buf_size; //
uint8_t modbus_processer_tx_buf_size; //
/*************************************/
void (*tx)(uint8_t* rx, uint16_t len);

63
components/sub_modbus_module/sub_modbus_board_initer.cpp

@ -0,0 +1,63 @@
#include "sub_modbus_board_initer.hpp"
//
#include <stdio.h>
#include <string.h>
#include "project_configs.h"
using namespace iflytop;
#define TAG "main"
extern DMA_HandleTypeDef PC_DEBUG_UART_DMA_HANDLER;
extern DMA_HandleTypeDef PC_MODBUS_UART_DMA_HANDLER;
class UARTSender : public ZIUartSender {
UART_HandleTypeDef* m_huart;
public:
void init(UART_HandleTypeDef* huart) { m_huart = huart; }
virtual void send(const uint8_t* data, size_t len) { HAL_UART_Transmit(m_huart, (uint8_t*)data, len, 1000); }
};
void SubModbusBoardIniter::init(int deviceId, //
function<void()> subModuleIniter, //
on_reg_read_t regreadcb, //
on_reg_write_t regwritecb) {
chip_cfg_t chipcfg = {};
chipcfg.us_dleay_tim = &PC_SYS_DELAY_US_TIMER;
chipcfg.tim_irq_scheduler_tim = &PC_SYS_TIM_IRQ_SCHEDULER_TIMER;
chipcfg.huart = &PC_DEBUG_UART;
chipcfg.debuglight = PC_DEBUG_LIGHT_GPIO;
chip_init(&chipcfg);
zos_cfg_t zoscfg;
zos_init(&zoscfg);
ZLOGI(TAG, "boardId:%d", deviceId);
if (subModuleIniter) {
subModuleIniter();
}
static ZUARTDmaReceiver dmaUartReceiver;
static ZUARTDmaReceiver::hardware_config_t cfg = {
.huart = &PC_MODBUS_UART,
.dma_rx = &PC_MODBUS_UART_DMA_HANDLER,
.rxbuffersize = PC_MODBUS_UART_RX_BUF_SIZE,
.rxovertime_ms = 1,
};
dmaUartReceiver.initialize(&cfg);
static UARTSender uartSender;
uartSender.init(&PC_MODBUS_UART);
ModulebusClient::Inst()->init(&dmaUartReceiver, &uartSender, deviceId, regreadcb, regwritecb);
}
void SubModbusBoardIniter::loop() {
while (true) {
OSDefaultSchduler::getInstance()->loop();
ModulebusClient::Inst()->loop();
}
}

26
components/sub_modbus_module/sub_modbus_board_initer.hpp

@ -0,0 +1,26 @@
#pragma once
#include "sdk/os/zos.hpp"
#include "sdk\components\cmdscheduler\cmd_scheduler_v2.hpp"
#include "sdk\components\hardware\uart\zuart_dma_receiver.hpp"
#include "sdk\components\zcancmder\zcan_board_module.hpp"
#include "sdk\components\zcancmder\zcanreceiver.hpp"
#include "sdk\components\zprotocol_helper\micro_computer_module_device_script_cmder_paser.hpp"
#include "sdk\components\zprotocols\zcancmder_v2\protocol_event_bus_sender.hpp"
#include "sdk\components\zprotocols\zcancmder_v2\protocol_parser.hpp"
#include "sdk\components\zprotocols\zcancmder_v2\zmodule_device_manager.hpp"
//
#include "sdk\components\modbus\modbus_client.hpp"
namespace iflytop {
class SubModbusBoardIniter {
public:
void init(int deviceId, //
function<void()> subModuleIniter, //
on_reg_read_t regreadcb, //
on_reg_write_t regwritecb);
void loop();
private:
};
} // namespace iflytop
Loading…
Cancel
Save