| Page properties | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
|
Laser marking systems driven through the CCI ASCII interface
- Name: SIC
- Version: 1.0.01.0
- Protocol: CCI (ASCII command/reply)
- Interface: TCP/IP
- Runtime: .NET Standard 2.0 (Multiplatform)
- Configuration:
- Devices / Channels / Nodes / Points
| Table of Contents | ||||||
|---|---|---|---|---|---|---|
|
Overview
The SIC connector controls laser marking systems through its CCI ASCII interface. Every exchange is a single text command terminated by a line feed, answered by a single line: 1 for accepted, 0 for rejected, or the value itself for a read.
The connector covers the full marking workflow — loading and saving jobs, pen and laser parameters, entity geometry, text and barcode content, counters and date/time objects, hatching and wobble, and firing the mark — so a marking station can be built entirely from device points, with no scripting required to reach the laser.
A rejected command is an application-level answer, not a transport fault: an unknown entity name, a job path that does not exist, or a barcode setting that is invalid for the current symbology all return 0 while the connection stays healthy. Those surface as Bad quality on the point.
Communication Driver Information | |
|---|---|
Driver name | SIC |
Assembly Name | T.ProtocolDriver.SIC |
Assembly Version | 1.0.0.0 |
Multiplatform | True |
Devices supported | Laser marking systems controlled with the CCI ASCII interface enabled |
Manufacturer | SIC Marking |
Protocol | CCI (ASCII command/reply) |
Interface | TCP/IP |
Channel Configuration
Simultaneous Requests
Set the channel to a single simultaneous request — both SimultaneousRequestGlobal and SimultaneousRequestEachNode set to 1. This is a requirement, not a tuning preference.
The laser software serves one client on one port. If the channel is allowed to run requests in parallel, the platform creates additional channel instances and each opens its own connection — most of which fail to connect. The selection state is also held per instance, so an entity chosen on one instance is invisible to the others and entity-scoped points silently act on the wrong scope. Sequences that must stay together, such as selecting a pen and then reading a pen value, can interleave between instances and return a correct-looking value from the wrong pen.
TCP/IP Settings
The CCI interface listens on TCP port 350 by default. The connection is opened once and reused — the connector does not reconnect per command.
Node Configuration
Station Configuration
The station string is semicolon-separated: IP;Port
- IP: address of the machine running the CCI interface. Use
127.0.0.1when it runs on the same machine as the runtime. - Port: TCP port of the interface. Default
350. Additional lasers run on different ports.
For example, 127.0.0.1;350 for a local laser, or 127.0.0.1;351 for a second one.
The pen is not a station field. It is a point — see Required Points below.
Point Configuration
Address Format
Every address is exactly two tokens: Family:Item
- Family: selects both the wire call and the value type — see Address Families below.
- Item: a friendly name, or a raw numeric id.
The target entity and the target pen are not part of the address. They come from two required points whose values the connector applies to every entity-scoped and pen-scoped operation. One address therefore serves every entity in the job, and switching the target is a single write rather than a reconfiguration.
Required Points
Every node must configure these two. Without them the node acts on the whole job and on pen 1 for its entire lifetime.
Address | Access | Purpose |
|---|---|---|
| Read/Write | Name of the entity every entity-scoped point acts on. Write |
| Read/Write | Pen every pen-scoped point acts on. |
Two further selections are required only on nodes that use flash storage. They follow the same rule: the slot and the file path are not part of a flash address, so the commands resolve through these points.
Address | Access | Required for |
|---|---|---|
| Read/Write | All four flash commands. Defaults to slot |
| Read/Write |
|
Write SEL:Entity before the points that depend on it, and not in the same scan. In a typical screen this happens naturally: the entity selector writes on change, and the action buttons write later.
Address Families
Family | Scope | Type | Access | Description |
|---|---|---|---|---|
| Connector | — | R / R+W | Selection state. Answered by the connector rather than by the laser. |
| Global | Double | R+W | Global floating-point value. |
| Global | Long | R+W | Global integer value. |
| Global | String | R+W | Global string value. |
| Entity | Double | R+W | Floating-point data on the selected entity. |
| Entity | Long | R+W | Integer data on the selected entity. |
| Entity | String | R+W | String data on the selected entity. |
| Varies | Boolean | R / R+W | One checkbox inside a flag word. The connector reads the word, changes the single bit and writes it back, so the neighbouring settings survive. |
| Varies | Varies | R / R+W | A value the connector derives from one or more reads. A derivation that cannot be completed reports Bad quality rather than a stale number. |
| — | — | W | An action. The point's value carries the argument. |
| — | Integer | R | Connector status. |
The same number means different things in different families — identifier 9 is one value as a global integer, another as global string, another as entity data. The family is what disambiguates it, which is why every address carries one.
Raw Identifier Addresses
On DV, LV, SV, ED, EL and ES, the Item may be a raw numeric identifier instead of a name — for example ED:71. This reaches identifiers that have no friendly name yet.
Unit conversion is keyed to the name, never to the identifier. DV:Frequency converts kHz to Hz; DV:6 does not. A raw address is passed through exactly as written.
Selection Points
Address | Type | Access | Description |
|---|---|---|---|
| String | R+W | Required. Target entity name; |
| Integer | R+W | Required. Target pen; |
| String | R | Top-level named entities in the job, semicolon-separated and prefixed with |
| String | R | Type of the selected entity — see Entity Types below. Empty when the whole job is selected. |
| Integer | R+W | Target slot for every flash command. Defaults to |
| String | R+W | PC-side file path for the two file-mode flash commands. Defaults to |
| String | R+W | Destination for |
Entity Types
SEL:EntityType reports the object class, which is what decides which editing screens apply.
Value | Object |
|---|---|
| Text |
| Barcode, any symbology |
| Counter or date/time |
| Geometry |
| Group |
| Control objects |
(empty) | Whole job selected, or the name is not in the job |
Two distinctions the type does not make. It does not separate DataMatrix from QR from 1D — read ES:BarcodeType for that. And a counter and a date/time object are the same class; BIT:IsDateTime is what tells them apart. Treat the list as non-exhaustive and compare case-insensitively.
Global Values
DV — Global Double
Items marked pen act on SEL:Pen.
Item | Unit | Scope | Description |
|---|---|---|---|
| W | pen | Laser power of the selected pen. |
| mm/s | pen | Marking speed. |
| mm/s | pen | Jump speed between marked segments. |
| kHz | pen | Pulse frequency. The interface works in Hz; the connector converts. |
| µs | pen | Delay after a marked segment. |
| µs | pen | Delay after a jump. |
| µs | pen | Delay before the beam switches on. |
| µs | pen | Delay before the beam switches off. |
| µs | pen | Delay at a corner between segments. |
| Hz | pen | Wobble frequency. |
| mm | pen | Wobble amplitude. |
| % | global | A global multiplier applied on top of the pen power. Not the pen power itself. |
| mm | optic | Horizontal offset of the marking field. |
| mm | optic | Vertical offset of the marking field. |
| factor | optic | Horizontal scale correction. Dimensionless: |
| factor | optic | Vertical scale correction. |
| degrees | optic | Rotation of the whole marking field, absolute. |
| mm | optic | Read only. Edges of the optic’s physical marking field, fixed by the lens and the correction file. The scanner cannot deflect past them. The interface sets field size only through a combined call, so writing these has no effect. |
| mm | optic | Edges of the usable work area — a software rectangle inside the optic field, normally set smaller to stay clear of a fixture or of the distorted outer field. Writable. |
The two limits are different things and a position can be inside one and outside the other, so check both when a job will not go where it was told. Position is the centre of the mark, so the usable range on an axis is the work-area edge minus half the mark size.
Optic values are machine settings, not job contents. They apply to every job this head marks, they leave every entity untouched, and CMD:SaveJob does not persist them.
LV — Global Long
Item | Description |
|---|---|
| Mode of the guide pointer. |
| Raw pen enable flag word. Pen-scoped. Use |
|
|
| Entity count, all levels, including entities nested in groups. |
| Entity count, top level only — a group counts once. |
| Stop and abort flags: |
| Outcome of the last mark: |
Neither of these reports whether a mark is in progress — they say what happened, not what is happening. Use STS:IsMarking for the live state.
SV — Global String
Item | Description |
|---|---|
| Read-only. Path of the job currently open in the laser software. Read it after a save to confirm which file the software is pointing at. |
| Writing a path captures an image of the job. |
Entity Data
All of these act on the entity named by SEL:Entity.
ED — Entity Double
Item | Unit | Description |
|---|---|---|
| mm | Character height. Millimetres, not points. Ignored while a height limit is active. |
| mm | Width the text is scaled to fit. |
| mm | Height the text is scaled to fit. |
| mm | Gap between a barcode and its human-readable text. |
| mm | Distance between hatch lines. Valid range |
| degrees | Hatch line angle. The interface works in radians; the connector converts. |
| % | Line reduction applied to barcode modules. |
| ratio | Horizontal cell fill ratio, |
| ratio | Vertical cell fill ratio. |
| ratio or mm | Horizontal quiet zone. A scale factor by default; millimetres once |
| ratio or mm | Vertical quiet zone. Follows X unless the absolute flag is set. |
| degrees | Rotates the entity by this amount. Accumulates on repeated writes — use |
| degrees | Absolute angle. Not implemented on every build; |
EL — Entity Long
Item | Description |
|---|---|
|
|
| Mark loop count. |
| Raw text checkbox word. Use the |
| Pen the job assigned to this entity, |
| Human-readable text on or off. |
| QR error correction: |
| General barcode flag word. |
|
|
| DataMatrix symbol-mode word. |
| Raw zero-based symbol-size index. |
| QR version — the QR counterpart of the DataMatrix symbol size. |
| Counter start value. Takes effect only after a reset. |
| Counter increment. |
| Raw current counter value. See the caveat on |
| Advance the counter only every N marks. |
| Auto-reset after N. |
| Raw mode word: text |
ES — Entity String
Item | Description |
|---|---|
| The string a text object marks, or the payload a barcode encodes. Reads back as well as writes. On a counter or date/time object this is regenerated from the format at the next mark — change the format instead. |
| Symbology, e.g. |
| Format descriptor, e.g. |
| Counter format string, e.g. |
| Path to a serial source file. The file must already exist. Requires |
Bit Points
Each of these is one checkbox inside a flag word that also carries unrelated settings. The connector reads the word, changes the single bit and writes it back, so nothing else is disturbed.
Item | Access | Description |
|---|---|---|
| R+W | Wobble on or off for the selected pen. The wobble shape is configured per pen in the laser software and is not reachable over the interface. |
| R+W | Barcode invert. Also switches the quiet zone to absolute millimetres and releases the vertical axis, because the two settings travel together. |
| R+W | Cell mode, required for flash operation. Set it before the cell size. |
| R+W | DataMatrix automatic symbol size. |
| R+W | DataMatrix rectangular sizes. Switches the symbol-size list to the rectangular set. |
| R+W | Force the text to a fixed width. |
| R+W | Force the text to a fixed height. |
| R+W | Keep the aspect ratio while forcing a limit. |
| R+W | Use the custom format string. This is the only route to zero-padding — turning it off disables prefix, suffix and padding together. |
| R+W | Take the serial from a file. Mutually exclusive with the custom format. |
| R | Whether the selected object is a date/time rather than a counter. Read-only: it reports what the object is. This is the only reliable way to tell the two apart. |
Derived Points
These present a value the interface does not expose directly. Each costs several exchanges, so they belong on a moderate scan rate rather than the fastest one.
Item | Type | Access | Description |
|---|---|---|---|
| Real | R+W | Width of the whole mark in mm. Reading returns the job's extent scaled by the optic gain; writing derives the gain from the wanted size, so no entity is modified and read-then-write changes nothing. |
| Real | R+W | Height of the whole mark in mm, by the same mechanism. |
| Real | R | Horizontal centre of the selected entity in mm, derived from its bounding box. |
| Real | R | Vertical centre in mm. Write both axes together with |
| Real | R+W | Entity width in mm. Reading prefers the configured size limit and falls back to the bounding box when there is none. Writing sets the limit and its checkbox together. |
| Real | R+W | Entity height in mm, by the same rule. A non-zero height overrides |
| Real | R+W | Entity angle in degrees, absolute, counterclockwise positive. Writing reads the current angle and sends the difference, so writing the same value twice does not rotate twice. |
| String | R | Text before the counter digits, extracted from the format string. |
| String | R | Text after the counter digits. |
| Integer | R | Zero-padding width. Prefix, suffix and padding have no identifiers of their own — they exist only inside the format string. Write all three with |
| Integer | R | Current counter value, recovered from the rendered content. The direct value has been observed reporting |
| String | R+W | Date/time pattern in readable form, e.g. |
| String | R+W | DataMatrix symbol size as text, e.g. |
| Integer | R | Whether hatching is active. Turn it on and off with |
Commands
A command point is written, not polled. Where a command takes an argument, it is the point's own value.
Marking and Job Control
Item | Value | Description |
|---|---|---|
| — | Marks the whole job. Returns immediately without blocking; poll |
| — | Marks only the selected entity. Refused when the whole job is selected. |
| — | Aborts the current mark. |
| File path | Loads a job. Marking and the pointer are stopped first, then a clean transform baseline is stored. |
| — | Saves over the job currently open, carrying both entity and pen changes. |
| — | Saves the job to the path held in |
| File path | Captures an image of the job. Reports the result of the capture itself. |
| New name | Renames the selected entity and re-points the selection at the new name. |
| — | Starts the guide pointer. |
| — | Stops the guide pointer. |
| — | Shows the laser software window. |
| — | Hides the window. The interface keeps working. |
| — | Stores the current transform of every entity so it can be restored later. |
| — | Restores the stored transforms. |
Applied Settings
These write several values in a fixed order. They exist as single commands precisely because the order matters — separate points give no ordering guarantee.
Item | Value format | Example | Description |
|---|---|---|---|
|
|
| Whole-mark size in mm, both axes in one exchange so the mark is never left scaled on one axis only. |
|
|
| Absolute centre in mm. With one entity selected it moves that entity; with the whole job selected it translates the job as a single block. |
|
|
| Distance and angle are written before the style. Enabling hatching while the stored distance is invalid produces a dialog on the equipment, so the range is checked before anything is sent. |
|
|
| Size limits in mm, written before the checkboxes that activate them. |
|
|
| Sets the counter and resets it so the new values take effect. The reset is job-wide. Refuses a date/time object. |
|
|
| Applies barcode settings in the required order. Keys not present are left alone. See below. |
ApplyBarcode keys
Recognised keys, listed in the order they are applied: sym, cellmode, invert, cell, qz, lr, size, ecc, content, hr, gap, font, w, h, rot.
The order is not arbitrary. The symbology decides which other settings are valid, so it goes first. The cell mode must precede the cell size. The content goes late so the symbol is encoded against the final constraints. The rotation goes last, because any step that changes the symbol rebuilds its geometry and would discard an angle set earlier. The quiet zone is written only when invert=1, since it has no effect otherwise.
Counters
Item | Description |
|---|---|
| Restarts every counter in the job, not only the selected one. |
| Increments every counter in the job. |
| Decrements every counter in the job. |
Flash Memory
Job storage on the controller card, for standalone operation. All four commands take their slot from SEL:FlashSlot and, where a file is involved, their path from SEL:FlashPath — the values are not written into the command point.
Item | Direction | Description |
|---|---|---|
| job → slot | Loaded job into a flash slot. The job must already be saved on disk, so pair it with |
| slot → job | Flash slot back into the laser software. Replaces the loaded job; card settings are not restored. |
| file → slot | A file on disk into a flash slot. |
| slot → file | A flash slot out to a file on disk. |
Because they carry no value, these are plain triggers: write any non-zero value to fire. A timer tag with a short delay-off is the natural shape — the press fires the command and the automatic reset to 0 does not fire it again. This is also what lets the operator repeat the same slot: a command that carried the slot in its own value could not be re-fired, because the second press would write the value the tag already held.
Flash access is slow relative to every other command, and the connector raises the channel timeout for the duration.
Status Points
Item | Description |
|---|---|
| Reads |
| Reads |
Notes and Limitations
One point, one exchange
The interface is strictly one command and one reply, so points are never grouped into blocks. A DV, LV, SV, ED, EL or ES point is a single exchange; a BIT or CALC point is several; SEL:EntityList costs one exchange per top-level entity the first time it is built, and two per poll after that — the connector caches the list and rebuilds it only when the entity count changes or when a command it issued replaced the job. Set scan rates accordingly: the derived points and the enumerations are the expensive ones and belong on a slow scan or on demand.
Commands act on a non-zero value
Every CMD point ignores a value of 0 or an empty string. That is what makes a timer tag a safe trigger: a delay-off timer writes 1 on the press and 0 when it expires, and only the press fires the command.
Points with nothing to report
A point whose value does not apply to what is currently selected reports Bad quality rather than a communication error. Reading a text-only property while a barcode is selected, or a per-entity flag while the whole job is selected, is an ordinary state on a screen whose points span entity types — it changes as soon as the operator picks a different object. Gate screen logic on quality, and keep the error counters meaningful for real transport faults.
Writes are not treated this way. A write that cannot be performed fails, so an operator action is never silently discarded.
Counters and date objects generate their own content
A counter and a date/time object are the same class of entity, and neither stores the text it marks — it rebuilds it at every mark from the counter and the format string, or from the next line of a file. Writing ES:Content on one of these appears to work and is then discarded by the next mark.
Drive them through the field that actually produces the text: ES:SerialFormat for a counter, CALC:DateTimeFormat for a date object. SEL:EntityType and BIT:IsDateTime together tell a screen which of the three fields to offer. ES:Content remains useful on all of them as a read-only preview of what will be marked.
The guide pointer follows whole-mark geometry
Writing DV:OpticOffsetX, DV:OpticOffsetY, DV:OpticRotation, CALC:MarkWidth or CALC:MarkHeight restarts the guide pointer, so its outline redraws in the new position without the operator switching it off and on. The pointer is started unconditionally: adjusting one of these while the pointer is off will switch it on. The per-entity geometry points do not do this.
Marking requires the pointer to be stopped first, and CMD:Mark and CMD:MarkSelected handle that themselves.
Selection ordering
Write SEL:Entity before the points that depend on it. Points are sorted so the selection is sent ahead of the rest within a batch, but that is a mitigation and not a guarantee: nothing forces both writes into the same batch. Driving the selection from an operator action, and the operations from a separate one, avoids the question entirely.
Changes live in memory until saved
Everything written to entity and pen values changes only the job held in memory. CMD:SaveJob writes it to disk. The optic values are the exception in the other direction — they are machine settings and CMD:SaveJob does not persist them.
Read-only by nature
Some values can be written but never read back, so the connector derives the readable form instead: barcode width and height, the counter's prefix and suffix, and the symbol size are all reported through CALC points rather than the raw identifiers.
Not covered
The wobble shape, the date/time offset value, and the interface language are configured in the laser software and have no command in this interface.
Driver Revision History
| SIC Revision History | |
|---|---|
| Version | Notes |
| 1.0.1.0 | Marking boundaries (FieldMin/Max, WorkAreaMin/Max) and marking diagnostics (ExecutionStatus, MarkResult) exposed as points. STS:IsMarking answers the interface’s own marking query and no longer needs configuring; the IsMarkingSource channel option is removed. Flash commands take their slot and path from SEL:FlashSlot and SEL:FlashPath and are plain triggers. Marking content is written through the interface’s text-change call so the mark reflects it. Points with nothing to report use Bad quality instead of a communication error. Whole-mark geometry writes redraw the guide pointer, and marking stops it first. The entity list is cached. |
| 1.0.0.0 | Initial release. Job load and save, pen and laser parameters, optic transform, entity geometry, text and barcode content, counters and date/time objects, hatching and wobble, flash job storage. Entity and pen are selected through the SEL:Entity and SEL:Pen points. |
In this section...
| Page Tree | ||
|---|---|---|
|