Skip to content

PLC profiles

The canonical profile is the stable configuration value for PLC selection. SlmpPlcProfile is the Rust API selector that binds that profile to the SLMP frame and compatibility mode used by the client. Use crate-root plc_profile_descriptors() when a UI or configuration schema needs the canonical name, display name, connection availability, and base-profile relationship in one list. The abstract melsec:qcpu entry is included with connectable: false. Store canonical_name, not display_name.

For cross-profile capability and device-range details, see the SLMP Profile Reference.

Verified hardware available for focused validation is maintained once in the shared MELSEC SLMP profile catalog.

Profiles table

Canonical profile Display name Rust selector Frame Mode Notes
melsec:iq-f MELSEC iQ-F (built-in) SlmpPlcProfile::IqF SlmpFrameType::Frame3E SlmpCompatibilityMode::Legacy iQ-F address rules; DX and DY are rejected.
melsec:iq-r MELSEC iQ-R (built-in) SlmpPlcProfile::IqR SlmpFrameType::Frame4E SlmpCompatibilityMode::Iqr Uses iQ-R protocol mode.
melsec:iq-r:rj71en71 MELSEC iQ-R (RJ71EN71) SlmpPlcProfile::IqRRj71En71 SlmpFrameType::Frame4E SlmpCompatibilityMode::Iqr Ethernet-unit profile using iQ-R protocol mode.
melsec:iq-l MELSEC iQ-L (built-in) SlmpPlcProfile::IqL SlmpFrameType::Frame4E SlmpCompatibilityMode::Iqr Uses iQ-R-equivalent address parsing while remaining separately selectable.
melsec:mx-f MELSEC MX-F (built-in) SlmpPlcProfile::MxF SlmpFrameType::Frame4E SlmpCompatibilityMode::Iqr Uses iQ-R protocol mode.
melsec:mx-r MELSEC MX-R (built-in) SlmpPlcProfile::MxR SlmpFrameType::Frame4E SlmpCompatibilityMode::Iqr Uses iQ-R protocol mode.
melsec:mx-r:rj71en71 MELSEC MX-R (RJ71EN71) SlmpPlcProfile::MxRRj71En71 SlmpFrameType::Frame4E SlmpCompatibilityMode::Iqr Ethernet-unit profile based on melsec:mx-r.
melsec:lcpu MELSEC-L (built-in) SlmpPlcProfile::LCpu SlmpFrameType::Frame3E SlmpCompatibilityMode::Legacy Legacy 3E profile.
melsec:lcpu:lj71e71-100 MELSEC-L (LJ71E71-100) SlmpPlcProfile::LCpuLj71E71100 SlmpFrameType::Frame4E SlmpCompatibilityMode::Legacy Ethernet unit profile using 4E frames with Q/L compatibility.
melsec:qcpu:qj71e71-100 MELSEC-Q (QJ71E71-100) SlmpPlcProfile::QCpuQj71E71100 SlmpFrameType::Frame4E SlmpCompatibilityMode::Legacy Ethernet unit profile for QCPU connections.
melsec:qnu MELSEC QnU (built-in) SlmpPlcProfile::QnU SlmpFrameType::Frame3E SlmpCompatibilityMode::Legacy QnU profile. Use direct or random device commands for normal access.
melsec:qnu:qj71e71-100 MELSEC QnU (QJ71E71-100) SlmpPlcProfile::QnUQj71E71100 SlmpFrameType::Frame4E SlmpCompatibilityMode::Legacy Ethernet unit profile using 4E frames with Q/L compatibility.
melsec:qnudv MELSEC QnUDV (built-in) SlmpPlcProfile::QnUDV SlmpFrameType::Frame3E SlmpCompatibilityMode::Legacy QnUDV profile. Use direct or random device commands for normal access.
melsec:qnudv:qj71e71-100 MELSEC QnUDV (QJ71E71-100) SlmpPlcProfile::QnUDVQj71E71100 SlmpFrameType::Frame4E SlmpCompatibilityMode::Legacy Ethernet unit profile using 4E frames with Q/L compatibility.

melsec:qcpu is base-only and used only for inherited address and range rules. Connection options reject it and point callers to melsec:qcpu:qj71e71-100.

How to select

use plc_comm_slmp::{SlmpClient, SlmpConnectionOptions, SlmpPlcProfile};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let options = SlmpConnectionOptions::new("192.168.250.100", 1025, plc_comm_slmp::SlmpTransportMode::Tcp, plc_comm_slmp::SlmpTargetAddress::default(), SlmpPlcProfile::IqR)?;

    let client = SlmpClient::connect(options).await?;
    println!("{}", client.plc_profile().await.canonical_name());
    client.close().await?;

    Ok(())
}

Text configuration should store the canonical profile exactly:

use plc_comm_slmp::SlmpPlcProfile;

let profile = SlmpPlcProfile::parse_label("melsec:iq-r")
    .expect("unknown canonical PLC profile");
assert_eq!(profile, SlmpPlcProfile::IqR);