Skip to content

XC-227+ Disinfection Cabinet Temperature Controller Integration (22111)

1. Sensor Overview

ItemValue
DeviceXC-227+ Disinfection Cabinet Temperature Controller
VendorXuzhou Ringder Electric Co., Ltd.
ModelXC-227+
ProtocolModbus-RTU (RS-485, 9600/8N1)
Business Code22111
ConnectionEdgeBus KC11 mains DTU
TemplateXC227-22111

The XC-227+ controls high-temperature disinfection cabinets. It drives heater and fan relays, reports cabinet temperature, and supports remote power on/off, start/stop, and read/write of temperature-control parameters (stop temp / upper / lower / hysteresis / calibration). A probe fault returns the marker value 0x5050.

2. Features

  1. Standard Modbus-RTU over RS-485 at 9600bps — connects to the ManThink KC11 DTU directly.
  2. Dual relay control (heater + fan) with readable heating/fan status.
  3. Full temperature-control parameter set: St stop temp, F01 upper, F02 lower, F03 hysteresis, F04 calibration — all remotely read/write.
  4. Probe self-check: a faulty/disabled probe returns 0x5050 so the upper layer can null the reading.
  5. Independent power and start/stop control bits using 0xFF00/0x0000.

3. Applicable Scenarios

  • Compliance monitoring of disinfection cabinets in restaurant/canteen kitchens.
  • Traceability and alarming for instrument sterilization in clinics and labs.
  • Centralized control of chain-store cabinets — remote power and parameter push.

4. Gateway (DTU) Information

4.1 Hardware

ItemValue
DTU ModelKC11 (mains, DIN rail)
InterfaceRS-485
PowerAC 85–270V
LoRaWAN ClassClass C (always online)

4.2 Wiring

Controller PinSignalTo KC11
485ARS-485 AKC11 485A
485BRS-485 BKC11 485B

KC11 is powered from AC L/N (85–270V). Short the 120Ω terminating resistor to 485A at the bus end when needed.

5. Data Acquisition

The solution polls Modbus-RTU by function code:

  • FC04 read sensor data: cabinet probe temperature (0x0000)
  • FC01 read status: heater/fan relay, power, heating, fan status (0x0000–0x0004)
  • FC02 read alarm: cabinet probe fault (0x0000)

5.1 Register Definitions

Sensor data (FC04, signed integer)

AddressItemTypeCoefficientNotes
0x0000Cabinet probe temperatureint16BE÷10Fault/disabled = 0x5050

System parameters (FC03 read / FC06·FC10 write, signed integer °C, no scaling)

AddressParamRangeDefaultStep
0x0000St stop tempF02~F01905
0x0001F01 upper limitSt~150905
0x0002F02 lower limit-10~St05
0x0003F03 hysteresis0~2051
0x0004F04 calibration-20~2001

Control commands (FC05, 2-byte unsigned)

AddressItemONOFF
0x0000Power on/off0xFF00 on0x0000 off
0x0001Start/stop0xFF00 start0x0000 stop

5.2 Status Bits

Status (FC01, bit, low bit = low address)

AddressItemNotes
0x0000Heater relay0 open / 1 closed
0x0001Fan relay0 open / 1 closed
0x0002Power status0 off / 1 on
0x0003Heating status0 no / 1 yes
0x0004Fan status0 no / 1 yes

Alarm (FC02, bit)

AddressItemNotes
0x0000Probe fault0 normal / 1 alarm

6. EdgeBus Model

6.1 EB Configuration

ItemValue
namexc227
port22
version0x87
dataType0x10
upPeriodIndex70
Serial9600 / 8 / 1 / NONE
BzType22111
BzVersion1
SwVersion31
Batteryfalse (Class C)

6.2 EB Code

typescript
import { Buffer } from "buffer";
import { buildOtaFile } from "@EBSDK/run";
import { EBModel } from "@EBSDK/EBCompiler/EBModel/EBModel";
import { EventInfoItem } from "@EBSDK/EBCompiler/plugins/EBHelper";
import type { UserConfUPItem } from "@EBSDK/EBCompiler/plugins/EBHelper";
import { CheckbitEnum, getOtaConfig } from "@EBSDK/otaConfig";

const eventInfo: UserConfUPItem[] = [
  {
    name: "xc227", port: 22, version: "0x87", dataType: "0x10", upPeriodIndex: 70,
    quInfo: [
      { protocol: "modbus", addr: "0x01", code: "0x04", periodIndex: 70,
        indexAPP: 150, indexCMD: 0, copySize: 1, isLast: false,
        listVal: [ { start: "0x0000", end: "0x0000" } ] },
      { protocol: "modbus", addr: "0x01", code: "0x02", periodIndex: 70,
        indexAPP: 150, indexCMD: 0, copySize: 1, isLast: false,
        listVal: [ { start: "0x0000", end: "0x0000", covType: "HEX" } ] },
      { protocol: "modbus", addr: "0x01", code: "0x01", periodIndex: 70,
        indexAPP: 150, indexCMD: 0, copySize: 1, isLast: true,
        listVal: [ { start: "0x0000", end: "0x0004", covType: "HEX" } ] }
    ]
  }
];

