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
50 changes: 25 additions & 25 deletions DeviceAPI/classAPI/classAPI_vav_rtu.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def __init__(self,**kwargs): #default color is white
self.variables = kwargs
address_parts = self.get_variable('address').split(':')
self.set_variable('address',address_parts[0])
self.set_variable('slave_id',int(address_parts[1]))
self.set_variable('subordinate_id',int(address_parts[1]))
self.set_variable('offline_count',0)
self.set_variable('connection_renew_interval',6000) #nothing to renew

Expand Down Expand Up @@ -103,7 +103,7 @@ def getDeviceStatus(self):
client = ModbusTcpClient(self.get_variable('address'),port=502)
client.connect()
if (self.get_variable('model')=='VC1000'):
result = client.read_input_registers(0,8,unit=self.get_variable('slave_id'))
result = client.read_input_registers(0,8,unit=self.get_variable('subordinate_id'))
if int(result.registers[0])==32767:
self.set_variable('temperature',None)
else:
Expand All @@ -114,14 +114,14 @@ def getDeviceStatus(self):
self.set_variable('supply_temperature',None)
else:
self.set_variable('supply_temperature',float('%.1f' % self.cel2far(float(int(result.registers[7]))/100.0)))
result = client.read_holding_registers(159,2,unit=self.get_variable('slave_id'))
result = client.read_holding_registers(159,2,unit=self.get_variable('subordinate_id'))
if (int(result.registers[0])==1):
self.set_variable('flap_override','ON')
else:
self.set_variable('flap_override','OFF')
self.set_variable('flap_position',int(result.registers[1]))
elif (self.get_variable('model')=='M1000'):
result = client.read_input_registers(0,26,unit=self.get_variable('slave_id'))
result = client.read_input_registers(0,26,unit=self.get_variable('subordinate_id'))
if int(result.registers[18])==32767:
self.set_variable('temperature',None)
else:
Expand Down Expand Up @@ -151,12 +151,12 @@ def getDeviceStatus(self):
self.set_variable('fan_status','ON')
else:
self.set_variable('fan_status','OFF')
result = client.read_holding_registers(129,1,unit=self.get_variable('slave_id'))
result = client.read_holding_registers(129,1,unit=self.get_variable('subordinate_id'))
if int(result.registers[0]) > 100:
self.set_variable('heating',0)
else:
self.set_variable('heating',int(result.registers[0]))
result = client.read_holding_registers(10,1,unit=self.get_variable('slave_id'))
result = client.read_holding_registers(10,1,unit=self.get_variable('subordinate_id'))
if int(result.registers[0]) == 0:
self.set_variable('cooling_mode','None')
self.set_variable('cooling_status','OFF')
Expand Down Expand Up @@ -204,48 +204,48 @@ def setDeviceStatus(self, postmsg):
client.connect()
if (self.get_variable('model')=='VC1000'):
if 'heat_setpoint' in postmsg.keys():
client.write_register(6,int(self.far2cel(float(postmsg.get('heat_setpoint')))*100.0),unit=self.get_variable('slave_id'))
client.write_register(6,int(self.far2cel(float(postmsg.get('heat_setpoint')))*100.0),unit=self.get_variable('subordinate_id'))
if 'cool_setpoint' in postmsg.keys():
client.write_register(6,int(self.far2cel(float(postmsg.get('cool_setpoint')))*100.0),unit=self.get_variable('slave_id'))
client.write_register(6,int(self.far2cel(float(postmsg.get('cool_setpoint')))*100.0),unit=self.get_variable('subordinate_id'))
if 'flap_override' in postmsg.keys():
if postmsg.get('flap_override') == 'ON' or postmsg.get('flap_override') == True:
client.write_register(159,1,unit=self.get_variable('slave_id'))
client.write_register(159,1,unit=self.get_variable('subordinate_id'))
elif postmsg.get('flap_override') == 'OFF' or postmsg.get('flap_override') == False:
client.write_register(159,0,unit=self.get_variable('slave_id'))
client.write_register(159,0,unit=self.get_variable('subordinate_id'))
if 'flap_position' in postmsg.keys():
client.write_register(160,int(postmsg.get('flap_position')),unit=self.get_variable('slave_id'))
client.write_register(160,int(postmsg.get('flap_position')),unit=self.get_variable('subordinate_id'))
elif (self.get_variable('model')=='M1000'):
if 'heat_setpoint' in postmsg.keys():
client.write_register(187,int(self.far2cel(float(postmsg.get('heat_setpoint')))*100.0),unit=self.get_variable('slave_id'))
client.write_register(187,int(self.far2cel(float(postmsg.get('heat_setpoint')))*100.0),unit=self.get_variable('subordinate_id'))
if 'cool_setpoint' in postmsg.keys():
client.write_register(188,int(self.far2cel(float(postmsg.get('cool_setpoint')))*100.0),unit=self.get_variable('slave_id'))
client.write_register(188,int(self.far2cel(float(postmsg.get('cool_setpoint')))*100.0),unit=self.get_variable('subordinate_id'))
if 'outside_damper_position' in postmsg.keys():
client.write_register(274,int(postmsg.get('outside_damper_position')),unit=self.get_variable('slave_id'))
client.write_register(274,int(postmsg.get('outside_damper_position')),unit=self.get_variable('subordinate_id'))
if 'bypass_damper_position' in postmsg.keys():
client.write_register(275,int(postmsg.get('bypass_damper_position')),unit=self.get_variable('slave_id'))
client.write_register(275,int(postmsg.get('bypass_damper_position')),unit=self.get_variable('subordinate_id'))
if 'fan_status' in postmsg.keys():
if postmsg.get('fan_status') == 'ON' or postmsg.get('fan_status') == True:
client.write_register(130,2,unit=self.get_variable('slave_id'))
client.write_register(130,2,unit=self.get_variable('subordinate_id'))
elif postmsg.get('fan_status') == 'OFF' or postmsg.get('fan_status') == False:
client.write_register(130,1,unit=self.get_variable('slave_id'))
client.write_register(130,1,unit=self.get_variable('subordinate_id'))
if 'cooling_status' in postmsg.keys():
if postmsg.get('cooling_status') == 'ON':
client.write_registers(124,[1,2,2,2],unit=self.get_variable('slave_id'))
client.write_registers(124,[1,2,2,2],unit=self.get_variable('subordinate_id'))
elif postmsg.get('cooling_status') == 'OFF':
client.write_registers(124,[0,1,1,1],unit=self.get_variable('slave_id'))
client.write_registers(124,[0,1,1,1],unit=self.get_variable('subordinate_id'))
if 'cooling_mode' in postmsg.keys():
if postmsg.get('cooling_mode') == 'None':
client.write_register(10,0,unit=self.get_variable('slave_id'))
client.write_register(10,0,unit=self.get_variable('subordinate_id'))
elif postmsg.get('cooling_mode') == 'STG1':
client.write_register(10,1,unit=self.get_variable('slave_id'))
client.write_register(10,1,unit=self.get_variable('subordinate_id'))
elif postmsg.get('cooling_mode') == 'STG2':
client.write_register(10,2,unit=self.get_variable('slave_id'))
client.write_register(10,2,unit=self.get_variable('subordinate_id'))
elif postmsg.get('cooling_mode') == 'STG3':
client.write_register(10,3,unit=self.get_variable('slave_id'))
client.write_register(10,3,unit=self.get_variable('subordinate_id'))
elif postmsg.get('cooling_mode') == 'STG4':
client.write_register(10,4,unit=self.get_variable('slave_id'))
client.write_register(10,4,unit=self.get_variable('subordinate_id'))
if 'heating' in postmsg.keys():
client.write_register(129,int(postmsg.get('heating')),unit=self.get_variable('slave_id'))
client.write_register(129,int(postmsg.get('heating')),unit=self.get_variable('subordinate_id'))
client.close()

