OpenPLC

OpenPLC

Open in ChatGPT
Ask ChatGPT about this page
Open in Claude
Ask Claude about this page

01 - Getting started

01 - Getting started

Step 1: install the library

Install node-uio from the ModBee libraries. The board's C++ travels inside
it, so there is nothing to install separately and nothing to keep in step.

Set the target to an ESP32-S3 board in Build Settings.

Step 2: add the UIO block

Every project needs one UIO block, and it must run before anything else that
touches I/O. It brings the board up on its first call, then on every call reads
the inputs and drives the outputs.

That is the whole reason it exists: your program sees one consistent picture of
the inputs for the whole scan, rather than values that change under it.

PROGRAM main
  VAR
    board : UIO;
  END_VAR

  board();
END_PROGRAM

READY goes true once the ADC and the DAC have both answered. If it stays
false, STATUS says why.

Step 3: read an input, drive an output

PROGRAM main
  VAR
    board : UIO;
    inputs : DIGITAL_IN;
    outputs : DIGITAL_OUT;
  END_VAR

  board();
  inputs();

  outputs(DO01 := inputs.DI01);
END_PROGRAM

Put a 24 V signal on DI01 and DO01 follows it.

The order matters: UIO first, then the blocks that read, then your logic, then
the blocks that drive. DIGITAL_OUT hands its values to the board, which drives
them on the next UIO call.

Step 4: an analog channel

  analog : ANALOG_IN;

  analog(AI01_MODE := UIO_VOLTAGE);

analog.AI01 is now volts, 0.0 to 10.0. On UIO_CURRENT it would be
milliamps, 0.0 to 20.0.

Check the channel's solder bridge matches. The mode pin only changes the
arithmetic — a channel bridged for voltage and told UIO_CURRENT gives a
confident wrong answer rather than an error. See 03 Analog.

Step 5: where to put the blocks

One task is enough to start with. UIO first in the program, and everything
else after it.

If you later split the program across two tasks — a fast one for a protocol, a
slower one for the plant logic — keep UIO and the I/O blocks together in one
of them. They are not designed to be called from two tasks at once.

What next

Last updated 2 hours ago
Was this helpful?
Thanks!