Flutter Modbus通信插件openmodbus_dart的使用

Flutter Modbus通信插件openmodbus_dart的使用

openmodbus_dart 是一个用于解析 OpenModbus JSON 规范的 Dart 库。它受到了 OpenAPI、OpenRPC 和 OpenAI function calling 示例的启发。

特性

  • 可以从 OpenModbus JSON 文件加载数据,并将其转换为 Dart 对象。

使用方法

根据 /example/openmodbus_dart_example.dart 文件中的示例进行操作。

从 JSON 字符串加载
Future<void> main() async {
  // 定义包含 OpenModbus 数据的 JSON 字符串
  String jsonString = "{...OpenModbus String...}";
  
  // 创建 OpenModbusLoader 实例
  OpenModbusLoader openModbusLoader = OpenModbusLoader();
  
  // 将 JSON 字符串加载到 OpenModbus 对象中
  OpenModbus openModbus = await openModbusLoader.load(jsonString);
}
从 JSON 文件加载
Future<void> main() async {
  // 定义 JSON 文件的路径
  String jsonPath = "$currentWorkingDirectory/example/json/$jsonFileName";
  
  // 创建 OpenModbusLoader 实例
  OpenModbusLoader openModbusLoader = OpenModbusLoader();
  
  // 从文件加载 JSON 数据到 OpenModbus 对象中
  OpenModbus openModbus = await openModbusLoader.loadFromFile(jsonPath); 
}

示例代码

以下是一个完整的示例代码,展示了如何从多个 JSON 文件加载 OpenModbus 数据。

import 'package:openmodbus_dart/openmodbus_dart.dart';
import 'dart:io';

void main() async {
  // 定义包含 JSON 文件的文件夹路径
  String folder = "${Directory.current.path}${Platform.pathSeparator}example${Platform.pathSeparator}json";
  
  // 定义要加载的 JSON 文件名列表
  List<String> jsonFileNameList = [
    "ascii-safe-system-example.json",
    "rtu-lights-example.json",
    "tcp-air-condition-example.json"
  ];

  // 遍历文件名列表并加载每个文件
  jsonFileNameList.forEach((jsonFileName) async {
    print("FILE_NAME: $jsonFileName");
    
    // 构建文件路径
    String jsonPath = "$folder${Platform.pathSeparator}$jsonFileName";
    
    // 创建 OpenModbusLoader 实例
    OpenModbusLoader openModbusLoader = OpenModbusLoader();
    
    // 加载 JSON 文件并转换为 OpenModbus 对象
    OpenModbus openModbus = await openModbusLoader.loadFromFile(jsonPath);
    
    // 打印 OpenModbus 对象的信息
    print("title: ${openModbus.info.title}");
  });
}

更多关于Flutter Modbus通信插件openmodbus_dart的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Modbus通信插件openmodbus_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter应用中使用openmodbus_dart插件进行Modbus通信的代码示例。这个示例将展示如何连接到Modbus TCP服务器,读取和写入寄存器的值。

首先,确保你已经在pubspec.yaml文件中添加了openmodbus_dart依赖:

dependencies:
  flutter:
    sdk: flutter
  openmodbus_dart: ^x.y.z  # 请替换为最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter应用中创建一个Modbus客户端,并使用它进行通信。以下是一个完整的示例:

import 'package:flutter/material.dart';
import 'package:openmodbus_dart/openmodbus_dart.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _result = "";

  @override
  void initState() {
    super.initState();
    _connectAndCommunicateWithModbus();
  }

  Future<void> _connectAndCommunicateWithModbus() async {
    try {
      // 创建Modbus TCP客户端
      final client = ModbusTcpClient(host: '192.168.1.100', port: 502);

      // 连接到Modbus服务器
      await client.connect();

      // 读取从站1的保持寄存器(功能码3),起始地址40001(对应寄存器地址0)
      final holdingRegisters = await client.readHoldingRegisters(
        unitId: 1,
        startAddress: 0,
        quantity: 1,
      );

      // 显示读取到的值
      setState(() {
        _result = "Holding Register 40001: ${holdingRegisters.first}";
      });

      // 写入值到从站1的保持寄存器(功能码16),起始地址40001(对应寄存器地址0)
      await client.writeSingleRegister(
        unitId: 1,
        address: 0,
        value: 12345,
      );

      // 再次读取以验证写入
      final updatedRegisters = await client.readHoldingRegisters(
        unitId: 1,
        startAddress: 0,
        quantity: 1,
      );

      // 显示更新后的值
      setState(() {
        _result += "\nUpdated Holding Register 40001: ${updatedRegisters.first}";
      });

      // 断开连接
      await client.disconnect();
    } catch (e) {
      // 处理异常
      setState(() {
        _result = "Error: ${e.message ?? e.toString()}";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Modbus Communication Example'),
        ),
        body: Center(
          child: Text(_result),
        ),
      ),
    );
  }
}

在这个示例中:

  1. 创建了一个ModbusTcpClient实例,指定了Modbus服务器的IP地址和端口。
  2. 使用connect()方法连接到Modbus服务器。
  3. 使用readHoldingRegisters()方法读取保持寄存器的值。
  4. 使用writeSingleRegister()方法写入值到保持寄存器。
  5. 再次读取寄存器以验证写入是否成功。
  6. 使用disconnect()方法断开与Modbus服务器的连接。
  7. 在UI中显示读取和写入的结果。

请注意,你需要根据实际情况修改IP地址、端口、从站ID和寄存器地址。此外,异常处理部分可以根据需要进行扩展,以处理更多类型的错误情况。

回到顶部