Dimension Measurement Light Curtain — Selection & Accuracy Guide (DAIDISIKE DQL/DQM)
Applies to DAIDISIKE measurement & detection gratings, models DQL-K and DQM-K series (K = beam pitch / resolution). This section explains how to choose the right resolution K and protective height H, and how to verify response time for high-speed lines.
1) Resolution K vs. Minimum Detectable Size
Definition. In DAIDISIKE measuring gratings, K is the beam pitch (mm). The smaller the pitch, the smaller the reliably detected rod, edge, hole, or part.
Rule-of-thumb. For opaque targets, a conservative sizing is: Minimum object size (mm) ≥ 1.2 × K. For hole/slot inspection, use Minimum hole diameter (mm) ≥ 1.5 × K to maintain stability under vibration and misalignment.
Available K options in DQL/DQM: 2.5, 5, 10, 20, 40, 80 mm (check your local datasheet for exact availability per model length).
2) How to Size Protective Height H
Protective height (active measuring window) must fully cover the target envelope plus guard margin for installation tolerances.
Sizing formula. H ≥ Target span along light curtain + 2 × K (adds top/bottom margin approximately one beam pitch each). In most DQL/DQM models, mechanical length L relates to H by: L ≈ H + 30 mm (end caps & mounting).
Select the next higher standard model length. For multi-height scenarios (e.g., mixed cartons), choose H for the largest case or deploy two graded curtains.

3) Line Speed & Response Time Check
To avoid miss-counts on fast conveyors, ensure the beam interruption time exceeds the curtain's response time.
Check. Let v be line speed (m/s) and s the object length in travel direction (mm). The single-beam dwell time is t ≈ (s + K) / (1000 × v) seconds. Require t ≥ τ, where τ is the light curtain response time. DAIDISIKE DQL/DQM typically support 0.5–5 ms; use 5 ms as a conservative design value.
When t < τ, enable anti-jitter filtering, widen K, or increase the detected span (use two beams, virtual gate, or dual-curtain crossing).

