CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-apache-plc4x--plc4j-api

Central API Module providing core interfaces and abstractions for unified access to industrial programmable logic controllers (PLCs)

Pending
Overview
Eval results
Files

connection-management.mddocs/

Connection Management

Core connection lifecycle management, driver discovery, and connection establishment with authentication support for Apache PLC4X Java API.

Capabilities

PlcDriverManager

Factory interface for discovering and creating PLC drivers and connections.

/**
 * Main factory interface for PLC driver management and connection creation
 */
public interface PlcDriverManager {
    /**
     * Get the default driver manager instance
     * @return Default PlcDriverManager implementation
     */
    static PlcDriverManager getDefault();
    
    /**
     * Get all registered protocol codes
     * @return Set of available protocol codes
     */
    Set<String> getProtocolCodes();
    
    /**
     * Get a specific driver by protocol code
     * @param protocolCode Protocol identifier (e.g., "modbus-tcp", "s7")
     * @return PlcDriver instance
     * @throws PlcConnectionException If protocol is not supported or driver cannot be created
     */
    PlcDriver getDriver(String protocolCode) throws PlcConnectionException;
    
    /**
     * Get driver for a specific connection URL
     * @param url Connection URL
     * @return PlcDriver instance
     * @throws PlcConnectionException If protocol is not supported or driver cannot be created
     */
    PlcDriver getDriverForUrl(String url) throws PlcConnectionException;
    
    /**
     * Get the connection manager interface
     * @return PlcConnectionManager instance
     */
    PlcConnectionManager getConnectionManager();
}

DefaultPlcDriverManager

Default implementation of PlcDriverManager and PlcConnectionManager.

/**
 * Default implementation providing driver discovery and connection creation
 */
public class DefaultPlcDriverManager implements PlcDriverManager, PlcConnectionManager {
    /**
     * Create driver manager using current context classloader
     */
    public DefaultPlcDriverManager();
    
    /**
     * Create driver manager with custom classloader for driver discovery
     * @param classLoader Classloader for driver discovery
     */
    public DefaultPlcDriverManager(ClassLoader classLoader);
}

PlcConnectionManager

Simplified interface for connection management.

/**
 * Interface for connection management providing methods to create and manage PLC connections
 */
public interface PlcConnectionManager {
    /**
     * Create a connection from a connection URL
     * @param url Connection URL (e.g., "modbus-tcp://192.168.1.100:502")
     * @return PlcConnection instance
     * @throws PlcConnectionException If connection cannot be established
     */
    PlcConnection getConnection(String url) throws PlcConnectionException;
    
    /**
     * Create an authenticated connection from a connection URL
     * @param url Connection URL
     * @param authentication Authentication credentials
     * @return PlcConnection instance
     * @throws PlcConnectionException If connection cannot be established
     */
    PlcConnection getConnection(String url, PlcAuthentication authentication) throws PlcConnectionException;
}

PlcConnection

Main connection interface for PLC communication.

/**
 * Main connection interface extending AutoCloseable for resource management
 */
public interface PlcConnection extends AutoCloseable {
    /**
     * Establish the connection to the PLC
     * @throws PlcConnectionException If connection fails
     */
    void connect() throws PlcConnectionException;
    
    /**
     * Check if connection is currently active
     * @return true if connected, false otherwise
     */
    boolean isConnected();
    
    /**
     * Close the connection and release resources
     * @throws Exception If closing fails
     */
    void close() throws Exception;
    
    /**
     * Parse a tag address string into a PlcTag object
     * @param tagAddress String representation of tag address
     * @return Optional PlcTag if parsing succeeds
     */
    Optional<PlcTag> parseTagAddress(String tagAddress);
    
    /**
     * Parse values for a specific tag
     * @param tag The PlcTag to parse values for
     * @param values Raw values to parse
     * @return Optional PlcValue if parsing succeeds
     */
    Optional<PlcValue> parseTagValue(PlcTag tag, Object... values);
    
    /**
     * Get connection metadata including supported capabilities
     * @return PlcConnectionMetadata with capability information
     */
    PlcConnectionMetadata getMetadata();
    
    /**
     * Ping the PLC connection
     * @return CompletableFuture with ping response
     */
    CompletableFuture<? extends PlcPingResponse> ping();
    
    /**
     * Create a read request builder
     * @return PlcReadRequest.Builder instance
     */
    PlcReadRequest.Builder readRequestBuilder();
    
    /**
     * Create a write request builder
     * @return PlcWriteRequest.Builder instance
     */
    PlcWriteRequest.Builder writeRequestBuilder();
    
    /**
     * Create a subscription request builder
     * @return PlcSubscriptionRequest.Builder instance
     */
    PlcSubscriptionRequest.Builder subscriptionRequestBuilder();
    
    /**
     * Create an unsubscription request builder
     * @return PlcUnsubscriptionRequest.Builder instance
     */
    PlcUnsubscriptionRequest.Builder unsubscriptionRequestBuilder();
    
