Skip to content

4.2 三种Api调用方法

luosheng edited this page Jun 7, 2023 · 6 revisions

首先,在使用Modbus.Net之前,你不仅需要加载Modbus.Net.dll主框架模块,还需要加载一个具体的协议模块,这个框架才能正常使用。

Utility


  1. 实例化一个Utility,比如:
IUtilityProperty utility = new ModbusUtility(ModbusType.Tcp, "192.168.1.10", 2, 0, Endian.LittleEndian);
  • Modbus.Net中存在三种不同的端格式:
    • 小端格式:Endian.LittleEndian,位序为倒序。
    • 大端格式:Endian.BigEndianLsb,位序为倒序。
    • 大端正序格式:Endian.BigEndianMsb,位序为正序。
  1. 调用Utility中的方法,IUtilityProperty中有一个方法,可以用来加载方法组。
public TUtilityMethod GetUtilityMethods<TUtilityMethod>() where TUtilityMethod : class, IUtilityMethod

调用时,可以使用如下方法调用

utility.GetUtilityMethods<IUtilityMethodDatas>()?.GetDatasAsync(...);

当Utility未实现相应的方法组时,GetUtilityMethods直接返回null。

有关BaseUtility

  • BaseUtility中默认实现了IUtilityMethodData,目前包括GetDatasAsync和SetDatasAsync,它们分别表示读取值和设定值。
  • Utility中的地址只有一个string,这个string描述了整个地址信息,这个地址应该怎么写由文档说明,因为不同的AddressTranslator可以决定它写法是不同的。
  • 比如Modbus.Net.Modbus的30005的第11个位的写法为"3X 5.10",它的位从0开始所以位要减1。

Machine


  1. 实例化一个Machine,比如:
IMachineProperty machine = new ModbusMachine(ModbusType.Tcp, "192.168.1.10", new List<AddressUnit>(...), true, 2, 0, Endian.LittleEndian);
  • 有关AddressUnit这里要特别说明一件事情:
    • BaseMachine在组合时是以地址作为寻找一个AddressUnit的关键字的,因此无论如何要填写AddressUnit里的Area和Address,就算协议里没有地址也要填写一个Machine中唯一的假地址。
  1. 调用Machine中的方法,IMachineProperty中有一个方法,可以用来加载方法组。
public TMachineMethod GetMachineMethods<TUtilityMethod>() where TMachineMethod : class, IMachineMethod

调用时,可以使用如下方法调用

machine.GetMachineMethods<IMachineMethodDatas>()?.GetDatasAsync(...);

当Machine未实现相应的方法组时,GetMachineMethods直接返回null。

有关BaseMachine

  • BaseMachine中默认实现了IMachineMethodData,目前包括GetDatasAsync和SetDatasAsync,,可以读写设备信息。
  • BaseMachine有四种返回关键字,Id返回AddressUnit的Id,Name返回AddressUnit的Name,CommunicationTag返回AddressUnit的CommunicationTag,Address返回AddressUnit的地址(string格式)。
  • CommunicationTag是为了屏蔽地址中的关键信息,并建议在json中作为键来使用的关键字,它可以大幅缩短json的长度。注意CommunicationTag如果要用的话,跟Id一样设备里也是唯一的。

MachineJobScheduler

  1. 实例化一个MachineJobScheduler,比如:
var machineJobScheduler = await MachineJobSchedulerCreator.CreateScheduler("Trigger1", -1, 10);
  1. 添加任务链任务:比如,添加一个每10秒获取数据一次的任务:
var job = machineJobScheduler.From(machine.Id + ".From", machine, MachineDataType.Name).Result.Query(machine.Id + ".ConsoleQuery", QueryConsole).Result;
  1. 执行任务
await job.Run();

Home

Clone this wiki locally