def write_regs(mst: modbus.Instrument, start: int, data: list): mst.write_registers(start, data)
print 'Rainbow.' while True: # Shift all values by one led. led.insert(0, list(led[0])) led = led[:-1] # Change color when colour length is reached. if k > COLORLENGTH: j += 1 if j >= len(RAINBOW): j = 0 k = 0 k += 1 # Fade first LED. if led[0][0] < (RAINBOW[j][0] - FADE): led[0][0] += FADE if led[0][0] > (RAINBOW[j][0] + FADE): led[0][0] -= FADE if led[0][1] < (RAINBOW[j][1] - FADE): led[0][1] += FADE if led[0][1] > (RAINBOW[j][1] + FADE): led[0][1] -= FADE if led[0][2] < (RAINBOW[j][2] - FADE): led[0][2] += FADE if led[0][2] > (RAINBOW[j][2] + FADE): led[0][2] -= FADE instrument.write_registers(0x1000, map(to_color, led)) time.sleep(0.05)
print ':: Modbus updater' port = sys.argv[1] slave_address = int(sys.argv[2]) fmw = sys.argv[3] inst = Instrument(port, slave_address) inst.serial.baudrate = 57600 inst.serial.timeout = 0.1 # print inst # inst.debug = True # Try to reset FW and run bootloader. print 'Sending reset to FW... ', try: inst.write_registers(RESET_ADDRESS, [0xFFFF]) except IOError: print '[no response]' except ValueError: print '[wrong response]' else: print '[OK]' # Bootloader slave address has MSB set. inst.address = BOOTLOADER_SLAVE_ADDRESS | slave_address time.sleep(0.5) start_time = time.time() # Unlock bootloader. print 'Sending secret key',
#!/usr/bin/env python if __name__ == '__main__': import sys from minimalmodbus import Instrument if len(sys.argv) < 3: print 'Usage: {} [COM] [SLAVE] <baudrate=57600>'.format(sys.argv[0]) exit(1) port = sys.argv[1] slave = int(sys.argv[2]) try: baudrate = int(sys.argv[3]) except Exception: baudrate = 57600 instrument = Instrument(port, slave) instrument.serial.baudrate = baudrate instrument.serial.timeout = 1 instrument.write_registers( 0x0002, # Address [0xFFFF], # Data, any value will do. )
class Slave: def __init__(self, label, slave_id, slave_address, setupsAdr, setupsCount, variablesAdr, variablesCount, port): self.label = label self.id = slave_id self.port = port self.slave_address = slave_address self.setupsAdr = setupsAdr self.setupsCount = setupsCount self.variablesAdr = variablesAdr self.variablesCount = variablesCount try: self.instrument = Instrument(self.port, slave_address) except: self.status = "ERROR" traceback.print_exc() self.status = "NEW" self.variable_values = [] self.config_values = [] def getConfig(self, adr): if self.status == "OK": return self.config_values[adr] else: return 0 def getValue(self, adr): if self.status == "OK": return self.variable_values[adr - self.variablesAdr] else: return 0 def getVariables(self): try: self.variable_values = self.instrument.read_registers( self.variablesAdr, self.variablesCount) self.status = "OK" except IOError: self.status = "ERROR" traceback.print_exc() def getConfigs(self): try: self.config_values = self.instrument.read_registers( self.setupsAdr, self.setupsCount) self.status = "OK" except IOError: self.status = "ERROR" traceback.print_exc() def setConfigs(self): try: #TODO Detener el hilo de actualización de las variables self.instrument.write_registers(self.setupsAdr, self.config_values) self.status = "OK" except IOError: self.status = "ERROR" traceback.print_exc() def run(self): if self.status != "OK": self.getConfigs() self.getVariables() def simulate(self): print('Simulating from slave: %s' % self.id) from random import randint self.variable_values = [ randint(0, 100) for i in range(self.variablesCount) ] self.status = "SIMULATE"