let otaConfig = getOtaConfig({
  SwVersion: 31, BaudRate: 9600, StopBits: 1, DataBits: 8,
  Checkbit: CheckbitEnum.NONE, Battery: false, ConfirmDuty: 60,
  BzType: 22111, BzVersion: 1
});

const MODBUS_TT = (ebModel: EBModel) => {
  for (let i = 0; i < eventInfo.length; i++) {
    let event = new EventInfoItem(eventInfo[i]);
    event.upEventSetup();
    event.eventInstall();
  }
  return JSON.stringify(ebModel, null, 2);
};
buildOtaFile(import.meta.url, otaConfig, MODBUS_TT);

6.3 Notes

  • The EB code has 1 uplink event + 3 query events, polled in order: FC04 temperature → FC02 probe fault → FC01 five status bits (the last query with isLast:true triggers the uplink).
  • COV is disabled; upPeriodIndex and periodIndex are both 70, so collect and upload share one period parameter (default 300s).
  • Uplink frame is 10 bytes: [0]=0x87 [1]=0x10 [2]=cov [3]=status [4]=ds [5]=addr [6-7]=temp(int16BE÷10) [8]=alarm byte [9]=status byte.
  • The Modbus slave address is injected from DTU app_150 (default 1).

7. Thing Model

7.1 Basic Info

TypeNameid Name
Telemetry[XC227]xc227_22111
Parameter[XC227-PARA]xc227_para_22111

frameInfo: port 22, dataLen 10, rssi true, battery index 4, tagList [{0:0x87},{1:0x10}].

indexfield_nametypeNotes
6cabinet_tempint16BE ÷10Cabinet temp °C
8probe_faultbitLE0-0Probe fault
9heat_relaybitLE0-0Heater relay
9fan_relaybitLE1-1Fan relay
9power_statusbitLE2-2Power status
9heating_statusbitLE3-3Heating status
9fan_statusbitLE4-4Fan status

When the cabinet temperature reads 0x5050 (probe fault), it is set to null.

7.3 Scripts

See project files thinklink/thingModel/xc227_22111.js and xc227_para_22111.js.

8. Third-Party Data Subscription

8.1 MQTT Topic

/v32/{Organization Account}/tkl/up/telemetry/{eui}

8.2 Example Payload

json
{
    "eui": "6353012af10a9331",
    "active_time": "2026-06-01T08:35:48.000Z",
    "thingModelId": "22111",
    "thingModelIdName": "xc227_22111",
    "telemetry_data": {
        "snr": 13.5,
        "rssi": -51,
        "cabinet_temp": 98.5,
        "power_status": 1,
        "heating_status": 1,
        "fan_status": 0,
        "heat_relay": 1,
        "fan_relay": 0,
        "probe_fault": 0
    }
}

9. RPC

9.1 RPC Names

TypeNameid Name
Set[XC227 SET] 22111xc227_set_22111
Get[XC227 GET] 22111xc227_get_22111
Action[XC227 ACT] 22111xc227_action_22111

9.2 Parameter Definitions

DTU app parameters (Set/Get RPC, port 214)

SlotNamefield_nameUnitTypeNotes
app_70Upload/collect periodperiod_upsuint32LE1–3600, DTU poll & upload interval
app_150Modbus addressaddr_modbusuint81–199, target slave address

Device control / temperature parameters (Action RPC, transparent FC05/FC06)

field_nameRegisterTypeNotes
power_cmdFC05 0x0000boolPower: true=on / false=off
run_cmdFC05 0x0001boolStart/stop: true=start / false=stop
stop_tempFC06 0x0000int16St stop temp
temp_upperFC06 0x0001int16F01 upper limit
temp_lowerFC06 0x0002int16F02 lower limit (signed, two's complement)
temp_diffFC06 0x0003int16F03 hysteresis
temp_calibFC06 0x0004int16F04 calibration (signed)

The Action RPC sends one parameter per invocation; the echo frame is verified over the transparent channel (port 51), then telemetry/shared are synced and the form is back-filled.

9.3 RPC Code

See thinklink/rpc/xc227_set_22111.js, xc227_get_22111.js, xc227_action_22111.js.

10. Template Selection

Search the ThinkLink platform for:

  • XC227-22111

or by business type:

  • 22111 / Disinfection cabinet temperature controller

11. Notes

  • The communication address can only be set on the controller panel, range 1–199, default 1.
  • Cabinet temperature is a signed integer; divide by 10 for the actual value. A faulty/disabled probe reads a fixed 0x5050.
  • Temperature parameters (St/F01/F02/F03/F04) are raw integer °C with no ÷10; F02 and F04 may be negative (two's complement).
  • Power and start/stop control values are 0xFF00 (ON) / 0x0000 (OFF), not 0x0001.
  • The alarm trigger xc227_trigger_22111 raises an immediate probe-fault alarm; high/low temperature alarms compare the cabinet temperature against F01/F02 with 0.5°C hysteresis. Configure the notification group on the device before use.