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 */
|
/* 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;
|
return EEPROM_WRITE_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -180,12 +180,20 @@ int8_t modbus_slave_process_msg(const uint8_t *buffer, int len)
|
|||||||
return MODBUS_ERROR;
|
return MODBUS_ERROR;
|
||||||
}
|
}
|
||||||
transaction.register_address = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++];
|
transaction.register_address = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++];
|
||||||
transaction.register_count = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++];
|
if (flags & MODBUS_FLAG_WRITE) {
|
||||||
if (
|
if (flags & MODBUS_FLAG_SINGLE) {
|
||||||
transaction.register_count < 1 ||
|
transaction.holding_registers[0] = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++];
|
||||||
transaction.register_count > MODBUS_MAX_REGISTERS
|
} else {
|
||||||
) {
|
// write multiple register - TODO
|
||||||
transaction.exception.exception_code = MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE;
|
}
|
||||||
|
} else {
|
||||||
|
transaction.register_count = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++];
|
||||||
|
if (
|
||||||
|
transaction.register_count < 1 ||
|
||||||
|
transaction.register_count > MODBUS_MAX_REGISTERS
|
||||||
|
) {
|
||||||
|
transaction.exception.exception_code = MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// add offset to register number
|
// add offset to register number
|
||||||
transaction.register_number += transaction.register_address;
|
transaction.register_number += transaction.register_address;
|
||||||
|
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