SEND_PERIODIC_CAN_MESSAGE
Send a periodic message to a CAN bus. Send a message to a CAN device periodically. This block should be compatible with all devices that support the CAN interface.
`STOP_SEND_PERIODIC_CAN_MESSAGE` can be used to stop sending the messages.
A connection to the device is required. Use a CAN_CONNECT block to connect to a CAN device. Params: CAN_address : str The CAN device address to connect to. message : Stateful A list of messages to send to the CAN device. period : float The period in seconds between messages. duration : Optional float Approximate duration in seconds to continue sending messages. If no duration is provided, the task will continue indefinitely. Returns: out : DataContainer Optional: None
Python Code
from typing import Optional
from flojoy import flojoy, DeviceConnectionManager, Stateful, DataContainer
import can
@flojoy(deps={"python-can": "4.3.1"})
def SEND_PERIODIC_CAN_MESSAGE(
CAN_address: str,
message: Stateful,
period: float,
duration: Optional[float] = None,
default: Optional[DataContainer] = None,
) -> Optional[DataContainer]:
"""Send a periodic message to a CAN bus.
Send a message to a CAN device periodically. This block should be compatible with all devices that support the CAN interface.
`STOP_SEND_PERIODIC_CAN_MESSAGE` can be used to stop sending the messages.
A connection to the device is required. Use a CAN_CONNECT block to connect to a CAN device.
Parameters
----------
CAN_address : str
The CAN device address to connect to.
message : Stateful
A list of messages to send to the CAN device.
period: float
The period in seconds between messages.
duration: Optional float
Approximate duration in seconds to continue sending messages. If no duration is provided, the task will continue indefinitely.
Returns
-------
DataContainer
Optional: None
"""
connection: can.interface.Bus = DeviceConnectionManager.get_connection(
CAN_address
).get_handle()
connection.send_periodic(message.obj, period, duration=duration)
return None
Example
Having problems with this example app? Join our Discord community and we will help you out!
This example shows how to send a frame to a CAN bus using the CANable USB-to-CAN adapter. The application sends a first frame intended to indicate the start of a test on a system. Subsequently, the application sends a burst of messages and then sends a frame to indicate the end of the test.
This application uses an CANABLE_CONNECT
block to establish a connection to the CAN bus, but this connection could be replaced by any other connection. For example, the PEAK_CONNECT
block could be used instead.