Sending Data
Plain text, raw bytes, a Modbus RTU frame or a whole file — all start here
The send bar sits at the bottom of the Connection tab, directly under
the terminal. Everything you send by hand starts here — plain text, raw bytes, a
Modbus RTU frame, or a whole file. Macros, triggers, Lua scripts and the AI assistant do
not go through this bar: each of them sends its own bytes straight to the
port, and shows up in the terminal under its own mark (TX_MCR,
TX_TRG, TX_SCR, TX_AI — see the previous chapter).
The send bar — Format list, txt/hex fields with the line-ending column, CMD and LOOP buttons, file send
The Format list on the left picks what the bar shows: Text / Hex (one view with two fields) or Modbus RTU (a table of frame fields instead of the input). The choice is remembered between sessions.
Text and hex — one view, two fields
The upper row is labelled txt, the lower one hex. They are two views of the same command, kept in step while you type:
- Type in the txt field and the hex row shows the bytes your text
turns into. Escape sequences are honoured:
\r,\n,\r\nand\tbecome real control bytes. - Type in the hex field and the spacing arranges itself —
0103becomes01 03, lower case turns into upper case, and a lone digit waits until you complete the byte. - Bytes that are not printable cannot be shown as text, so the txt field then shows a dot in their place and goes dimmed — a signal that you are looking at a reflection, not at content.
The field you last typed in — or simply clicked into — is the source. It decides which field a history entry goes back into, and whether the line ending is appended. The hex field is literal: nothing is added to what you typed, so a hand-typed Modbus frame never picks up two stray bytes at the end.
The line-ending column
The third column carries the line ending. The upper cell is a button: each click steps to the next value — None → CR → LF → CRLF. The cell underneath shows the bytes that value adds. LF is the starting value.
The hex row shows the content only: type AT with CRLF
selected and you get 41 54 in the hex field and 0D 0A in the third
column. The line ending is appended only when the text field is the source.
Sending a command
Press Enter in either field, or click the CMD button. After a successful send both fields are cleared and the cursor returns to the field you were typing in.
The terminal's right-click menu feeds this bar too: Add to Send appends the selected text to the txt field, and Send puts it in and sends it in one step.
Modbus RTU — a table instead of hand-typed hex
Switch Format to Modbus RTU and the input field is replaced by a two-row table with five fixed columns: Addr, Function, two columns whose headings follow the function, and CRC. Sending from the table makes you the master of the bus — this is how you test a VFD, an RS-485 sensor or a PLC; the reply shows up in the terminal, decoded into columns. Answering as a slave is a job for a Lua script.
The function list lives in the Function header cell, in groups:
the public function codes of the standard (01–08, 0B, 0C, 0F, 10, 11, 14–18, 2B — shown
in hex, with a decimal equivalent where it differs, such as 10 (16) Write Multiple Regs) and Custom function…
are always there, and a user defined group appears in between once you have
named a code of your own in the terminal's FC window. The two middle headings follow the
choice — Coil from / Count, Reg from / Count, Register / Value,
Reg from / Values and so on.
- Numeric fields default to decimal; raw-byte fields default to hexadecimal. Click the
dec/hexmarker in a column heading to convert its contents. Your choices are saved between sessions; existing saved settings are preserved. A0xprefix forces hex in a decimal column — device manuals use both. - State (FC05) accepts
ON/1/trueorOFF/0/false. - Values (FC16) is a list separated by commas, semicolons or spaces —
10, 20, 30. - In
decandhex, enter the zero-based register or coil address sent in the frame. Selectdec+1to use one-based numbering: for holding register 40077, enter 77; the app sends address 76. Do not enter the 4xxxx reference itself. Functions with no fields (07, 0B, 0C, 11) send with the device address alone; file records and read/write-in-one (14, 15, 17) take the payload as bytes under their own name. - Changing to a function whose fields mean something else resets the first field to its
default (address 0, displayed as 1 in
dec+1) and empties the second; going from FC03 to FC04 keeps them. The device address always stays.
For Write Single Register (0x06) and Write Multiple Registers
(0x10), decimal values may be negative, down to −32768. For example, −100 is sent as
FF9C.
The CRC is calculated for you. A quarter of a second after your last keystroke the app builds the frame and fills the CRC column with its last two bytes; hovering that cell shows the complete frame. If a field is missing or invalid, the CRC cell stays empty and CMD is disabled. An invalid field highlights its column heading in the theme’s error colour; an empty field is not highlighted. Correct or complete the fields to enable sending.
Custom functions: the cell under the list becomes a field for the code,
read hexadecimally (44 means 0x44); add a trailing
d for decimal. The fourth column becomes Data and carries
the payload as bytes — two hex digits per byte, or decimal values separated by spaces when
the column is set to dec. Function codes 1–127; the terminal's FC window can
name a code so it appears in the user defined group. The checksum is still appended for
you.
The clock next to the table opens a list of previously sent frames, laid out in the same columns. Click a row and its values drop straight back into the fields.
Command history
The clock icon inside the command field is the history control. It stays invisible until you hover over the field or put the cursor in it, and it glows when history is on; clicking it switches history off and on.
- The list opens above the field when the field takes focus and filters down to entries containing what you have typed.
- ↑ / ↓ walk through the entries; each returns to the field it came from.
- Repeated commands collapse to one row, and Modbus frames are left out — they have their own list.
The history holds up to 500 entries, lives in memory only and starts empty after every restart. It records only what a person typed — macros, triggers, Lua scripts, the assistant and file sends do not appear in it.
Sending in a loop
The LOOP button opens a small Interval (ms) field. That number is the switch — there is no separate toggle:
- Set the interval — 1 to 60000 ms.
0means “send once”: the bar then behaves like a single CMD click. The LOOP button lights up as soon as a non-zero interval is set. - Type your command and press CMD. The bytes are frozen at that moment and repeated unchanged.
- While the loop runs the CMD icon turns into a red stop square, the LOOP icon spins, and the interval field is locked.
- Press CMD again to stop it. Disconnecting the port stops it as well.
The interval is measured from the moment the loop started, so the work inside one pass does not stretch the period. If a send takes longer than the interval, the loop runs as fast as it can rather than firing a burst to catch up.
Sending a file
The two buttons on the right handle files. The rightmost picks the file; its tooltip then shows the file name. Picking a file does not send anything — the button to its left sends it, in 64-byte chunks, with the thin vertical bar in front of it filling as the transfer runs.
- Right-click the send button to open Delay (ms) — a pause between chunks, 0 to 1000 ms, for devices that cannot swallow data at full speed.
- While the file is going out, the same button shows a stop square. It stops at the next chunk boundary, so no half-frame is left behind.
- File → Send file in the menu does both steps at once.
When the port is closed
Both input fields are greyed out and the txt field reads “Connect to send commands...”. The CMD and file send buttons are greyed out, the history list will not open, and a running loop is stopped the moment the port disconnects.
What still works: the Format list, the Interval (ms) panel and the whole Modbus RTU table. You can compose a frame and watch its CRC appear with the port closed — the checksum does not need the device. Only the moment of sending does.