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
示例#2
0
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