Skip to content

CREATE_CAN_MESSAGE

Create a CAN message. Create a CAN message that can be used to send to real systems. Params: frame_id : int The frame ID. data : list[int] The data to be sent. Will be converted in an array of bytes. error_frame : bool Whether the frame is an error frame, by default False. can_fd : bool Whether the frame is a CAN FD frame (Flexible Data-Rate), by default False. channel : Optional string Optional Channel id. Returns: out : Stateful A list of can message with the message created.
Python Code
from flojoy import flojoy, Stateful, DataContainer
from typing import Optional
import can


@flojoy(deps={"python-can": "4.3.1"})
def CREATE_CAN_MESSAGE(
    frame_id: int,
    data: list[int],
    error_frame: bool = False,
    can_fd: bool = False,
    channel: Optional[str] = None,
    default: Optional[DataContainer] = None,
) -> Stateful:
    """Create a CAN message.

    Create a CAN message that can be used to send to real systems.

    Parameters
    ----------
    frame_id : int
        The frame ID.
    data : list[int]
        The data to be sent. Will be converted in an array of bytes.
    error_frame : bool
        Whether the frame is an error frame, by default False.
    can_fd : bool
        Whether the frame is a CAN FD frame (Flexible Data-Rate), by default False.
    channel : Optional string
        Optional Channel id.

    Returns
    -------
    Stateful
        A list of can message with the message created.
    """

    is_extended_id = frame_id >= 0x800
    data = bytearray(data)
    error_state_indicator = False
    if error_frame and can_fd:
        error_state_indicator = True
        error_frame = False

    message = can.Message(
        arbitration_id=frame_id,
        is_extended_id=is_extended_id,
        data=data,
        is_error_frame=error_frame,
        is_fd=can_fd,
        is_rx=False,
        error_state_indicator=error_state_indicator,
        channel=channel if channel != "" else None,
        check=True,
    )

    return Stateful([message])

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.