except:
Expand Down
12 changes: 6 additions & 6 deletions DeviceAPI/discoverAPI/Modbus.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,16 +113,16 @@ def discover(type):
client = ModbusTcpClient(ip,port=502)
client.connect()
if type == 'Prolon_VAV':
possible_slave_ids = [1,2,7]
possible_subordinate_ids = [1,2,7]
elif type == 'Prolon_RTU':
possible_slave_ids = [15,20]
possible_subordinate_ids = [15,20]
else:
possible_slave_ids = []
possible_subordinate_ids = []

for slave_id in possible_slave_ids:
result = client.read_input_registers(0,unit=slave_id)
for subordinate_id in possible_subordinate_ids:
result = client.read_input_registers(0,unit=subordinate_id)
if result is not None:
responses.append(ip+':'+str(slave_id))
responses.append(ip+':'+str(subordinate_id))

client.close()
except:
Expand Down
2 changes: 1 addition & 1 deletion volttron/drivers/file_driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ def scrape_all(self):
except (IOError):
print ("ERROR: Failed to scrape device at " +
self.ip_address + ":" + str(self.port) + " " +
"ID: " + str(self.slave_id))
"ID: " + str(self.subordinate_id))
return None

return result_dict
Expand Down
48 changes: 24 additions & 24 deletions volttron/drivers/modbus.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,15 +93,15 @@ class ModbusInterfaceException(ModbusException):
pass

