WIP holding register write
This commit is contained in:
parent
15bc1943ef
commit
917886820d
@ -97,7 +97,7 @@ int8_t config_write(config_t *config)
|
||||
}
|
||||
|
||||
/* Write LED BRIGHTNESS */
|
||||
if (eeprom_program_word(CONFIG_EEPROM_ADDR_LED_BRIGHTNESS, config->led_brightness) != EEPROM_OK)
|
||||
if (eeprom_program_halfword(CONFIG_EEPROM_ADDR_LED_BRIGHTNESS, config->led_brightness) != EEPROM_OK)
|
||||
{
|
||||
return EEPROM_WRITE_ERROR;
|
||||
}
|
||||
|
@ -180,6 +180,13 @@ int8_t modbus_slave_process_msg(const uint8_t *buffer, int len)
|
||||
return MODBUS_ERROR;
|
||||
}
|
||||
transaction.register_address = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++];
|
||||
if (flags & MODBUS_FLAG_WRITE) {
|
||||
if (flags & MODBUS_FLAG_SINGLE) {
|
||||
transaction.holding_registers[0] = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++];
|
||||
} else {
|
||||
// write multiple register - TODO
|
||||
}
|
||||
} else {
|
||||
transaction.register_count = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++];
|
||||
if (
|
||||
transaction.register_count < 1 ||
|
||||
@ -187,6 +194,7 @@ int8_t modbus_slave_process_msg(const uint8_t *buffer, int len)
|
||||
) {
|
||||
transaction.exception.exception_code = MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE;
|
||||
}
|
||||
}
|
||||
// add offset to register number
|
||||
transaction.register_number += transaction.register_address;
|
||||
break;
|
||||
|
49
tests/holding_register_test.py
Executable file
49
tests/holding_register_test.py
Executable file
@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python3
|
||||
from time import sleep
|
||||
import minimalmodbus
|
||||
import serial
|
||||
|
||||
slave_address = 254
|
||||
instrument = minimalmodbus.Instrument('/dev/ttyUSB0', slave_address, close_port_after_each_call=True) # port name, slave address (in decimal)
|
||||
|
||||
instrument.serial.baudrate = 19200
|
||||
instrument.serial.bytesize = 8
|
||||
instrument.serial.parity = serial.PARITY_EVEN
|
||||
instrument.serial.stopbits = 1
|
||||
instrument.serial.timeout = 0.05 # seconds
|
||||
instrument.mode = minimalmodbus.MODE_RTU # rtu or ascii mode
|
||||
instrument.clear_buffers_before_each_transaction = True
|
||||
|
||||
# holding register numbers
|
||||
LED_on_register = 0
|
||||
LED_brightness_register = 1
|
||||
LED_smooth_register = 2
|
||||
CO2_alert_limit_1_register = 3
|
||||
CO2_alert_limit_2_register = 4
|
||||
SCD4x_temperature_offset_register = 5
|
||||
MODBUS_address_register = 6
|
||||
baudrate_register = 7
|
||||
# holding register readout
|
||||
print('---- Reading from holding registers ----')
|
||||
#LED_on = int(instrument.read_register(LED_on_register, 1, functioncode=3) * 10)
|
||||
#LED_brightness = int(instrument.read_register(LED_brightness_register, 1, functioncode=3) * 10)
|
||||
#LED_smooth = int(instrument.read_register(LED_smooth_register, 1, functioncode=3) * 10)
|
||||
#CO2_alert_limit_1 = int(instrument.read_register(CO2_alert_limit_1_register, 1, functioncode=3) * 10)
|
||||
#CO2_alert_limit_2 = int(instrument.read_register(CO2_alert_limit_2_register, 1, functioncode=3) * 10)
|
||||
#SCD4x_temperature_offset = int(instrument.read_register(SCD4x_temperature_offset_register, 1, functioncode=3) * 10)
|
||||
#MODBUS_address = int(instrument.read_register(MODBUS_address_register, 1, functioncode=3) * 10)
|
||||
#baudrate = int(instrument.read_register(baudrate_register, 1, functioncode=3) * 10)
|
||||
# print
|
||||
#print(
|
||||
#f'''LED_on = {LED_on}
|
||||
#LED_brightness = {LED_brightness}
|
||||
#LED_smooth = {LED_smooth}
|
||||
#CO2_alert_limit_1 = {CO2_alert_limit_1}
|
||||
#CO2_alert_limit_2 = {CO2_alert_limit_2}
|
||||
#SCD4x_temperature_offset = {SCD4x_temperature_offset}
|
||||
#MODBUS_address = {MODBUS_address}
|
||||
#baudrate = {baudrate}
|
||||
#''')
|
||||
# write to holding register
|
||||
print('---- Writing to holding registers ----)')
|
||||
instrument.write_register(LED_on_register, 0, functioncode=6)
|
Loading…
Reference in New Issue
Block a user