# PDComm Docs > PDComm is an industrial communication SDK and simulator for SECS/GEM, Modbus, MQTT and OPC UA. These docs cover the C, C++ and .NET APIs, tutorials and background concepts. ## Get started - [Get started](/docs/en/getting-started.md): Install the PDComm SDK, learn the shared concepts and build your first program. - [How PDComm is built](/docs/en/getting-started/background.md): Learn how the native libraries, the C, C++, and .NET bindings, the simulators, and the tools of PDComm fit together. - [Supported platforms and toolchains](/docs/en/getting-started/background/platforms.md): Operating systems and architectures for each PDComm product, and the compiler, CMake, .NET, Qt, and OpenSSL versions you need to build. - [Choose a protocol](/docs/en/getting-started/background/choosing-a-protocol.md): Pick SECS/GEM, Modbus, OPC UA, or MQTT based on the equipment and systems you connect and how they communicate. - [Ten-minute first run](/docs/en/getting-started/quickstart.md): Check the package you received, exchange your first messages with SECS/GEM or Modbus, and move on to the product quickstarts. - [PDComm tutorials](/docs/en/getting-started/tutorials.md): Follow step-by-step exercises for every PDComm product. - [PDComm guides](/docs/en/getting-started/guides.md): Tasks shared by all products, such as installing the SDK, using these docs, and licensing. - [Install the SDK](/docs/en/getting-started/guides/install-sdk.md): Check what's in the PDComm package you received, verify its integrity, and set up the library path, the license, and build settings. - [Install and check a license](/docs/en/getting-started/guides/license.md): Learn about PDComm SDK license kinds, the evaluation, SECS/GEM runtime licenses per equipment, host ids, where to put a license and how to check it, and what to do when communication is refused. - [Using these docs](/docs/en/getting-started/guides/using-these-docs.md): How these docs are organized, how to switch languages and search, and how to use the API reference, the offline copy, and the files for AI tools. - [Licenses and third-party notices](/docs/en/getting-started/guides/licenses-and-notices.md): The PDComm product license and license file, and where to find the notices of the open-source components in the packages. - [Common API reference](/docs/en/getting-started/reference.md): Look up the shared API and find the API reference of every product. - [API changelog](/docs/en/getting-started/reference/changelog.md): See which public APIs were added, changed or removed. - [PDComm troubleshooting](/docs/en/getting-started/troubleshooting.md): Fix common problems with installation, loading the native libraries, .NET, starting the Qt simulators, and licenses. ## SECS/GEM - [SECS/GEM](/docs/en/secs-gem.md): Build GEM equipment and hosts that communicate over HSMS and SECS-I. - [SECS/GEM background](/docs/en/secs-gem/background.md): Learn what SECS/GEM is, where it is used, which SEMI standards define it and what PDComm provides. - [SECS-II messages](/docs/en/secs-gem/background/secs-ii.md): Understand SEMI E5 SECS-II messages, streams and functions, the W-bit and reply rules, and how data items are encoded. - [HSMS](/docs/en/secs-gem/background/hsms.md): Learn how SEMI E37 HSMS carries SECS-II messages over TCP/IP, how the Select procedure and connection states work, and what the T3, T5, T6, T7 and T8 timers do. - [SECS-I](/docs/en/secs-gem/background/secs-i.md): Learn how SEMI E4 SECS-I sends messages as blocks over an RS-232 line, how the ENQ/EOT handshake and the T1 to T4 timers work, and how the callback-based PDComm SECS-I endpoint fits in. - [GEM state models](/docs/en/secs-gem/background/gem.md): Learn the SEMI E30 GEM communication and control state models, the S1F13, S1F15 and S1F17 messages, and how PDComm reports these states. - [GEM capabilities](/docs/en/secs-gem/background/gem-capabilities.md): Learn the SEMI E30 GEM capabilities, from data collection, event reports and alarms to remote commands, equipment constants, process programs and spooling, and the PDComm API for each. - [GEM300](/docs/en/secs-gem/background/gem300.md): Get an overview of the GEM300 standards for 300 mm fabs and learn how the declarative PDComm GEM300 capability catalog works. - [SECS/GEM quickstart](/docs/en/secs-gem/quickstart.md): Run the SDK's tutorial example as an equipment and a host and watch your first HSMS exchange. - [SECS/GEM tutorials](/docs/en/secs-gem/tutorials.md): Work through environment setup, a first exchange, each GEM capability, simulator automation and failure diagnosis, in order. - [Set up your environment](/docs/en/secs-gem/tutorials/setup.md): Learn the SECS/GEM SDK bundle layout, then build and run the C++ and C# tutorial examples on Windows, Linux or macOS to confirm your setup. - [First communication](/docs/en/secs-gem/tutorials/first-communication.md): Run a host and an equipment interactively with the C++ and C# tutorial examples, establish communication, read variables, go online and offline, and connect to the simulator GUI. - [Data collection](/docs/en/secs-gem/tutorials/data-collection.md): Work with status variables, data variables and report bindings, equipment constants (S2F13, S2F15, S2F29), variable and event directories (S1F21, S1F23) and report queries (S6F15, S6F19, S6F21) using the .NET examples. - [Reports and events](/docs/en/secs-gem/tutorials/reports-events.md): Configure event reports with S2F33, S2F35 and S2F37, then receive S6F11 event reports and acknowledge them with S6F12, using the .NET and Qt examples. - [Alarms](/docs/en/secs-gem/tutorials/alarms.md): Report alarms with S5F1, enable them with S5F3, list them with S5F5 and S5F7, and send alarm-linked event reports, using the .NET and Qt examples. - [Remote commands](/docs/en/secs-gem/tutorials/remote-commands.md): Send remote commands with S2F41 and S2F49, let the equipment validate, decide and reply, and report completion with a collection event. - [Process programs](/docs/en/secs-gem/tutorials/process-programs.md): Exchange process programs (recipes) with S7 messages, then query, verify, store, select and dry-run formatted process programs. - [Spooling](/docs/en/secs-gem/tutorials/spooling.md): Hold messages on the equipment while the host is unreachable and send them on request, using S2F43, S6F23 and a snapshot file. - [Automate the simulator and reproduce errors](/docs/en/secs-gem/tutorials/simulator-automation.md): Use the simulator in place of the other side, automate tests with headless scenarios and MCP, and reproduce connection, timeout and backpressure errors on purpose. - [Diagnose failures and ask for help](/docs/en/secs-gem/tutorials/diagnostics.md): Turn on PDCOMM_LOG diagnostics to follow HSMS state changes and timeouts, control logging from code, and prepare a minimal reproduction and the material support needs. - [SECS/GEM guides](/docs/en/secs-gem/guides.md): Look up how to use the SECS/GEM simulator GUI, the headless simulator, the MCP server and the SECS-I virtual pair. - [SECS/GEM simulator GUI](/docs/en/secs-gem/guides/simulator-gui.md): Find your way around the PDComm SECS/GEM Simulator, understand next-start reservations versus the live session catalog, and use each of its 12 workspaces. - [Headless simulator](/docs/en/secs-gem/guides/headless-simulator.md): Run built-in scenarios, test your own program against a simulated peer and replay project scenarios with pdcomm-simulator-headless, then read its JSON Lines output. - [Simulator MCP server](/docs/en/secs-gem/guides/simulator-mcp.md): Connect pdcomm-simulator-mcp or the GUI simulator's MCP modes to an AI tool or a script, and use the main tools to create sessions, establish communication, read values and inspect the trace. - [SECS-I virtual pair](/docs/en/secs-gem/guides/secs1-virtual-pair.md): Exercise SECS-I block transfer, multi-block messages, and fault injection on the simulator's virtual pair without serial hardware, then move the same flow to a real port with the SDK. - [SECS/GEM API reference](/docs/en/secs-gem/reference.md): Look up the public C, C++ and .NET APIs of SECS/GEM. - [SECS/GEM troubleshooting](/docs/en/secs-gem/troubleshooting.md): Narrow down a SECS/GEM problem by symptom, reproduce it with the smallest setup, and collect what support needs. - [Status codes and errors](/docs/en/secs-gem/troubleshooting/status-codes.md): Look up C status codes, C++ and .NET exceptions, GEM results, and HSMS event codes, and learn what to do about each. - [Connections and timeouts](/docs/en/secs-gem/troubleshooting/connection-and-timeouts.md): Diagnose refused connections, port conflicts, failed Select, session ID mismatches, and T3, T5, T6, T7, and T8 timeouts with real logs. ## Modbus - [Modbus](/docs/en/modbus.md): Build Modbus TCP, RTU and ASCII clients and servers. - [Modbus background](/docs/en/modbus/background.md): Learn what Modbus is, which specifications define it and how one request and response travel, and find the reading order for the background pages. - [Data model and addresses](/docs/en/modbus/background/data-model.md): Understand the four Modbus data tables, the one-based numbers in device manuals versus zero-based PDU addresses, big-endian encoding and 32-bit values. - [PDU, ADU and function codes](/docs/en/modbus/background/frames-and-function-codes.md): Learn the transport-independent PDU and the per-transport ADU, the 19 function codes and 15 diagnostics sub-functions PDComm supports, and exception responses. - [Modbus TCP](/docs/en/modbus/background/modbus-tcp.md): Learn the Modbus TCP MBAP header, transaction and unit identifiers, ports and connection handling, and gateways between TCP and serial buses. - [Serial line: RTU and ASCII](/docs/en/modbus/background/serial-line.md): Learn serial-line Modbus addressing and broadcasts, RTU and ASCII frames, CRC and LRC, t1.5 and t3.5 character timing, 8E1 and 7E1 character formats and RS-485 wiring. - [Modbus/TCP Security](/docs/en/modbus/background/tcp-security.md): Learn how Modbus/TCP Security uses mutual TLS authentication, the X.509 role extension and role-based authorization, which certificates you need and how PDComm configures them. - [PDComm Modbus features](/docs/en/modbus/background/pdcomm-support.md): See which transports, roles, function codes and security features the PDComm Modbus SDK supports, its settings, how its endpoints behave and how to check the features of a build. - [Modbus quickstart](/docs/en/modbus/quickstart.md): Start a local Modbus TCP server, then write 42 to holding register 0 and read it back with the C++ or C# example console. - [Modbus tutorials](/docs/en/modbus/tutorials.md): Work through Modbus step by step, from device-free local practice to TCP, RTU and ASCII, gateways, Security, simulator workflows and failure diagnosis. - [Observe addresses and frames](/docs/en/modbus/tutorials/addresses-and-frames.md): Without any device, convert manual addresses to PDUs in the headless simulator, decode TCP, RTU and ASCII frames, and reproduce CRC, LRC and RTU timing errors. - [A closer look at the first TCP exchange](/docs/en/modbus/tutorials/first-tcp-exchange.md): Learn the SDK layout, API layers, handle ownership and threading rules, then use a headless server with a C++ or C# client to see writes, exceptions, errors and a lost connection. - [The 19 function codes and diagnostics](/docs/en/modbus/tutorials/function-codes-and-diagnostics.md): Prepare a disconnected RTU server model, then run the 19 function codes and 15 diagnostics sub-functions PDComm supports, listen-only mode, broadcasts and exception responses one by one. - [RTU and ASCII communication](/docs/en/modbus/tutorials/rtu-and-ascii.md): Connect an RTU server and client through a pair of PDComm virtual serial ports, practice serial-only functions, broadcasts, raw frames, CRC fault injection and ASCII, and learn how to connect a real device. - [TCP-to-serial gateway](/docs/en/modbus/tutorials/serial-gateway.md): Forward Modbus TCP requests to an RTU serial device with a PDComm gateway, and use virtual serial ports to see the unit route table, exceptions 0A and 0B and the serial-side frames. - [Modbus/TCP Security](/docs/en/modbus/tutorials/tcp-security.md): Create a test CA and role certificates with OpenSSL, then use a C++ client to try per-role function permissions, certificate validation failures, authentication-only mode and CRL revocation on a TLS server. - [Build a test workflow with the simulators](/docs/en/modbus/tutorials/simulator-workflows.md): Use the GUI simulator as a TCP server, save its state as a project file, replay it in the headless simulator, turn it into a scenario regression test and call the same commands through MCP. - [Diagnose failures and report them](/docs/en/modbus/tutorials/diagnose-and-report.md): Find the failing layer, reduce it to a minimal reproduction, collect PDCOMM_LOG diagnostic logs plus trace, state, diagnostics and the project, analyze a timeout and fill in the support request template. - [Modbus guides](/docs/en/modbus/guides.md): Find task-oriented guides for the Modbus simulator GUI, headless runs and scenarios, the MCP server, serial ports, JSON commands and Qt and MFC integration. - [The simulator GUI](/docs/en/modbus/guides/simulator-gui.md): Learn the six tabs of the PDComm Modbus Simulator (Connection, Request, Data, Diagnostics, Trace / Fault, Security), the Project menu and the status line messages, with screenshots. - [Headless runs and scenarios](/docs/en/modbus/guides/headless-and-scenarios.md): Use pdcomm-modbus-headless with JSON lines and exit codes, in pipes, with scenario files for regression tests, and learn the project file format and its validation rules. - [The MCP server](/docs/en/modbus/guides/mcp-server.md): Connect pdcomm-modbus-mcp to AI tools, see its modbus_ tools, follow a JSON-RPC session, tell its error layers apart and take care with real devices. - [Configure serial ports](/docs/en/modbus/guides/serial-ports.md): Learn the RTU and ASCII configuration members and allowed combinations, port names per OS, PDComm virtual serial ports, USB adapter latency and driver behavior, wiring and how to choose timeouts. - [JSON command reference](/docs/en/modbus/guides/json-commands.md): Look up the 22 Modbus service commands shared by the SDK, GUI, headless simulator and MCP server, and the JSON formats of the configuration, data model, trace and projects. - [Use the SDK from Qt and MFC](/docs/en/modbus/guides/qt-and-mfc.md): Keep Modbus endpoints on worker threads in GUI applications, with a worker-thread example for the Qt adapter QtEndpoint and usage of the MFC adapter MfcEndpoint. - [Modbus API reference](/docs/en/modbus/reference.md): Look up the public C, C++ and .NET APIs of Modbus. - [Modbus troubleshooting](/docs/en/modbus/troubleshooting.md): Find the right page for a failing Modbus exchange by its symptom, narrow the problem down in order and collect what support needs. - [Exception responses](/docs/en/modbus/troubleshooting/exception-responses.md): For Modbus exception codes 01, 02, 03, 04, 05, 06, 08, 0A and 0B, see when a PDComm server or gateway sends them, what to check when a real device does, and how a client handles the result. - [Service errors and timeouts](/docs/en/modbus/troubleshooting/service-errors.md): Look up the error messages PDComm Modbus returns, grouped by command format, configuration, connection, transaction, data model, projects and logging, and learn how to diagnose timeouts and wrong addresses. - [Serial communication problems](/docs/en/modbus/troubleshooting/serial-errors.md): When RTU or ASCII gets no response or CRC and LRC errors, check settings, wiring, addresses, parity and timing in order, and narrow the cause down with diagnostics counters and traces. - [Security connection problems](/docs/en/modbus/troubleshooting/tls-errors.md): Tell apart and fix Modbus/TCP Security certificate file errors, TLS handshake failures, host name and mode mismatches, revocation and role denials by their actual error messages. ## MQTT - [MQTT](/docs/en/mqtt.md): Publish and subscribe to OPC UA PubSub data through an MQTT broker with the PDComm OPC UA simulator. - [MQTT background](/docs/en/mqtt/background.md): The MQTT standards, the core concepts and how far PDComm uses MQTT. - [Publish/subscribe and topics](/docs/en/mqtt/background/publish-subscribe.md): How a broker routes messages by topic, and how to name topics, use wildcards and design a topic tree. - [QoS and retained messages](/docs/en/mqtt/background/qos-and-retain.md): The packet flows and delivery guarantees of QoS 0, 1 and 2, message order, and how retained messages behave. - [Sessions, keep alive and Will](/docs/en/mqtt/background/sessions.md): How session state, Clean Session, Session Expiry, keep alive and Will messages shape the life of a connection. - [MQTT 5.0 features](/docs/en/mqtt/background/mqtt5.md): Properties, reason codes, topic aliases, user properties and flow control in MQTT 5.0. - [TLS and authentication](/docs/en/mqtt/background/security.md): Protect MQTT connections with TLS, authenticate clients and split topic permissions. - [MQTT in PDComm](/docs/en/mqtt/background/pdcomm-mqtt.md): Where you use MQTT in PDComm and how the simulator connects to a broker. - [MQTT quickstart](/docs/en/mqtt/quickstart.md): Publish an OPC UA PubSub message through a local Mosquitto broker with the headless simulator and receive it back. - [MQTT tutorials](/docs/en/mqtt/tutorials.md): Work through a local broker, simulator publishing and subscribing, PubSub between processes, and a TLS connection. - [Run a local Mosquitto broker](/docs/en/mqtt/tutorials/local-broker.md): Run Mosquitto from a configuration file and use the Mosquitto clients to see QoS flows, retained messages and Will messages. - [Publish and subscribe with the simulator](/docs/en/mqtt/tutorials/simulator-publish-subscribe.md): Inspect the MQTT 5.0 messages the simulator sends, and find out when the simulator accepts messages from other MQTT tools. - [OPC UA PubSub over MQTT](/docs/en/mqtt/tutorials/opcua-pubsub-over-mqtt.md): Run a publisher simulator, an MQTT broker and a subscriber simulator as separate processes and carry OPC UA PubSub data end to end. - [Connect through a TLS broker](/docs/en/mqtt/tutorials/tls-bridge.md): Build a TLS broker that requires client certificates, and carry simulator data to it through the TLS bridge of a local broker. - [MQTT guides](/docs/en/mqtt/guides.md): Broker configuration, the PubSub tab of the simulator GUI, headless and MCP use, and verification tools. - [Broker configuration](/docs/en/mqtt/guides/broker-configuration.md): What an MQTT broker needs to work with the PDComm simulator, and how each Mosquitto setting affects it. - [The simulator PubSub tab](/docs/en/mqtt/guides/simulator-pubsub.md): Set up UADP over MQTT on the PubSub tab of the OPC UA simulator GUI, and read its publish and receive results and errors. - [Headless and MCP](/docs/en/mqtt/guides/headless-and-mcp.md): The commands, configuration keys and status values for automating PubSub over MQTT with pdcomm-opcua-headless and pdcomm-opcua-mcp. - [Verification tools](/docs/en/mqtt/guides/verification-tools.md): Check MQTT traffic with mosquitto_sub, mosquitto_pub, broker logs, $SYS topics, and the simulator status and trace. - [MQTT API reference](/docs/en/mqtt/reference.md): You use MQTT in PDComm through the OPC UA simulator programs; the headless and MCP guide lists their commands and result values. - [MQTT troubleshooting](/docs/en/mqtt/troubleshooting.md): Where the PubSub over MQTT errors of the simulator appear, and which page covers each symptom. - [Connection problems](/docs/en/mqtt/troubleshooting/connection.md): Error messages, CONNACK reason codes and fixes for when the simulator can't connect to an MQTT broker or loses the connection. - [TLS problems](/docs/en/mqtt/troubleshooting/tls.md): Find and fix errors with TLS brokers, client certificates and TLS bridges from the client output and the broker log. - [Delivery problems](/docs/en/mqtt/troubleshooting/delivery.md): Causes and fixes for messages that don't arrive or are rejected, publications that fail, and QoS or retained-message surprises. ## OPC UA - [OPC UA](/docs/en/opc-ua.md): Build and test OPC UA clients, servers and PubSub with the PDComm OPC UA SDK and simulator. - [OPC UA overview](/docs/en/opc-ua/background.md): Learn how the OPC UA standard is organized, which two communication models it defines and what the parts of PDComm OPC UA do. - [Information model](/docs/en/opc-ua/background/information-model.md): Understand the nodes, NodeClasses, NodeIds and namespaces, references, type system, variables, DataValue and StatusCode that make up an address space. - [Services](/docs/en/opc-ua/background/services.md): Follow how a client opens a secure channel and a session and calls services, and see the service sets, the UA Binary message layout and how the PDComm C ABI maps them. - [Security](/docs/en/opc-ua/background/security.md): Learn OPC UA security policies and modes, application instance certificates and trust, and user identity tokens as PDComm implements them. - [Subscriptions and the publish cycle](/docs/en/opc-ua/background/subscriptions.md): Understand subscriptions and monitored items, sampling and publishing intervals, Publish requests and keep-alives, sequence numbers and Republish. - [Events, alarms and conditions](/docs/en/opc-ua/background/events-alarms.md): Learn about events and event notifiers, EventFilter, the states of Alarms and Conditions and the Acknowledge, Confirm and ConditionRefresh methods. - [Historical access](/docs/en/opc-ua/background/history.md): Learn the HistoryRead service, ReadRawModifiedDetails, which timestamps to return, continuation points and releasing them, and the status bits of history values. - [PubSub](/docs/en/opc-ua/background/pubsub.md): Learn about OPC UA PubSub publishers and subscribers, DataSets and groups, UADP and JSON messages, UDP and MQTT transports and SKS key distribution. - [OPC UA quickstart](/docs/en/opc-ua/quickstart.md): Create certificates with the installed OPC UA SDK, open your first secure connection to the example server and read and write a value. - [OPC UA tutorials](/docs/en/opc-ua/tutorials.md): Find step-by-step projects from PKI setup through C, C++, Qt, .NET and MFC clients to subscriptions, events, history and PubSub, and set up the shared lab. - [PKI and trust setup](/docs/en/opc-ua/tutorials/pki-trust.md): Create server and client application instance certificates with OpenSSL, inspect them and see what happens when trust is right and when it's wrong. - [C client](/docs/en/opc-ua/tutorials/c-client.md): Open a secure session with the PDComm OPC UA C ABI and run Read and Write, Browse and Call as UA Binary requests. - [C++ client and server](/docs/en/opc-ua/tutorials/cpp-client-server.md): Build an OPC UA server with variables using the header-only C++ RAII wrapper, then connect a client to read and write values. - [Qt client worker](/docs/en/opc-ua/tutorials/qt-client-worker.md): Run an OPC UA client on its own thread with the QtCore qt_client_worker and receive responses and failures through queued signals. - [.NET](/docs/en/opc-ua/tutorials/dotnet.md): Build a secure OPC UA server and client with the PDComm.OpcUa .NET assembly, then build and run the example against the installed SDK. - [MFC worker](/docs/en/opc-ua/tutorials/mfc-worker.md): Learn how MfcClientWorker runs an OPC UA client on a worker thread in a Windows MFC application and delivers events through a window message, and how to build it. - [Subscriptions](/docs/en/opc-ua/tutorials/subscriptions.md): Create a subscription and monitored items with the headless simulator, receive data change notifications with Publish and delete the subscription. - [Events and alarms](/docs/en/opc-ua/tutorials/events-alarms.md): Subscribe to the Server object's events with the headless simulator, activate an alarm and run Acknowledge, Confirm and ConditionRefresh in turn. - [History](/docs/en/opc-ua/tutorials/history.md): Record variable values with the headless simulator, read raw history and use continuation points to get or release the remaining values. - [PubSub over UDP](/docs/en/opc-ua/tutorials/pubsub-udp.md): Publish UADP DataSet messages over UDP unicast with the headless simulator and subscribe to them in the same process and in another process. - [PubSub over MQTT](/docs/en/opc-ua/tutorials/pubsub-mqtt.md): Publish and subscribe to UADP DataSet messages through an MQTT broker, using two headless simulators as publisher and subscriber. - [OPC UA guides](/docs/en/opc-ua/guides.md): Use the OPC UA simulator GUI, run it headless, connect its MCP server and configure security and users. - [Simulator GUI](/docs/en/opc-ua/guides/simulator-gui.md): Start a server, connect, read and write, subscribe, and work with events, history, PubSub and diagnostics in the eight workspaces of the PDComm OPC UA Simulator. - [Headless simulator](/docs/en/opc-ua/guides/headless.md): Run pdcomm-opcua-headless in interactive JSON-lines mode or scenario mode, and look up the configuration object and every action's arguments. - [MCP server](/docs/en/opc-ua/guides/mcp.md): Connect pdcomm-opcua-mcp to an AI tool so it can run the OPC UA simulator's server, client, subscription, event, history and PubSub actions as tool calls. - [Configure security and users](/docs/en/opc-ua/guides/security-users.md): Configure the secure endpoints, certificates, trust lists and user account of the simulator's server, and review the SDK's security options and user authentication function. - [OPC UA API reference](/docs/en/opc-ua/reference.md): Look up the public C, C++ and .NET APIs of OPC UA. - [OPC UA troubleshooting](/docs/en/opc-ua/troubleshooting.md): Narrow down why an OPC UA connection or service fails, and fix the error texts you meet most often. - [StatusCode catalog](/docs/en/opc-ua/troubleshooting/status-codes.md): Look up the C ABI statuses, OPC UA StatusCodes and security error names you meet in the PDComm OPC UA SDK and simulator, and how to fix them. - [Certificate problems](/docs/en/opc-ua/troubleshooting/certificates.md): Find the causes of trust, host name, ApplicationUri and validity errors, fix them, and prepare for Windows clients that use the computer name. - [Timeouts and diagnostics](/docs/en/opc-ua/troubleshooting/timeouts-diagnostics.md): Understand how the SDK and the simulator handle timeouts, cancel requests, read error texts and response metadata, and use the simulator's action record, audit record and diagnostic log. ## Tools - [Tools](/docs/en/tools.md): Use virtual serial ports, diagnostic logging, and the docs CLI and MCP server. - [Tools background](/docs/en/tools/background.md): Learn the concepts behind virtual serial ports and diagnostic logging. - [How virtual serial ports work](/docs/en/tools/background/virtual-serial.md): Learn how virtual ports, wiring, modem signals, and fault injection let you test serial communication without devices or cables. - [How structured diagnostic logs work](/docs/en/tools/background/structured-logging.md): Understand the opt-in JSON Lines diagnostic logs of the PDComm SDKs and simulators, their correlation IDs, rotation, and loss accounting. - [Tools quickstart](/docs/en/tools/quickstart.md): Create a virtual null-modem pair, send bytes across it, and inject a fault. - [Tools tutorials](/docs/en/tools/tutorials.md): Follow step-by-step projects that use the PDComm tools. - [Test Modbus RTU on a virtual RS-485 bus](/docs/en/tools/tutorials/modbus-rtu-on-a-virtual-bus.md): Connect two Modbus RTU servers and a client to a virtual two-wire RS-485 bus, then test a broadcast, a parity error, and an unplugged cable. - [Capture and read a diagnostic log](/docs/en/tools/tutorials/capture-a-diagnostic-log.md): Turn on the diagnostic log in a Modbus SDK example and in the headless simulator, group the records by request, and find the cause of a timeout. - [Tools guides](/docs/en/tools/guides.md): Use virtual serial ports, diagnostic logging, and the docs CLI and MCP server. - [Install virtual serial ports](/docs/en/tools/guides/install-virtual-serial.md): Install the virtual serial port driver with the Windows MSI or the Linux DKMS package, or use pseudo terminal mode on macOS. - [pdcomm-vserial commands and lab files](/docs/en/tools/guides/virtual-serial-cli.md): Reference for the pdcomm-vserial commands, the control commands of a running lab, exit codes, and every setting of a lab JSON file. - [Virtual serial manager](/docs/en/tools/guides/virtual-serial-manager.md): Edit and run labs, inject faults, and unplug cables from the pdcomm-vserial-manager GUI. - [Control virtual serial ports over MCP](/docs/en/tools/guides/virtual-serial-mcp.md): Connect the pdcomm-vserial-mcp server to an AI tool to validate, start, control, and stop labs. - [Use virtual ports with Modbus RTU, ASCII, and SECS-I](/docs/en/tools/guides/serial-protocols.md): Line settings and connection steps for running the Modbus serial and SECS-I exercises on virtual serial ports instead of real equipment. - [Use diagnostic logging](/docs/en/tools/guides/diagnostic-logging.md): Turn diagnostic logs on and off with environment variables, the C, C++, and .NET APIs, or simulator actions, and forward them to a collector such as Fluent Bit. - [Use the docs from AI tools](/docs/en/tools/guides/docs-for-ai-tools.md): Let Claude Code, Cursor, and other AI tools search and read the PDComm docs through the pdcomm-docs CLI and MCP server. - [pdcomm-docs command reference](/docs/en/tools/guides/docs-cli.md): Reference for the pdcomm-docs search, get, api, list, serve, and mcp commands, their options, output, and exit codes. - [Tools API reference](/docs/en/tools/reference.md): Look up the public C, C++ and .NET APIs of the virtual serial ports. - [Tools troubleshooting](/docs/en/tools/troubleshooting.md): Find and fix common errors with virtual serial ports, diagnostic logging, and the docs CLI. ## Optional - [Complete documentation](/docs/en/llms-full.txt): Every English page in one Markdown file. - [한국어 문서](/docs/llms.txt)