class ModbusRegisterBase(BaseRegister):
def __init__(self, address, register_type, read_only, pointName, units, description = '', slave_id=0):
def __init__(self, address, register_type, read_only, pointName, units, description = '', subordinate_id=0):
super(ModbusRegisterBase, self).__init__(register_type, read_only, pointName, units, description = '')
self.address = address
self.slave_id = slave_id
self.subordinate_id = subordinate_id

class ModbusBitRegister(ModbusRegisterBase):
def __init__(self, address, type_string, pointName, units, read_only, description = '', slave_id=0):
def __init__(self, address, type_string, pointName, units, read_only, description = '', subordinate_id=0):
super(ModbusBitRegister, self).__init__(address, "bit", read_only, pointName, units,
description = description, slave_id=slave_id)
description = description, subordinate_id=subordinate_id)

self.python_type = bool

Expand All @@ -119,12 +119,12 @@ def get_state_callback(self, response_bits):
return response_bits.bits[0]

def get_state_async(self, client):
d = client.read_discrete_inputs(self.address, unit=self.slave_id) if self.read_only else client.read_coils(self.address, unit=self.slave_id)
d = client.read_discrete_inputs(self.address, unit=self.subordinate_id) if self.read_only else client.read_coils(self.address, unit=self.subordinate_id)
d.addCallback(self.get_state_callback)
return d

def get_state_sync(self, client):
response_bits = client.read_discrete_inputs(self.address, unit=self.slave_id) if self.read_only else client.read_coils(self.address, unit=self.slave_id)
response_bits = client.read_discrete_inputs(self.address, unit=self.subordinate_id) if self.read_only else client.read_coils(self.address, unit=self.subordinate_id)
return self.get_state_callback(response_bits)

def set_state_callback(self, response):
Expand All @@ -136,21 +136,21 @@ def set_state_callback(self, response):

def set_state_sync(self, client, value):
if not self.read_only:
r = client.write_coil(self.address, value, unit=self.slave_id)
r = client.write_coil(self.address, value, unit=self.subordinate_id)
return self.set_state_callback(r)
return None

def set_state_async(self, client, value):
if not self.read_only:
r = client.write_coil(self.address, value, unit=self.slave_id)
r = client.write_coil(self.address, value, unit=self.subordinate_id)
r.addCallback(self.set_state_callback)
return r
return None

class ModbusByteRegister(ModbusRegisterBase):
def __init__(self, address, type_string, pointName, units, read_only, description = '', slave_id=0):
def __init__(self, address, type_string, pointName, units, read_only, description = '', subordinate_id=0):
super(ModbusByteRegister, self).__init__(address, "byte", read_only,
pointName, units, description = description, slave_id=slave_id)
pointName, units, description = description, subordinate_id=subordinate_id)

try:
self.parse_struct = struct.Struct(type_string)
Expand Down Expand Up @@ -187,25 +187,25 @@ def get_state_callback(self, response):

def get_state_async(self, client):
if self.read_only:
d = client.read_input_registers(self.address, count=self.get_register_count(), unit=self.slave_id)
d = client.read_input_registers(self.address, count=self.get_register_count(), unit=self.subordinate_id)
else:
d = client.read_holding_registers(self.address, count=self.get_register_count(), unit=self.slave_id)
d = client.read_holding_registers(self.address, count=self.get_register_count(), unit=self.subordinate_id)
d.addCallback(self.get_state_callback)
return d

