Skip to content

Virtual 驱动

dc3-driver-virtual 是 IoT DC3 的虚拟(仿真)驱动——它不连接任何真实设备,而是按采集周期为位号生成随机位号值,并能模拟命令下发与事件上报。

Virtual 不是某种现场总线协议,而是一个仿真驱动:它把 IoT DC3 的整套接入流程(建设备、配物模型、跑采集、看位号值)走通,但底层不发任何网络报文,所有数据都是本地随机造的。适用场景:

  • 跑通平台、做演示——没有真实 PLC/传感器时,先用它把端到端链路验证一遍。
  • 学习驱动模型——它是最简单的驱动,源码(VirtualDriverCustomServiceImpl)就是写自定义驱动的参考样板。
  • 压测与联调——批量造设备和位号,观察平台在数据流下的表现。

读取时按位号的数据类型造值:STRING 类型固定返回 abcd1234BOOLEAN 类型返回随机真/假,其余类型返回 0~100 之间的随机浮点数。

  • 驱动名 / codeVirtual Driver / VirtualDriver
  • 类型DRIVER_CLIENT(驱动作主动方,按周期主动产出数据)

驱动配置(设备级 driver-attribute

接入一台虚拟设备时,在设备上填这些属性。注意:虚拟驱动并不真正连接 host:port,这两项只是占位,保持与真实驱动一致的配置形态,方便照搬演练。

属性code类型默认值说明
HosthostSTRINGlocalhostIp
PortportINT18600Port

位号配置(point-attribute

每个采集位号上填:

属性code类型默认值说明
TagtagSTRINGTAGPoint tag name

造什么值由位号类型决定,与 tag 无关

虚拟驱动忽略 tag 的具体内容,造值只看位号本身的数据类型(PointpointTypeFlag):STRINGabcd1234BOOLEAN 出随机布尔、数值类出 0~100 随机浮点。tag 仅作位号在该设备上的标识占位。

写命令配置(command-attribute

虚拟驱动支持模拟命令下发(不真正写设备)。下发时用命令参数渲染 payloadTemplate 得到请求载荷,再用 responseTemplate 渲染并解析出一份模拟响应:

属性code类型默认值说明
Payload TemplatepayloadTemplateSTRING${value}Template rendered with command params
Response TemplateresponseTemplateSTRING{}Mock response template

模板用 ${...} 占位,由命令上下文渲染

模板里的 ${value}${deviceCode}${commandCode} 等占位会被命令参数与设备/命令上下文替换。responseTemplate 是 JSON 时,其字段会被原样解析进命令返回结果;非 JSON 则整体作为 response 返回。这套流程不接触任何真实设备,纯属仿真。

事件配置(event-attribute

虚拟驱动还会周期性地为设备模拟事件上报(每 30 秒一轮)。事件属性用 JSON Path 告诉驱动:从模拟报文里哪个路径取事件 code、哪个路径取事件载荷:

属性code类型默认值说明
Event Code PatheventCodePathSTRING$.eventCodeJSON path used to resolve event code
Payload PathpayloadPathSTRING$.payloadJSON path used to resolve event payload

采集与健康

  • 采集周期:默认 cron 0/30 * * * * ?(每 30 秒造一轮值)。驱动另有一个 0/5 * * * * ? 的内部定时任务(schedule.custom),事件上报在其中按 30 秒间隔触发。
  • 健康/在线:设备健康检查默认 cron 0/15 * * * * ?,租约超时 45 秒——在线状态机制见设备

最小接入示例

不需要任何真实硬件,把一台虚拟设备接进来看到数据流动:

  1. Virtual Driver 创建设备,driver 属性填 host=localhostport=18600(保持默认即可)。
  2. 给设备绑定的物模型加一个温度位号pointTypeFlag=FLOAT),point 属性填 tag=temperature
  3. 启动驱动,30 秒内就能在位号值里看到 0~100 之间不断变化的随机值。

易错点

host/port 是占位,连不连得上都不影响出值

虚拟驱动从不真正建立到 host:port 的连接,所以即使填一个不存在的地址也照样产出随机值。换言之,用它验证不了真实的网络连通性——它只用来跑通平台流程;要测真实链路请换对应协议的驱动。

位号类型决定值的形态,先把 pointTypeFlag 配对

想看布尔翻转就把位号配成 BOOLEAN,想看连续曲线就配成数值类型(如 FLOAT)。位号类型配错只会得到不符合预期的造值形态,而不会报错——这点和接真实设备一致:类型是位号侧的约定。

延伸阅读

Released under the AGPL-3.0 License · 基于 AGPL-3.0 协议发布