Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions resources/sources/Baremetal/Baremetal.ino
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@

#ifdef MODBUS_ENABLED
#include "ModbusSlave.h"
#include "ModbusMaster.h"
#endif

// Include WiFi lib to turn off WiFi radio on ESP32/ESP8266 if not using WiFi
Expand Down Expand Up @@ -138,6 +139,13 @@ void setup()
MBSERIAL_IFACE.begin(MBSERIAL_BAUD);
mbconfig_serial_iface(&MBSERIAL_IFACE, MBSERIAL_BAUD, -1);
#endif

// Initialize Modbus master if enabled
#ifdef MODBUS_MASTER
modbus_master.begin(MBSERIAL_BAUD);
modbus_master.setTransmissionMode(MODBUS_RTU);
#endif

modbus.slaveid = MBSERIAL_SLAVE;
#endif

Expand All @@ -148,6 +156,12 @@ void setup()
uint8_t gateway[] = { MBTCP_GATEWAY };
uint8_t subnet[] = { MBTCP_SUBNET };

// Initialize Modbus master for TCP if enabled
#ifdef MODBUS_MASTER
modbus_master.begin(MBTCP_PORT);
modbus_master.setTransmissionMode(MODBUS_TCP);
#endif

if (sizeof(ip)/sizeof(uint8_t) < 4)
mbconfig_ethernet_iface(mac, NULL, NULL, NULL, NULL);
else if (sizeof(dns)/sizeof(uint8_t) < 4)
Expand Down
4 changes: 4 additions & 0 deletions resources/sources/Baremetal/arduino_libs.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,8 @@ extern uint8_t pinMask_AOUT[];
#ifdef USE_STM32CAN_BLOCK
#include "modules/stm32can.c"
#endif

#ifdef USE_MODBUS_MASTER_BLOCK
#include <ModbusMaster.h>
#endif
#endif
8 changes: 8 additions & 0 deletions resources/sources/Baremetal/c_blocks_code.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@
#include "iec_var.hpp"
#include "iec_string.hpp"

// Modbus master function declarations
extern "C" {
void modbus_master_read_coils(IEC_UINT slave_id, IEC_UINT start_address, IEC_UINT quantity, IEC_BOOL* result_array);
void modbus_master_read_registers(IEC_UINT slave_id, IEC_UINT start_address, IEC_UINT quantity, IEC_UINT* result_array);
void modbus_master_write_single_coil(IEC_UINT slave_id, IEC_UINT address, IEC_BOOL value);
void modbus_master_write_single_register(IEC_UINT slave_id, IEC_UINT address, IEC_UINT value);
}

/*********************/
/* IEC Types defs */
/*********************/
Expand Down
27 changes: 27 additions & 0 deletions resources/sources/Baremetal/modules/sm_cards.c
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,11 @@ int relay16Set(uint8_t stack, uint16_t val)
extern "C" int digIn8Get(uint8_t, uint8_t*);
extern "C" int digIn8Init(int );

// Modbus Master support
extern "C" int modbusMasterInit(int);
extern "C" int modbusMasterRead(int, uint16_t*, int);
extern "C" int modbusMasterWrite(int, uint16_t*, int);

#define DIG_IN8_CHANNELS 8
#define DIG_IN8_HW_I2C_BASE_ADD 0x20
#define DIG_IN8_INPORT_REG_ADD 0x00
Expand All @@ -314,6 +319,28 @@ int digIn8CardCheck(uint8_t stack)
return add;
}

// Modbus Master functions
int modbusMasterInit(int stack)
{
// Initialize Modbus master communication
// Stack parameter could be used for multiple Modbus masters
return OK;
}

int modbusMasterRead(int slaveId, uint16_t* data, int count)
{
// Read data from Modbus slave
// Implementation would depend on specific hardware
return OK;
}

int modbusMasterWrite(int slaveId, uint16_t* data, int count)
{
// Write data to Modbus slave
// Implementation would depend on specific hardware
return OK;
}

int digIn8Init(int stack)
{
int dev = -1;
Expand Down