def get_state_sync(self, client):
if self.read_only:
response = client.read_input_registers(self.address, count=self.get_register_count(), unit=self.slave_id)
response = client.read_input_registers(self.address, count=self.get_register_count(), unit=self.subordinate_id)
else:
response = client.read_holding_registers(self.address, count=self.get_register_count(), unit=self.slave_id)
response = client.read_holding_registers(self.address, count=self.get_register_count(), unit=self.subordinate_id)

return self.get_state_callback(response)

def set_state_sync(self, client, value):
if not self.read_only:
value_bytes = self.parse_struct.pack(value)
register_values = PYMODBUS_REGISTER_STRUCT.unpack_from(value_bytes)
client.write_registers(self.address, register_values, unit=self.slave_id)
client.write_registers(self.address, register_values, unit=self.subordinate_id)
return self.get_state_sync(client)
return None

Expand All @@ -216,16 +216,16 @@ def set_state_async(self, client, value):
if not self.read_only:
value_bytes = self.parse_struct.pack(value)
register_values = PYMODBUS_REGISTER_STRUCT.unpack_from(value_bytes)
r = client.write_registers(self.address, register_values, unit=self.slave_id)
r = client.write_registers(self.address, register_values, unit=self.subordinate_id)
r.addCallback(self.set_state_callback, client)
return r
return None

class ModbusInterface(BaseInterface):
def __init__(self, ip_address, port=Defaults.Port, slave_id=0, config_file=configFile, **kwargs):
def __init__(self, ip_address, port=Defaults.Port, subordinate_id=0, config_file=configFile, **kwargs):
super(ModbusInterface, self).__init__(**kwargs)

self.slave_id=slave_id
self.subordinate_id=subordinate_id
self.ip_address = ip_address
self.port = port
self.build_ranges_map()
Expand Down Expand Up @@ -312,7 +312,7 @@ def scrape_byte_registers(self, client, read_only):

for group in xrange(start, end + 1, MODBUS_READ_MAX):
count = min(end - group + 1, MODBUS_READ_MAX)
response = client.read_input_registers(group, count, unit=self.slave_id) if read_only else client.read_holding_registers(group, count, unit=self.slave_id)
response = client.read_input_registers(group, count, unit=self.subordinate_id) if read_only else client.read_holding_registers(group, count, unit=self.subordinate_id)
if response is None:
raise ModbusInterfaceException("pymodbus returned None")
response_bytes = response.encode()
Expand All @@ -337,7 +337,7 @@ def scrape_bit_registers(self, client, read_only):

for group in xrange(start, end + 1, MODBUS_READ_MAX):
count = min(end - group + 1, MODBUS_READ_MAX)
response = client.read_discrete_inputs(group, count, unit=self.slave_id) if read_only else client.read_coils(group, count, unit=self.slave_id)
response = client.read_discrete_inputs(group, count, unit=self.subordinate_id) if read_only else client.read_coils(group, count, unit=self.subordinate_id)
if response is None:
raise ModbusInterfaceException("pymodbus returned None")
result += response.bits
Expand All @@ -362,7 +362,7 @@ def scrape_all(self):
except (ConnectionException, ModbusIOException, ModbusInterfaceException) as e:
print ("ERROR: Failed to scrape device at " +
self.ip_address + ":" + str(self.port) + " " +
"ID: " + str(self.slave_id) + str(e))
"ID: " + str(self.subordinate_id) + str(e))
return None
finally:
client.close()
Expand Down Expand Up @@ -390,7 +390,7 @@ def parse_config(self, config_file):
units = regDef['Units']

klass = ModbusBitRegister if bit_register else ModbusByteRegister
register = klass(address, io_type, point_path, units, read_only, description = description, slave_id=self.slave_id)
register = klass(address, io_type, point_path, units, read_only, description = description, subordinate_id=self.subordinate_id)

self.insert_register(register)

Expand All @@ -402,11 +402,11 @@ def setup(self, opts):

def get_interface(self, opts):
ip_address = opts['ip_address']
slave_id = int(opts.get('slave_id',0))
subordinate_id = int(opts.get('subordinate_id',0))
port = int(opts.get('port',502))
catalyst_config = opts.get('register_config', configFile)

return ModbusInterface(ip_address, slave_id=slave_id, port=port, config_file=catalyst_config)
return ModbusInterface(ip_address, subordinate_id=subordinate_id, port=port, config_file=catalyst_config)

if __name__ == "__main__":
from pprint import pprint
Expand Down