    /**
     * Create a browse request builder
     * @return PlcBrowseRequest.Builder instance
     */
    PlcBrowseRequest.Builder browseRequestBuilder();
}

EventPlcConnection

Extended connection interface with event listener support.

/**
 * Extended connection interface for event-driven communication
 */
public interface EventPlcConnection extends PlcConnection {
    /**
     * Add an event listener for connection events
     * @param listener EventListener implementation
     */
    void addEventListener(EventListener listener);
    
    /**
     * Remove an event listener
     * @param listener EventListener to remove
     */
    void removeEventListener(EventListener listener);
}

PlcDriver

Protocol-specific driver interface.

/**
 * Protocol-specific driver interface
 */
public interface PlcDriver {
    /**
     * Get the protocol short code
     * @return Protocol identifier (e.g., "modbus-tcp", "s7")
     */
    String getProtocolCode();
    
    /**
     * Get the full protocol name
     * @return Human-readable protocol name
     */
    String getProtocolName();
    
    /**
     * Get driver metadata including capabilities
     * @return PlcDriverMetadata with driver information
     */
    PlcDriverMetadata getMetadata();
    
    /**
     * Create a connection using this driver
     * @param url Connection URL
     * @return PlcConnection instance
     * @throws PlcConnectionException If connection cannot be established
     */
    PlcConnection getConnection(String url) throws PlcConnectionException;
    
    /**
     * Create an authenticated connection using this driver
     * @param url Connection URL
     * @param authentication Authentication credentials
     * @return PlcConnection instance
     * @throws PlcConnectionException If connection cannot be established
     */
    PlcConnection getConnection(String url, PlcAuthentication authentication) throws PlcConnectionException;
    
    /**
     * Prepare a tag from an address string
     * @param tagAddress Tag address string
     * @return PlcTag instance
     * @throws PlcInvalidTagException If tag address is invalid
     */
    PlcTag prepareTag(String tagAddress) throws PlcInvalidTagException;
    
    /**
     * Create a discovery request builder for this driver
     * @return PlcDiscoveryRequest.Builder instance
     */
    PlcDiscoveryRequest.Builder discoveryRequestBuilder();
}

Usage Examples:

import org.apache.plc4x.java.DefaultPlcDriverManager;
import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.PlcConnectionManager;
import org.apache.plc4x.java.api.PlcDriverManager;
import org.apache.plc4x.java.api.authentication.PlcUsernamePasswordAuthentication;

// Basic connection
PlcDriverManager driverManager = new DefaultPlcDriverManager();
PlcConnectionManager connectionManager = driverManager.getConnectionManager();
try (PlcConnection connection = connectionManager.getConnection("modbus-tcp://192.168.1.100:502")) {
    connection.connect();
    System.out.println("Connected: " + connection.isConnected());
    
    // Use connection for operations...
    
} // Auto-close when done

// Authenticated connection
PlcUsernamePasswordAuthentication auth = new PlcUsernamePasswordAuthentication("admin", "password");
try (PlcConnection connection = connectionManager.getConnection("s7://192.168.1.200/0/1", auth)) {
    connection.connect();
    
    // Check capabilities
    if (connection.getMetadata().isReadSupported()) {
        // Perform read operations
    }
}

// Driver discovery
Set<String> protocols = driverManager.getProtocolCodes();
System.out.println("Available protocols: " + protocols);

PlcDriver modbusDriver = driverManager.getDriver("modbus-tcp");
System.out.println("Driver: " + modbusDriver.getProtocolName());

Types

Ping Operations

public interface PlcPingRequest extends PlcRequest {
    CompletableFuture<? extends PlcPingResponse> execute();
}

public interface PlcPingResponse extends PlcResponse {
    PlcRequest getRequest();
}

Metadata Types

public interface PlcConnectionMetadata {
    boolean isReadSupported();
    boolean isWriteSupported();
    boolean isSubscribeSupported();
    boolean isBrowseSupported();
}

public interface PlcDriverMetadata {
    Optional<String> getDefaultTransportCode();
    List<String> getSupportedTransportCodes();
    Optional<OptionMetadata> getProtocolConfigurationOptionMetadata();
    Optional<OptionMetadata> getTransportConfigurationOptionMetadata(String transportCode);
    boolean isDiscoverySupported();
}

Model Types

public interface PlcTag {
    String getAddressString();
    PlcValueType getPlcValueType();
    List<ArrayInfo> getArrayInfo();
}

public interface ArrayInfo {
    int getSize();
    int getLowerBound(); 
    int getUpperBound();
}

Install with Tessl CLI

npx tessl i tessl/maven-org-apache-plc4x--plc4j-api

docs

browse-operations.md

connection-management.md

exception-handling.md

index.md

read-operations.md

subscription-system.md

value-system.md

write-operations.md

tile.json