4) Quick Application Matrix (DAIDISIKE DQL/DQM)
| Resolution K (mm) | Typical minimum object | Common use cases | Recommended series |
|---|---|---|---|
| 2.5 | Ø ≈ 3–4 mm pins / small holes ≥ 4 mm | Small-parts counting, precision hole inspection, edge positioning | DQM-K2.5, DQL-K2.5 |
| 5 | Ø ≈ 6–8 mm / holes ≥ 8 mm | Pharma blister count, electronics kitting, bracket presence | DQM-K5, DQL-K5 |
| 10 | Ø ≈ 12–15 mm | Carton dimensioning (gap detection), can/bottle lanes | DQL-K10 / DQM-K10 |
| 20 | Ø ≈ 24–30 mm | Wood diameter classing, bulky goods presence, pallet edges | DQL-K20 |
| 40–80 | Large profile edges; zone presence | Timber sorting, textile width checks, large bin detection | DQL-K40 / DQL-K80 |
Matrix is indicative; always validate with onsite samples and ambient-light/reflectance conditions.
PLC/MES Integration — RS-485 (Modbus-RTU) & Analog (4–20 mA / 0–10 V) Wiring and Read/Write Practice for DAIDISIKE DQL/DQM
Applies to DAIDISIKE Detection & Measurement Gratings — DQL-K2.5/5/10/20/40/80 and DQM-K2.5/5/10/20. This section provides production-grade wiring notes, example register layout, PLC Structured-Text polling, and MES data capture. All examples use conservative industrial defaults (9600-8-N-1, Modbus function 03/06) and field-proven scaling for analog inputs.
1) Terminals & Recommended Wiring
| Terminal | Description | Notes |
|---|---|---|
| V+ / V− | Power 24 VDC (±10%) | Ripple < 10% p-p; isolate from inductive loads |
| DO1/DO2 | Discrete outputs (PNP/NPN) | Pass/Fail, Part-Present, Oversize, etc. |
| AO | Analog out (selectable 4–20 mA or 0–10 V) | Scaled to measured span or count window |
| A+/B− | RS-485 Modbus-RTU | Half-duplex; 120 Ω termination at the ends |
| SG | Signal GND / Shield | Single-point ground at control cabinet |
Tip. Use twisted-pair shielded cable for RS-485. Terminate the longest two physical ends with 120 Ω and add bias (e.g., 680 Ω pull-up to A+, 680 Ω pull-down to B− at the master) to avoid bus float.
- Modbus defaults (factory): Address 1, Baud 9600, Data 8, Parity None, Stop 1. Configure via DIP/UI if your line uses different settings.
- Analog mode: Select 4–20 mA for noise immunity & open-loop detection; use 0–10 V for short runs and multi-channel AI cards.
- Shielding: Bond cable shields on the cabinet end only to prevent ground loops.
2) Example Modbus Register Map (DQL/DQM)
| Address (Holding) | Type | Name | Format | Notes |
|---|---|---|---|---|
| 40001 | R | Model code | UINT16 | 0x100 = DQL, 0x200 = DQM |
| 40002 | R | Resolution K (×10) | UINT16 | 25=2.5 mm, 50=5.0 mm, … |
| 40010 | R | Measured span (mm ×10) | UINT16 | e.g., 3285 = 328.5 mm |
| 40012 | R | Part count | UINT16 | Auto-rollover at 65535 |
| 40014 | R | Status bits | UINT16 | Bit0=OK, 1=Over, 2=Under, 3=Error |
| 40020 | R/W | Gate mode | UINT16 | 0=Free-run, 1=Window, 2=Edge |
| 40021 | W | Reset counter | UINT16 | Write 0xA55A to reset |
Actual maps may vary by firmware. DAIDISIKE can provide the register list for your exact DQL/DQM build and length.
3) PLC Code — Structured Text (IEC 61131-3) to Poll DQL/DQM (Modbus-RTU Master)
// DAIDISIKE DQL/DQM Modbus Read (ST), generic master FB
// Assumes a library FB 'MB_Master' with .Execute, .ReadHoldingRegs, .WriteSingleReg
VAR
mb : MB_Master;
readOK : BOOL;
regs : ARRAY[0..9] OF UINT; // buffer for 10 holding registers
modelCode : UINT; // 40001
k_x10 : UINT; // 40002
span_x10 : UINT; // 40010
count : UINT; // 40012
status : UINT; // 40014
dwell_ms : REAL;
END_VAR
// Init (once): configure serial port of COMx to 9600-8-N-1, RTU mode
// mb.Port := COM1; mb.Baud := 9600; mb.Parity := 0; mb.StopBits := 1; mb.SlaveAddr := 1;
(* Read 10 registers starting at 40001 (= index 0 if the FB takes zero-based) *)
mb.ReadHoldingRegs(Slave:=1, StartAddr:=40001, Quantity:=10, pData:=ADR(regs));
readOK := mb.Execute();
IF readOK THEN
modelCode := regs[0];
k_x10 := regs[1];
span_x10 := regs[9 - (10 - (40010-40001))]; // or simply map by absolute address
span_x10 := regs[9 - (40010-40001)]; // adjust per your FB buffer indexing
count := regs[11 - (40012-40001)]; // example; replace with your platform's mapping
status := regs[13 - (40014-40001)];
// Example: Reset counter when DO2 (oversize) goes high -> write 0xA55A to 40021
IF (status AND 2#0000_0010) <> 0 THEN
mb.WriteSingleReg(Slave:=1, Addr:=40021, Value:=16#A55A);
mb.Execute();
END_IF;
END_IF;
// Helper conversions
FUNCTION K_mm : REAL
VAR_INPUT k_raw : UINT; END_VAR
K_mm := REAL(k_raw) / 10.0;
FUNCTION Span_mm : REAL
VAR_INPUT s_raw : UINT; END_VAR
Span_mm := REAL(s_raw) / 10.0;Each PLC brand names its Modbus FBs differently (e.g., MB_MASTER / MODBUS_RTU / MBUS). Map StartAddr and buffer indices to your vendor's convention (zero-based vs. 40001-based).
4) MES/IPC Snippet — Python (pyModbus) to Log Measurements
# DAIDISIKE DQL/DQM Modbus-RTU readout (Python 3.x)
from pymodbus.client import ModbusSerialClient
from datetime import datetime
import csv
client = ModbusSerialClient(
method="rtu", port="/dev/ttyUSB0", baudrate=9600, parity="N", stopbits=1, bytesize=8, timeout=0.2
)
assert client.connect(), "Cannot open serial port"
def read_block(unit=1, start=0, count=10):
rr = client.read_holding_registers(address=start, count=count, slave=unit)
if rr.isError(): raise RuntimeError(rr)
return rr.registers
with open("daisidike_dql_dqm_log.csv","a", newline="") as f:
w = csv.writer(f)
regs = read_block(unit=1, start=0, count=24) # start=0 ≈ 40001 on many stacks
model = regs[0]
k_x10 = regs[1]
span10 = regs[9] # adjust indices to your stack's mapping
count = regs[11]
status = regs[13]
ts = datetime.utcnow().isoformat()
w.writerow([ts, model, k_x10/10.0, span10/10.0, count, status])
print("OK", ts)Use an industrial USB-RS485 adapter or native RS-485 port. For Windows, set port="COM3". For long lines, prefer 19200 or 38400 only if your EMC budget allows.
5) Analog Scaling — From AI Counts to millimeters
4–20 mA (preferred): map the measured span H to current. If your AI is 16-bit (0–27648 counts at 20 mA typical on Siemens), use:
// Siemens/TIA example (LAD/ST): 4–20 mA, raw 5530..27648
SPAN_mm := (REAL(AI_raw) - 5530.0) * H_MAX_mm / (27648.0 - 5530.0);
IF SPAN_mm < 0.0 THEN SPAN_mm := 0.0; END_IF;0–10 V: for a 0–10 V card (0..27648 counts):
// 0–10 V scaling to millimeters
SPAN_mm := REAL(AI_raw) * H_MAX_mm / 27648.0;Factory default mapping: AO = 0–100% of configured measuring window. Set H_MAX_mm in the DQL/DQM parameter so that 100% corresponds to your required top of scale.
- Use 250 Ω precision shunt when converting 4–20 mA to 1–5 V for voltage-only AI.
- Enable AI median/moving-average filtering for vibrating targets; do not exceed your takt budget.
- Never share AI commons with high-current inductive loads; route separately and star-ground at the cabinet.
6) Commissioning Checklist (Production Line)
- ✓ RS-485 polarity verified (A+ to A+, B− to B−), 120 Ω at both ends, bias at master.
- ✓ PLC master can read 40001..; model and K values make sense; status toggles with a test piece.
- ✓ Analog span matches H_MAX_mm; overshoot/undershoot alarms tied to DO outputs.
- ✓ Response time vs. line speed validated (beam dwell ≥ τ); filtering tuned, no missed counts.
- ✓ MES log shows timestamped span/count; daily CSV/DB roll-over implemented.


