Skip to content

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

Find this Flojoy Block on GitHub

Example

Having problems with this example app? Join our Discord community and we will help you out!
React Flow mini map

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.