YAML Project Format
irBoard projects can be created and edited using YAML text files. This format is designed to be human-readable and AI-friendly, enabling automated project generation.
Projects are imported via the
Project Settings
inspector in the editing screen, or from the toolbar on the project list screen.
Select "Import from YAML" to import a folder containing a YAML project file,
or select a project.yaml file directly.
YAML Basics
YAML (YAML Ain't Markup Language) is a text format for representing structured data. It uses indentation (spaces) to express hierarchy, making it easy to read and write without special tools.
Key-Value Pairs
Basic data is written as key: value pairs:
name: "My Project" rotation_type: 1 enabled: true
Indentation = Nesting
Nested structures are expressed by indenting with spaces (2 spaces per level):
plc:
provider: KEYENCE
config:
ip_or_hostname: "192.168.0.10"
port_no: 8501
Lists (Arrays)
List items start with - (hyphen + space):
pages:
- uuid: "page-001"
page_no: 1
title: Main
- uuid: "page-002"
page_no: 2
title: Settings
Data Types
| Type | Example | Notes |
|---|---|---|
| String | "Hello" or Hello |
Quotes required if the value contains :, #, or special characters. |
| Integer | 42 |
Written without quotes. |
| Float | 3.14 |
Written without quotes. |
| Boolean | true / false |
Written without quotes. |
Comments
Lines starting with # are comments and ignored:
# This is a comment name: "My Project" # Inline comments are also supported
Folder Structure
A YAML project is a folder containing a project.yaml file and an optional images/ subfolder:
ProjectName/
project.yaml # Project configuration (required)
images/ # Image files (optional)
{uuid}.png # Background images referenced by uuid
The project.yaml file contains all project settings, pages, items, and configurations.
Images referenced in the project (background images for project, pages, or items) are stored as PNG files in the images/ folder, named by their UUID.
Minimal Example
Here is a minimal working project with one page containing a label and a button:
uuid: "00000000-0000-0000-0000-000000000001"
name: "My Project"
screen_size_string: "768x1024"
rotation_type: 1
plc:
model: KV-8000
provider: KEYENCE
plc_channel:
config:
ip_or_hostname: "192.168.0.10"
port_no: 8501
pages:
- uuid: "00000000-0000-0000-0000-100000000001"
page_no: 1
title: Main
items:
- uuid: "00000000-0000-0000-0000-200000000001"
class: Label
frame_string: "{{50, 50}, {200, 40}}"
title: Temperature
text_color_name: "RGBA,0.0,0.0,0.0,1.0"
- uuid: "00000000-0000-0000-0000-200000000002"
class: Button
frame_string: "{{50, 120}, {120, 50}}"
title: Start
switch_device_name: MR100
switch_mode: momentary
Required fields: plc and pages are mandatory.
Import will fail with an error if the plc section is missing.
uuid and name are optional and will be auto-generated if omitted.
Each page's uuid and page_no are also auto-filled if omitted.
Each item's uuid and frame_string are optional (defaults will be applied).
class is required, but lowercase or alternative names (e.g., gauge, slider, alarm, grid) are accepted.
Project Properties
Top-level properties that configure the overall project:
| Property | Type | Description |
|---|---|---|
uuid |
String | Auto Unique identifier (UUID format). Auto-generated if omitted. |
name |
String | Auto Project name. Auto-generated if omitted. |
plc |
Object | Required PLC configuration. Import fails if omitted. |
pages |
Array | Required List of pages. |
screen_size_string |
String | Screen size as "WIDTHxHEIGHT" (e.g., "768x1024"). |
rotation_type |
Integer | Screen rotation. 0=portrait, 1=landscape. |
style |
String | Project style. "default" or "dark". |
background_color_name |
String | Default background color. See Color Format section. |
launch_page_no |
Integer | Page number to show at startup. |
page_scale_type |
Integer | How pages scale on different screens. 0=center, 1=fit, 2=fill. |
transition |
String | Page transition animation style. |
text_font_name |
String | Default text font name. |
text_font_size |
Float | Default text font size. |
number_font_name |
String | Default font for numeric display. |
number_font_size |
Float | Default font size for numeric display. |
Grid Configuration
grid: style: 1 enabled: 1 pixel: 10.0
| Property | Type | Description |
|---|---|---|
style |
Integer | Grid style. 0=dots, 1=lines. |
enabled |
Integer | 1=grid visible, 0=hidden. |
pixel |
Float | Grid spacing in points. |
PLC Configuration
The plc section configures the PLC connection. This section is required. Import will fail if it is omitted.
For supported PLC providers and models, see the
PLC Connection
documentation.
KEYENCE Example
plc:
model: KV-8000
provider: KEYENCE
plc_channel:
config:
ip_or_hostname: "192.168.0.10"
port_no: 8501
Mitsubishi (MC Protocol) Example
plc:
model: iQ-R
provider: MITSUBISHI
plc_channel:
config:
ip_or_hostname: "192.168.0.10"
port_no: 5000
OMRON (FINS) Example
plc:
model: NJ
provider: OMRON
plc_channel:
config:
ip_or_hostname: "192.168.0.10"
port_no: 9600
self_node: 0
destination_node: 0
MODBUS/TCP Example
plc:
model: MODBUS
provider: MODBUS
plc_channel:
config:
ip_or_hostname: "192.168.0.10"
port_no: 502
unit_id: 1
PLC Provider / Model / Channel Reference
| Provider | Models | Default Port |
|---|---|---|
| KEYENCE | KV-8000, KV-7500, KV-5500, KV-5000, KV-3000, KV-1000, KV-Nano | 8501 |
| MITSUBISHI | iQ-R, iQ-F, Q, L, FX5, FX3 | 5000 |
| OMRON | NJ, NX, CJ2, CJ1, CP1, CP2 | 9600 |
| YOKOGAWA | FA-M3 | 12289 |
| MODBUS | MODBUS | 502 |
Config Options
| Property | Type | Description |
|---|---|---|
monitor_interval |
Float | Polling interval in seconds (default: 0.5). |
button_default_delay |
Float | Default button press delay in seconds. |
slider_default_delay |
Float | Default slider operation delay in seconds. |
area_permission |
String | Permission area device address. |
use_area_permission |
Boolean | Enable permission area. |
area_to_plc_screen_no |
String | Device address to send current screen number to PLC. |
use_area_to_plc_screen_no |
Boolean | Enable screen number notification to PLC. |
area_to_plc_status |
String | Device address to send irBoard status to PLC. |
use_area_to_plc_status |
Boolean | Enable status notification to PLC. |
area_from_plc_screen_no |
String | Device address to receive screen number from PLC. |
use_area_from_plc_screen_no |
Boolean | Enable screen number reception from PLC. |
area_from_plc_status |
String | Device address to receive status from PLC. |
use_area_from_plc_status |
Boolean | Enable status reception from PLC. |
Page Properties
pages:
- uuid: "page-uuid-1"
page_no: 1
title: Main
background_color_name: "RGBA,0.95,0.95,0.95,1.0"
items:
- ...
| Property | Type | Description |
|---|---|---|
uuid |
String | Auto Unique identifier. Auto-generated if omitted. |
page_no |
Integer | Auto Page number (1-based). Auto-filled if omitted. |
title |
String | Page title. |
background_color_name |
String | Page background color. |
locked |
Integer | 1=locked (not editable at runtime), 0=unlocked. |
rotation_type |
Integer | Page-specific rotation override. |
background_image |
Object | Background image reference ({uuid, kind}). |
items |
Array | List of page items. |
Page Navigation (Swipe)
Pages can be linked for swipe navigation using UUID references:
| Property | Type | Description |
|---|---|---|
above_page_uuid |
String | UUID of page when swiping up. |
below_page_uuid |
String | UUID of page when swiping down. |
left_page_uuid |
String | UUID of page when swiping left. |
right_page_uuid |
String | UUID of page when swiping right. |
Item Types
Each item has a class field that determines its type:
| class | Description | Key Properties |
|---|---|---|
Label |
Text display | title, text_color_name |
Button |
Interactive button with lamp | switch_device_name, switch_mode, lamp_device_name |
Button (no switch) |
Status indicator | lamp_device_name, lamp_color_name |
ValueField |
Numeric/text display and input | device_name, editable, decimal_place, unit |
SteppedValueField |
Value with +/- buttons (Slider / Progress) | device_name, step_value, min_value, max_value |
Meter |
Analog gauge display | device_name, min_value, max_value, figures |
Message |
Message list display | message_set_uuid |
Matrix |
Table/grid layout | matrix_rows, matrix_columns, matrix_device_offset |
WebPage |
Embedded web browser | url |
Common Item Properties
All items share these common properties:
| Property | Type | Description |
|---|---|---|
uuid |
String | Auto Unique identifier. Auto-generated if omitted. |
class |
String | Required Item type. See Item Types table. Lowercase and alternative names are accepted (e.g., gauge→Meter, alarm→Message, grid→Matrix, slider→Slider, progress_bar→Progress, value_field→ValueField, web_page→WebPage). |
frame_string |
String | Auto Position and size. Defaults to class-appropriate size if omitted. Format: "{{x, y}, {width, height}}" or "x, y, width, height" |
title |
String | Display text. |
device_name |
String | Primary PLC device address. |
background_color_name |
String | Background color. |
line_color_name |
String | Border color. |
line_width |
Float | Border width. |
corner_radius |
Integer | Corner rounding radius. |
style |
String | Visual style (varies by item type). |
font_name |
String | Font name override. |
font_size |
Float | Font size override. |
alignment |
Integer | Text alignment. 0=left, 1=center, 2=right. |
padding |
Integer | Internal padding. |
locked_frame |
Integer | 1=frame locked, 0=editable. |
visible_device_name |
String | Device that controls visibility. |
visible_negative |
Integer | 1=invert visibility condition. |
alternate_title |
String | Alternate title (for toggle state). |
Label
Displays static or device-driven text.
- uuid: "label-uuid"
class: Label
frame_string: "{{50, 50}, {200, 40}}"
title: Temperature
text_color_name: "RGBA,0.0,0.0,0.0,1.0"
background_color_name: "RGBA,0.9,0.9,0.9,1.0"
alignment: 1
font_size: 18.0
| Property | Type | Description |
|---|---|---|
text_color_name |
String | Text color. |
alternate_text_color_name |
String | Text color in alternate state. |
label_device_name |
String | Device controlling label state (ON/OFF appearance). |
label_negative |
Integer | 1=invert label device condition. |
Button
Interactive button that can toggle PLC devices and display lamp states. If no switch device is specified, it behaves as a lamp indicator.
- uuid: "button-uuid"
class: Button
frame_string: "{{50, 100}, {120, 50}}"
title: Start
alternate_title: Stop
switch_device_name: MR100
switch_mode: momentary
lamp_device_name: MR100
lamp_color_name: "RGBA,0.0,0.8,0.0,1.0"
style: irPanel
Switch Properties
| Property | Type | Description |
|---|---|---|
switch_device_name |
String | Bit device to toggle when pressed. |
switch_mode |
String | "momentary" (ON while pressed) or "alternate" (toggle ON/OFF). |
switch_negative |
Integer | 1=invert switch output. |
delay_time |
Double | Delay before sending command (seconds). |
interlock_device_name |
String | Device that must be ON to enable button. |
interlock_negative |
Integer | 1=invert interlock condition. |
Lamp Properties
| Property | Type | Description |
|---|---|---|
lamp_device_name |
String | Bit device to monitor for lamp state. |
lamp_color_name |
String | Color when lamp is ON. |
alternate_lamp_color_name |
String | Color when lamp is OFF. |
lamp_negative |
Integer | 1=invert lamp condition. |
Page Navigation
| Property | Type | Description |
|---|---|---|
page_uuid |
String | UUID of page to navigate to when pressed. |
page_no |
Integer | Page number to navigate to. |
Button Style
| Property | Type | Description |
|---|---|---|
style |
String | "irPanel", "Square", "Circle", "Touch", "Plane", "Toggle". Case is auto-corrected. |
Value Field
Displays and optionally edits numeric or text values from PLC devices.
- uuid: "value-uuid"
class: ValueField
frame_string: "{{300, 100}, {150, 40}}"
title: Temperature
device_name: DM100
editable: 0
decimal_place: 1
unit: "\u00B0C"
number_type: 2
min_value: 0.0
max_value: 999.0
text_color_name: "RGBA,0.0,0.0,0.0,1.0"
field_background_color_name: "RGBA,1.0,1.0,1.0,1.0"
| Property | Type | Description |
|---|---|---|
device_name |
String | Word device to read/write value. |
editable |
Integer | 0=read-only, 1=editable at runtime. |
number_type |
Integer | 0=unsigned 16-bit, 1=signed 16-bit, 2=unsigned 32-bit, 3=signed 32-bit, 4=float, 5=double, 6=BCD, 10=string. |
decimal_place |
Integer | Number of decimal places to display. |
unit |
String | Unit suffix (e.g., "\u00B0C", "kg", "%"). |
coefficient |
Float | Scaling multiplier (displayed = raw * coefficient + offset). |
offset |
Float | Value offset. |
min_value |
Double | Minimum allowed value. |
max_value |
Double | Maximum allowed value. |
field_background_color_name |
String | Input field background color. |
text_color_name |
String | Text color for displayed value. |
unit_color_name |
String | Color for unit text. |
border_style |
Integer | 0=none, 1=line, 2=bezel, 3=rounded. |
encoding |
Integer | Text encoding for string type. 1=UTF-8. |
text_length |
Integer | Max text length for string type. |
secret |
Boolean | true=hide input (password field). |
Stepped Value Field (Slider / Progress)
A value field with increment/decrement buttons, or displayed as a slider or progress bar.
- uuid: "slider-uuid"
class: SteppedValueField
frame_string: "{{50, 200}, {300, 40}}"
title: Speed
device_name: DM200
step_value: 1.0
min_value: 0.0
max_value: 100.0
style: slider
| Property | Type | Description |
|---|---|---|
step_value |
Double | Increment/decrement amount per step. |
style |
String | "default" (buttons), "slider", "progress". |
vertical |
Boolean | true=vertical orientation. |
continuous |
Boolean | true=continuously change while button held. |
Inherits all Value Field properties (device_name, min_value, max_value, number_type, etc.).
Meter
Analog gauge display that reads a PLC device value.
- uuid: "meter-uuid"
class: Meter
frame_string: "{{50, 300}, {200, 200}}"
title: Pressure
device_name: DM300
min_value: 0.0
max_value: 100.0
figures: 5
major: 20
minor: 10
unit: MPa
decimal_place: 1
| Property | Type | Description |
|---|---|---|
min_value |
Double | Minimum scale value. |
max_value |
Double | Maximum scale value. |
figures |
Integer | Number of scale labels. |
major |
Integer | Major tick interval. |
minor |
Integer | Minor tick interval. |
meter_zones |
Array | Color zones on the meter. |
Meter Zones
meter_zones:
- color_name: "RGBA,0.0,0.8,0.0,1.0"
from_value: 0.0
to_value: 60.0
- color_name: "RGBA,1.0,0.8,0.0,1.0"
from_value: 60.0
to_value: 80.0
- color_name: "RGBA,1.0,0.0,0.0,1.0"
from_value: 80.0
to_value: 100.0
Lamp (Status Indicator)
A standalone status indicator. Uses the same class as Button (Button) but without a switch device, acting as a lamp indicator.
- uuid: "lamp-uuid"
class: Button
frame_string: "{{300, 50}, {60, 60}}"
title: Running
lamp_device_name: MR200
lamp_color_name: "RGBA,0.0,0.8,0.0,1.0"
alternate_lamp_color_name: "RGBA,0.5,0.5,0.5,1.0"
style: Circle
Uses the same lamp properties as Button (lamp_device_name, lamp_color_name, lamp_negative, etc.).
Omit switch_device_name to make it a lamp indicator.
Message
Displays a list of messages from a message set. Messages are activated based on PLC device values.
- uuid: "message-uuid"
class: Message
frame_string: "{{50, 400}, {400, 200}}"
message_set_uuid: "msgset-uuid-1"
active_color_name: "RGBA,1.0,0.0,0.0,1.0"
inactive_color_name: "RGBA,0.9,0.9,0.9,1.0"
active_only: true
| Property | Type | Description |
|---|---|---|
message_set_uuid |
String | UUID of the message set to display. |
active_color_name |
String | Background color for active messages. |
inactive_color_name |
String | Background color for inactive messages. |
active_text_color_name |
String | Text color for active messages. |
inactive_text_color_name |
String | Text color for inactive messages. |
active_only |
Boolean | true=show only active messages. |
row_height |
Integer | Height of each message row. |
show_detail |
Boolean | true=show detail text. |
show_title |
Boolean | true=show message set title header. |
Matrix
A table/grid layout that repeats a template item across rows and columns with device address offsets. For full matrix documentation, see Matrix .
- uuid: "matrix-uuid"
class: Matrix
frame_string: "{{50, 50}, {600, 400}}"
matrix_rows: 5
matrix_columns: 3
matrix_device_offset: 10
matrix_add_borders: true
matrix_border_color_name: "RGBA,0.7,0.7,0.7,1.0"
matrix_has_column_header: true
matrix_has_row_header: true
| Property | Type | Description |
|---|---|---|
matrix_rows |
Integer | Number of data rows. |
matrix_columns |
Integer | Number of data columns. |
matrix_device_offset |
Integer | Device address increment between rows. |
matrix_add_borders |
Boolean | true=add borders around cells. |
matrix_border_color_name |
String | Border color. |
matrix_border_width |
Float | Border width. |
matrix_has_column_header |
Boolean | true=include column headers. |
matrix_has_row_header |
Boolean | true=include row headers. |
matrix_cell_bg_color_name |
String | Default cell background color. |
matrix_alt_bg_color_name |
String | Alternating row background color. |
matrix_column_header_bg_color_name |
String | Column header background color. |
matrix_row_header_bg_color_name |
String | Row header background color. |
Matrix Template
Matrices can define a cell template that is automatically expanded across all rows and columns on import. The template defines what items appear in each cell, and device offset rules control how device addresses increment across the grid.
The template is defined using matrix_template_json.
You can write it directly as a YAML array of item definitions (a JSON string is also accepted).
Coordinates are relative to the cell origin (0, 0).
When a matrix has a template but has not been expanded yet, it is automatically expanded during YAML import.
- uuid: "matrix-uuid"
class: Matrix
frame_string: "{{50, 50}, {600, 300}}"
matrix_rows: 3
matrix_columns: 4
matrix_add_borders: true
matrix_border_color_name: "RGBA,0.7,0.7,0.7,1.0"
matrix_template_cell_width: 140.0
matrix_template_cell_height: 60.0
matrix_template_json:
- class: Label
uuid: "tpl-001"
frame_string: "{{2, 2}, {60, 26}}"
title: CH1
font_size: 12.0
text_color_name: "RGBA,0.3,0.3,0.3,1.0"
- class: ValueField
uuid: "tpl-002"
frame_string: "{{2, 30}, {136, 28}}"
device_name: DM100
number_type: 2
decimal_place: 1
unit: "\u00B0C"
text_color_name: "RGBA,0.0,0.0,0.0,1.0"
field_background_color_name: "RGBA,1.0,1.0,1.0,1.0"
border_style: 3
matrix_device_offset_rules:
- id: "rule-1"
itemUUID: "*"
property: device_name
rowOffset: 10
colOffset: 1
| Property | Type | Description |
|---|---|---|
matrix_template_json |
Array | Array of item definitions for one cell. Uses the same properties as regular page items. |
matrix_template_cell_width |
Float | Reference cell width for template items. |
matrix_template_cell_height |
Float | Reference cell height for template items. |
Device Offset Rules
matrix_device_offset_rules is an array of rules that control how device addresses change across rows and columns.
| Property | Type | Description |
|---|---|---|
id |
String | Unique rule identifier. |
itemUUID |
String | Template item UUID to apply the rule to. "*" applies to all items. |
property |
String | Device property name. "*" applies to all device properties. Options: device_name, switch_device_name, lamp_device_name, visible_device_name, etc. |
rowOffset |
Integer | Device address increment per row. |
colOffset |
Integer | Device address increment per column. |
The device address for each cell is calculated as:
offset = row * rowOffset + col * colOffset
Template Example Explained
The example above creates a 3x4 temperature monitoring grid:
- Each cell contains a label ("CH1") and a value field reading from DM100
- The title text auto-increments: CH1, CH2, CH3, ...
-
Device offset rule:
rowOffset: 10, colOffset: 1
Cell (0,0) reads DM100, cell (0,1) reads DM101, cell (1,0) reads DM110, etc.
Web Page
Embeds a web browser view within the page.
- uuid: "web-uuid"
class: WebPage
frame_string: "{{50, 50}, {600, 400}}"
url: "https://example.com"
| Property | Type | Description |
|---|---|---|
url |
String | URL to load. |
user_agent |
String | Custom user agent string. |
Localized Strings
Translations for item text are defined at the project level in the localizedStrings array.
Each entry maps an item UUID and field key to a translated string for a specific locale.
localizedStrings:
- localeIdentifier: ja
key: "item-uuid-1.title"
text: "\u30B9\u30BF\u30FC\u30C8"
- localeIdentifier: ja
key: "item-uuid-1.alternate_title"
text: "\u30B9\u30C8\u30C3\u30D7"
- localeIdentifier: fr
key: "item-uuid-1.title"
text: "D\u00E9marrer"
| Property | Type | Description |
|---|---|---|
localeIdentifier |
String | Locale code (e.g., "ja", "en", "fr", "de", "zh-Hans"). |
key |
String | Format: "{item_uuid}.{field_name}" (e.g., "xxx.title", "xxx.unit"). |
text |
String | Translated text. |
Localizable Fields
title— Item titlealternate_title— Alternate title (Button toggle state)unit— Unit text (ValueField, Meter)message_— Message text (MessageItem)detail_message— Detail message text (MessageItem)title_— Message set title
Message Sets
Message sets define groups of messages that can be displayed by Message items. Each message is triggered by a PLC device value.
messageSets:
- uuid: "msgset-uuid-1"
no: 1
title_: Alarms
order_style: 0
messageItems:
- device_name: DM500
value: 1.0
number_type: 0
message_: "Motor overload"
detail_message: "Motor overload detected. Check motor wiring."
disabled: false
order_style: 0
- device_name: DM500
value: 2.0
number_type: 0
message_: "Temperature high"
detail_message: "Temperature exceeds the limit."
disabled: false
order_style: 1
| Property | Type | Description |
|---|---|---|
uuid |
String | Unique identifier. |
no |
Integer | Message set number. |
title_ |
String | Message set title (trailing underscore is required). |
order_style |
Integer | Sort order. |
messageItems |
Array | List of message items. |
Message Item Properties
| Property | Type | Description |
|---|---|---|
device_name |
String | Device that triggers this message. |
value |
Double | Value that triggers the message. |
number_type |
Integer | Data type (same as ValueField). |
message_ |
String | Message text (trailing underscore is required). |
detail_message |
String | Detailed message text. |
disabled |
Boolean | true=message is disabled. |
Color Format
Colors are specified as strings in RGBA format:
"RGBA,R,G,B,A"
Where R, G, B, A are floating-point values from 0.0 to 1.0.
Examples
| Color | Value |
|---|---|
| Black | "RGBA,0.0,0.0,0.0,1.0" |
| White | "RGBA,1.0,1.0,1.0,1.0" |
| Red | "RGBA,1.0,0.0,0.0,1.0" |
| Green | "RGBA,0.0,0.8,0.0,1.0" |
| Blue | "RGBA,0.0,0.0,1.0,1.0" |
| Yellow | "RGBA,1.0,1.0,0.0,1.0" |
| Gray | "RGBA,0.5,0.5,0.5,1.0" |
| Light Gray | "RGBA,0.9,0.9,0.9,1.0" |
| Transparent | "RGBA,0.0,0.0,0.0,0.0" |
Frame Format
Item positions and sizes use CGRect string format:
"{{x, y}, {width, height}}"
Values are in points. The origin (0, 0) is the top-left corner of the page.
The coordinate system matches the screen_size_string dimensions.
Examples
"{{0, 0}, {768, 1024}}" # Full page (portrait)
"{{50, 50}, {200, 40}}" # Small item at top-left area
"{{384, 512}, {100, 50}}" # Centered item (approximate)
For a landscape project with screen_size_string: "768x1024" and rotation_type: 1,
the coordinate space is 1024 points wide and 768 points tall.
Background Images
To use background images for the project, pages, or items:
- Place PNG image files in the
images/folder, named by UUID (e.g.,abc-123.png). -
Reference the image in the YAML using a
background_imageobject:
background_image: uuid: "abc-123" kind: page_background
Image Kinds
| Kind | Description |
|---|---|
page_default_background |
Default background for all pages. |
page_background |
Background for a specific page. |
lamp_background |
Background image for lamp/button states. |
page_item_background |
Background image for a page item. |
PLC Device Names
Device names depend on the PLC provider. Here are common device names for each provider:
KEYENCE (KV Series)
| Device | Type | Description |
|---|---|---|
DM0, DM100 |
Word | Data memory |
MR0, MR100 |
Bit | Internal relay |
R0, R100 |
Bit | Relay |
FM0, FM100 |
Word | File memory |
CM0, CM100 |
Word | Counter |
T0, T100 |
Word | Timer |
Mitsubishi (MC Protocol)
| Device | Type | Description |
|---|---|---|
D0, D100 |
Word | Data register |
M0, M100 |
Bit | Internal relay |
Y0, Y10 |
Bit | Output (hex addresses) |
X0, X10 |
Bit | Input (hex addresses) |
W0, W100 |
Word | Link register (hex addresses) |
R0, R100 |
Word | File register |
OMRON (FINS)
| Device | Type | Description |
|---|---|---|
D0, D100 |
Word | DM area |
CIO0, CIO100 |
Word | CIO area |
W0, W100 |
Word | Work area |
H0, H100 |
Word | Holding area |
MODBUS/TCP
| Device | Type | Description |
|---|---|---|
HR0, HR100 |
Word | Holding register (40001+) |
CO0, CO100 |
Bit | Coil (00001+) |
IR0, IR100 |
Word | Input register (30001+) |
DI0, DI100 |
Bit | Discrete input (10001+) |
Note: Bit devices (like MR, M, CO) are used for switch_device_name, lamp_device_name, and visible_device_name.
Word devices (like DM, D, HR) are used for device_name (value reading/writing).
Complete Example
A complete project with KEYENCE KV-8000 PLC, two pages, various items, a message set, and Japanese localization:
uuid: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
name: "Factory Monitor"
screen_size_string: "768x1024"
rotation_type: 1
style: default
background_color_name: "RGBA,0.95,0.95,0.95,1.0"
grid:
style: 1
enabled: 1
pixel: 10.0
plc:
model: KV-8000
provider: KEYENCE
plc_channel:
config:
ip_or_hostname: "192.168.0.10"
port_no: 8501
pages:
- uuid: "page-0001"
page_no: 1
title: Main
right_page_uuid: "page-0002"
items:
- uuid: "item-0001"
class: Label
frame_string: "{{20, 20}, {300, 40}}"
title: Factory Monitor
text_color_name: "RGBA,0.0,0.0,0.0,1.0"
font_size: 24.0
alignment: 0
- uuid: "item-0002"
class: Button
frame_string: "{{20, 80}, {150, 60}}"
title: Start
alternate_title: Stop
switch_device_name: MR100
switch_mode: alternate
lamp_device_name: MR100
lamp_color_name: "RGBA,0.0,0.8,0.0,1.0"
style: irPanel
- uuid: "item-0003"
class: Button
frame_string: "{{200, 80}, {60, 60}}"
title: Run
lamp_device_name: MR200
lamp_color_name: "RGBA,0.0,0.8,0.0,1.0"
alternate_lamp_color_name: "RGBA,0.5,0.5,0.5,1.0"
style: Circle
- uuid: "item-0004"
class: Label
frame_string: "{{20, 170}, {120, 30}}"
title: Temperature
text_color_name: "RGBA,0.3,0.3,0.3,1.0"
- uuid: "item-0005"
class: ValueField
frame_string: "{{150, 160}, {150, 50}}"
device_name: DM100
number_type: 2
decimal_place: 1
unit: "\u00B0C"
min_value: 0.0
max_value: 999.0
text_color_name: "RGBA,0.0,0.0,0.0,1.0"
field_background_color_name: "RGBA,1.0,1.0,1.0,1.0"
border_style: 3
- uuid: "item-0006"
class: Meter
frame_string: "{{20, 230}, {280, 280}}"
title: Pressure
device_name: DM200
number_type: 2
min_value: 0.0
max_value: 100.0
figures: 6
major: 20
minor: 10
unit: MPa
decimal_place: 1
meter_zones:
- color_name: "RGBA,0.0,0.8,0.0,1.0"
from_value: 0.0
to_value: 60.0
- color_name: "RGBA,1.0,0.8,0.0,1.0"
from_value: 60.0
to_value: 80.0
- color_name: "RGBA,1.0,0.0,0.0,1.0"
from_value: 80.0
to_value: 100.0
- uuid: "item-0007"
class: SteppedValueField
frame_string: "{{350, 160}, {300, 50}}"
title: Speed
device_name: DM300
step_value: 5.0
min_value: 0.0
max_value: 100.0
number_type: 2
unit: "%"
style: slider
- uuid: "item-0008"
class: Button
frame_string: "{{850, 20}, {120, 40}}"
title: "Alarms >>"
page_uuid: "page-0002"
- uuid: "page-0002"
page_no: 2
title: Alarms
left_page_uuid: "page-0001"
items:
- uuid: "item-0009"
class: Label
frame_string: "{{20, 20}, {200, 40}}"
title: Alarm List
text_color_name: "RGBA,0.0,0.0,0.0,1.0"
font_size: 24.0
- uuid: "item-0010"
class: Message
frame_string: "{{20, 80}, {600, 400}}"
message_set_uuid: "msgset-0001"
active_color_name: "RGBA,1.0,0.9,0.9,1.0"
inactive_color_name: "RGBA,0.95,0.95,0.95,1.0"
active_text_color_name: "RGBA,0.8,0.0,0.0,1.0"
inactive_text_color_name: "RGBA,0.3,0.3,0.3,1.0"
show_detail: true
show_title: true
- uuid: "item-0011"
class: Button
frame_string: "{{850, 20}, {120, 40}}"
title: "<< Main"
page_uuid: "page-0001"
messageSets:
- uuid: "msgset-0001"
no: 1
title_: Alarms
order_style: 0
messageItems:
- device_name: DM500
value: 1.0
number_type: 0
message_: "Motor overload"
detail_message: "Motor overload detected. Check wiring."
disabled: false
order_style: 0
- device_name: DM500
value: 2.0
number_type: 0
message_: "Temperature high"
detail_message: "Temperature exceeds limit."
disabled: false
order_style: 1
- device_name: DM500
value: 3.0
number_type: 0
message_: "Emergency stop"
detail_message: "Emergency stop activated."
disabled: false
order_style: 2
localizedStrings:
- localeIdentifier: ja
key: "item-0001.title"
text: "\u5DE5\u5834\u30E2\u30CB\u30BF\u30FC"
- localeIdentifier: ja
key: "item-0002.title"
text: "\u30B9\u30BF\u30FC\u30C8"
- localeIdentifier: ja
key: "item-0002.alternate_title"
text: "\u30B9\u30C8\u30C3\u30D7"
- localeIdentifier: ja
key: "item-0003.title"
text: "\u904B\u8EE2\u4E2D"
- localeIdentifier: ja
key: "item-0004.title"
text: "\u6E29\u5EA6"
- localeIdentifier: ja
key: "item-0006.title"
text: "\u5727\u529B"
- localeIdentifier: ja
key: "item-0007.title"
text: "\u901F\u5EA6"
- localeIdentifier: ja
key: "item-0009.title"
text: "\u30A2\u30E9\u30FC\u30E0\u4E00\u89A7"
Tips for AI Project Generation
-
Auto-completion:
The
uuidfor projects, pages, and items is optional and will be auto-generated on import.name,page_no, andframe_stringare also auto-filled with defaults when omitted. -
PLC Configuration is Required:
The
plcsection must always be specified. Import will fail with an error if it is omitted. Specifyingproviderandmodelis sufficient; internal PLC class_name values are auto-resolved. -
Class Name Alternatives:
The
classfield is case-insensitive. The following alternative names are also accepted: gauge→Meter, alarm→Message, grid→Matrix, slider→Slider, progress_bar→Progress, value_field→ValueField, web_page→WebPage. - Alternative frame_string Format: In addition to "{{x, y}, {width, height}}", the format "x, y, width, height" is also accepted.
- Coordinate System: For landscape projects (rotation_type: 1) with screen_size_string "768x1024", the usable area is 1024 wide x 768 tall. Avoid placing items beyond these bounds.
- Device Name Consistency: Ensure device names match the PLC provider's syntax. Use bit devices for switches/lamps and word devices for values.
- Minimum Spacing: Leave at least 5-10 points between items for readability.
- Font Sizes: Recommended sizes: titles 18-24pt, labels 14-16pt, values 16-20pt.
-
Message Sets:
The
message_set_uuidon a Message item must match a UUID in themessageSetsarray. -
Localization:
The
keyin localizedStrings follows the format "{item_uuid}.{field_name}". Common fields: "title", "alternate_title", "unit". - Import Behavior: When importing, if a project with the same UUID already exists, it will be overwritten. To create a new copy, change the UUID.
- Lite Edition Limits: In irBoard Lite, imported projects are truncated to a maximum of 2 pages and 10 items per page. Pages and items beyond these limits are silently removed during import. A notification is shown after import if truncation occurred.
Page-Level Import
In addition to importing entire projects, you can import individual pages from YAML files. This is useful for adding pages to an existing project or re-importing exported pages with updates.
How to Import
Use the import button ( ) in the page list of the project editing screen to select a YAML file.
Paste from Clipboard
Tap the clipboard button ( ) in the page list to import pages from YAML text copied to the clipboard. This is convenient for copying AI-generated YAML text and pasting it directly to import. The same duplicate detection and overwrite confirmation as file import applies.
YAML Format
Page-level YAML supports two formats, which are auto-detected:
Single Page (top-level items)
title: "Control Panel"
items:
- class: Button
frame_string: "{{35, 110}, {100, 100}}"
title: Start
switch_device_name: M1000
switch_mode: momentary
Multiple Pages (pages array)
pages:
- title: "Page 1"
items:
- class: Label
frame_string: "{{10, 10}, {200, 50}}"
title: "Status"
- title: "Page 2"
items:
- class: Button
frame_string: "{{10, 10}, {100, 100}}"
title: "Start"
switch_device_name: M0
Export
Long-press a page in the page list (context menu) and select "Export YAML" to export
the page as a YAML file. The exported file uses the pages array format
and can be re-imported directly.
Duplicate Detection and Overwrite
When importing, if pages in the YAML match existing pages in the project, a confirmation dialog is shown. Matching is determined by UUID (priority) or page number.
- Overwrite: Deletes the existing page and replaces it at the same position (page number) with the new content.
- Add as New: Assigns a new UUID and page number, appending to the end.
- Cancel: Aborts the import.
Auto-Completion
Like project-level import, page-level import auto-completes the following:
uuid— auto-generated when omittedpage_no— assigned the next number after existing pages when omittedframe_string— default size based on item class when omitted- Class name normalization (case-insensitive, alternative names)
- Default
switch_modefor buttons (momentary) lamp_device_name→device_namemapping
Note:
Page-level import does not require a plc section.
The PLC configuration from the target project is used.
Demo Video
A demo of importing a YAML project into irBoard. This video shows how to generate a YAML file using AI and import it into irBoard to build screens.