Edge Gateway

The Edge Logic Editor

A canvas, a palette and an inspector. A node is a device, a step or an output; a wire is the path a value takes. Every save is a version.

Product page →

The canvas

The editor is a canvas with the palette on the left and the inspector on the right. A node is added by clicking it in the palette or dragging it onto the canvas; wires are drawn from a node's output port to another's input port. Edits save by themselves, a second after you stop; the status bar says Saved · v3 with the version that was kept. Every save is a version you can see on the design page.

Edge LogicPump house✓ Saved · v3DeployFilter nodes…PLC & INDUSTRIALModbusSiemens S7Allen-Bradley (CIP)…TRANSFORMSScaleDeadbandExpression…LOGIC & ROUTINGCondition / RouteJoinInject / TriggerOUTPUTMQTT outHTTP outSQL out…GATEWAYModbus converterMain meterModbus · 192.168.1.20every 1 s · 12 tagsScale× 0.1, 2 decimalsPlant brokerMQTT outplant/{device}/{tag}HistorianSQL out · PostgreSQLMain meterDEVICE NAMEMain meterHOST / IP192.168.1.20UNIT ID1POLL INTERVAL1sADDRESSES40001, 40003, 40005 …
A source, a transform and two outputs. The inspector edits whichever node is selected.

Palette groups

GroupNodesWhat they are
PLC & industrialModbus, Siemens S7, S7CommPlus, Fetch/Write, RK512, Allen-Bradley CIP, PCCC, Mitsubishi MELSEC and FX, Omron FINS and Host Link, Beckhoff TwinCAT, OPC UA Client, GE SRTP and EGD, Yaskawa, DirectNET, Emerson ROC, DNP3, BACnet/IP client, SNMP, MTConnect, M-Bus, DLMS/COSEM, WITS, YokogawaSources: a device the runtime polls. One node is one device; its tags are its addresses.
TransformsScale, Unit conversion, Deadband / Change filter, Expression, Cast, Rename / Map, Rate limit, Debounce, Batch / Aggregate, JSON templateShape values on their way. Scale, Unit conversion and Rename are applied to the tag once; the others run on the route (below, and in Logic and routing nodes).
Logic & routingCondition / Route, Join, Inject / Trigger, Throttle, Catch / StatusDecide where and when values go, and report what went wrong. Each is executed by the runtime; see Logic and routing nodes.
OutputMQTT out, HTTP out, SQL out, OPC UA Server out, BACnet/IP out, WebSocket out, Modbus Server out, Store & forwardWhere the data goes. One node is one destination in the runtime; Store & forward is the disk buffer in front of one.
GatewayModbus converterA service beside the flow: a serial Modbus bus published on a TCP or UDP socket.
MessagingMQTT in, HTTP in, Write outDrawable, but not gateway features: the runtime publishes rather than subscribes, and is read-only towards the plant. Validation names each one and leaves it out.
The Edge Logic Editor is @tamidas/edge-logic, the same editor the TamidaS IoT Platform uses, vendored unchanged. What is Modbus Logic-specific is the compiler behind it, which turns the flow into the runtime's configuration.

Sources: reading a device

A source node is one device. Its inspector holds the connection (host and port, or a serial port with baud, parity, data and stop bits, and the unit or station ID), the poll interval, and the addresses to read. Each address becomes a tag: a name, a data type, a byte order and a scaling, with a quality the runtime keeps up to date.

  • Modbus addresses take the reference form (40001, 30001, 00001, 10001) or holding:0, input:0, coil:0, discrete:0. Neighbouring registers are read in one block request.
  • Each other protocol has its own address form, shown as an example in the node: DB1.DBW0 for S7, Program:Main.Speed for Allen-Bradley CIP, D100 for MELSEC, MAIN.fSpeed for TwinCAT, ns=2;s=Pump.Speed for an OPC UA server. The runtime's own driver checks every address at validation.
  • Data types: BOOL, INT16, UINT16, INT32, UINT32, INT64, UINT64, FLOAT32, FLOAT64 and text, with the byte orders ABCD, BADC, CDAB and DCBA for values wider than one register.
  • io-tags.json from the Modbus Scanner imports on the design page: names, data types, byte order and scaling arrive with it, and the editor draws the device.
INSIDE A SOURCEPollon the node's intervalDecodetype · byte order · scaleQualityGOOD · BAD · STALETag enginethe current value of every tag
A failed read marks the tag BAD and keeps the last value; a device that stops answering is retried with a back-off and does not slow the others.

What the transform nodes become

A transform sits on the wire between a source and an output. The compiler turns each into the thing the runtime already has for it: a setting on the tag, a setting on the route, or a step the route executes on every message, in the order the wire passes them.

NodeBecomes
ScaleThe tag's own scale and offset: y = m × x + b, applied once, before routing. A clamp and rounding to a number of decimals follow it.
Unit conversionA conversion on the tag: degC to degF, bar to psi, kW to hp, l/min to m³/h. Two different dimensions are refused at validation.
Rename / MapThe tag's published name.
Deadband / Change filterThe route's deadband, absolute or percent. A value that has not moved past it is not published. *Any change* means no deadband.
Rate limitA periodic route: at most one publish per interval, whatever the poll rate.
Expression, CastSteps on the route that change the value before it is published: value * 1.8 + 32, or a cast to bool, integer, float or text.
Debounce, Batch, JSON template, ThrottleSteps on the route that shape the message that leaves: wait for a quiet period, collect into one array, reshape the payload, drop when the output is behind.
Store & forwardThe output's bounded disk buffer, replayed in order when the output returns. Server-style outputs hold the present value and have nothing to buffer.
One source feeding two paths that scale, convert or rename it differently cannot be expressed: the runtime transforms a tag once, before routing. Validation says so; split it into two source nodes. Steps are per route and may differ freely.
The Edge Logic Editor · Edge Gateway documentation | Modbus Logic