import can4python as can frame_def = can.CanFrameDefinition(7, name='testmessage') frame_def.producer_ids = ["1"] signal_def = can.CanSignalDefinition("testsignal2", 0, 16) frame_def.signaldefinitions.append(signal_def) config = can.Configuration({7: frame_def}, ego_node_ids=["1"]) bus = can.CanBus(config, 'vcan0') bus.send_signals({'testsignal2': 3}) # Signal value = 3
def init_vehiclesimulator(): """Initialize the vehicle simulator. Returns the tuple (temperature_simulator, speed_simulator, canbus) """ # Define CAN messages # # Example on how to define CAN signals in source code CAN_EGO_NODE_ID = "2" FRAMEDEF1 = can.CanFrameDefinition(8, name='vehiclesimulationdata') FRAMEDEF1.producer_ids = [CAN_EGO_NODE_ID] FRAMEDEF1.signaldefinitions.append( can.CanSignalDefinition('vehiclespeed', startbit=8, numberofbits=16, scalingfactor=0.01, endianness='big')) FRAMEDEF1.signaldefinitions.append( can.CanSignalDefinition('enginespeed', startbit=26, numberofbits=14, endianness='big')) FRAMEDEF2 = can.CanFrameDefinition(9, name='climatesimulationdata') FRAMEDEF2.producer_ids = [CAN_EGO_NODE_ID] FRAMEDEF2.signaldefinitions.append( can.CanSignalDefinition('indoortemperature', startbit=8, numberofbits=11, valueoffset=-50, scalingfactor=0.1, endianness='big')) FRAMEDEF3 = can.CanFrameDefinition(7, name='climatecontrolsignals') FRAMEDEF3.signaldefinitions.append( can.CanSignalDefinition('acstatus', startbit=7, numberofbits=1, endianness='big')) CONFIG = can.Configuration(ego_node_ids=[CAN_EGO_NODE_ID]) CONFIG.add_framedefinition(FRAMEDEF1) CONFIG.add_framedefinition(FRAMEDEF2) CONFIG.add_framedefinition(FRAMEDEF3) # Parse command line and set output verbosity # commandlineparser = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter) commandlineparser.add_argument( '-v', action='count', default=0, help="Increase verbosity level. Can be repeated.") commandlineparser.add_argument( '-i', dest="interface", default="vcan0", help="CAN interface name. Defaults to %(default)s.") commandline = commandlineparser.parse_args() if commandline.v == 1: loglevel = logging.INFO elif commandline.v >= 2: loglevel = logging.DEBUG else: loglevel = logging.WARNING logging.basicConfig(level=loglevel) # Set up CAN bus # logging.info(" ") logging.info(" ") logging.info( "Starting vehicle simulator, using CAN interface {!r} with timeout {} s." .format(commandline.interface, CYCLE_TIME)) canbus = can.CanBus(CONFIG, commandline.interface, timeout=CYCLE_TIME) logging.debug(canbus.get_descriptive_ascii_art()) # Set up simulators # speed_simulator = vehiclesimulationutilities.VehicleSpeedSimulator() temperature_simulator = vehiclesimulationutilities.CabinTemperatureSimulator( ) return temperature_simulator, speed_simulator, canbus