Tutorial: 教程 5: 写入地址

教程 5: 写入地址

本教程将演示如何使用 driver.setData 函数将数据写入设备地址。

项目设计

包括:

  • 两个数值对象(分别称为 A 和 B),监控不同的设备地址。
  • 一个 JS 元件,将数值对象 A 的数据写入数值对象 B 的地址,每当数值对象 A 的地址数据发生变化时(模拟数据传输行为)。

数值对象设置

  1. 将数值对象 A 的读/写地址设置为 LW-100,设备数据格式设置为 16 位无符号整数。
  2. 将数值对象 B 的读/写地址设置为 LW-101,设备数据格式设置为 16 位无符号整数。

JS 元件设置

  1. 在 [配置] 设置页面,添加一个名为 "sourAddress" 的订阅,指向 LW-100,数据类型设置为 16 位无符号整数,长度为 1。
  2. 添加另一个地址,名为 "destAddress",指向 LW-101,数据类型设置为 16 位无符号整数。

源代码

// 使用 Subscription 监控数值对象 A 地址的数据变化
this.config.sourAddress.onResponse((err, data) => {
  if (err) {
    console.log('错误:', err.message);
  } else {
    // 使用 driver.setData 将数据写入数值对象 B 的地址
    driver.setData(this.config.destAddress, data.values[0], (err, data) => {
      if (err) {
        console.log('driver.setData 失败,错误:', err.message);
      } else {
        console.log('driver.setData 成功');
      }
    });
  }
});

执行结果

  1. 使用数值对象 A 更改 LW-100 的值。

  2. 观察数值对象 B 中 LW-101 的值也相应更新。

说明

  • driver.setData(函数)
    • 用于将数据写入指定的设备地址。
    • 响应回调函数(第 3 个参数)
      • 写入数据可能需要时间,因此使用回调函数接收设备响应而不会阻塞程序。
      • 在发送数据请求后,程序继续执行后续代码,直到系统通过回调函数通知“数据写入成功”或“发生错误”。
      • 如果不需要知道 driver.setData 的结果,可以省略此参数。
  • 以下代码将 driver.setData 替换为 driver.promises.setData。此方法使用 JavaScript 的 Promise 对象,可以更直观地处理异步操作。使用 Promise 的好处是代码更易于阅读和维护,尤其是在处理多个异步操作时。
this.config.sourAddress.onResponse(async (err, data) => {
  if (err) {
    console.log('错误:', err.message);
  } else {
    try {
      await driver.promises.setData(this.config.destAddress, data.values[0]);
    } catch (error) {
      console.log('错误:', error.message);
    }
  }
});

参考