yeedriver-simple-serial

1.0.8 • Public • Published

yeedriver-simple-serial

通用数据类的驱动,与485/modbus不同,这些数据会主动上报的

options说明

  • 基本配置 目前可能有两种,串口或是网络的 如果是串口的,那么就会有serial配置项

      .serial
      {
          .path   串口路径 如/dev/ttyUSB0等,注意主程序需要和操作权限
          .opts   serialport所对应的参数信息
      }
    

    如果是网络的,那么就有net配置项

      .net
      {
          .type  网络类型  client/server
          .ip    ip地址  如果.type是server,这个地址是监听地址,可以是0.0.0.0 如果是client,就是需要连接的目标ip地址
          .port  端口号  如果是server,就是监听端口,如果是client,就是要连接的目标端口
      }
    

    如果.serial和.net同时配置了,那么.serial优先

  • sids配置

      sids是一个对象: 设备id和设备类型
      {devId:devType}
    

应用说明

通用数据驱动类,在根目录下提供一个框架,根据配置启动drivers内相应的实例 驱动根据配置,调用相应的RWActuator来实例化数据读写 驱动根据配置中的sids信息,生成相应的ClassFactory,并且由ClassFactory来创建相应的设备实例

当收到数据时,让每个实例都执行一次OnData分析动作,实例根据自身的配置,检查数据格式是否符合自身的要求,并且分析获取相应的数据 因此,有多少个实例,串口数据可能会被处理多少次,实例注意不得修改串口传入的数据

实现说明

  • 如果一个类型下面有多个设备,没有做优化处理的话,每次数据到达的时候,每个设备都进行一次OnData操作解析,同一种类型的数据,完全可以只需要解析一次就可以。
  • 使用一个ClassFactory来进行同一种类型设备的创建、数据解析工作,每次需要创建设备时,由ClassFactory来创建和管理,而收到数据时,由ClassFactory来进行数据解析,数据解析完毕后,由相应的的ClassFactory的实例来调用相应的设备进行处理
  • 使用相应的RWActuator来实现读写数据的抽像

RWActuator

实际的读写类,根据目前的不同,可以分为串口类和网络类,该类具有以下的功能:

  • 自动恢复功能,open以后,如果发生错误,将会进行自动重连
  • 异步/同步转换功能,因为串口或是网络,打开和关闭都是异步的,通过类后,调用者就是同步的;类内部有状态机进行管理,因此调用者无需考虑端口是否真实打开
  • 数据事件, 当实例收到数据时,emit('data',data)事件,调用者使用on('data')即可以处理相应的数据,data是一个数组
  • 数据写入 RWActuator提供三种写入的函数:
    • write(data),写入一串数据,data是一个数组,不关心写入的结果
    • writeP(data,timeout),写入一串数据,返回一个Promise,当数据被写入到相应的Buffer后再返回 data是一个数组, timeout是超时时间值,如果为0,则没有超时
    • writeDrainP(data,timeout),写入一串数据,返回一个Promise,当数据被完全写入到端口后返回 data是一个数组, timeout是超时时间值,如果为0,则为默认值:10秒

使用说明

类扩展说明

DevBase类

DevBase 基础类,定时了类的框架,所有的应用都需要从该框架继承

   OnTick()     框架每隔50ms调用一次该函数,用于继承类的超时管理
   
   
   setTimeout(ms100) 设置超时值,当超时该时间值收不到数据时,状态自动恢复成STATE.IDLE
      ms100,超时值,以100ms为单位
   
   STATE={IDLE:0}  定义了一个通用的状态,空闲

ClassFactory

类工厂,不同类型的数据解析器,需要生成一个对应的ClassFactory,ClassFactory做以下的工作:

  • 当数据到达时,ClassFactory的OnData函数将被调用,相应的ClassFactory的实例进行数据解析

      OnData(data)  数据处理函数,每个继承类都需要重写该函数
             data是一个数组
    

    每个继承类必须重写OnData函数

  • ClassFactory的OnTick每50ms被调用一次,Class会根据内部的this.devices里的设备,调用设备的OnTick,由设备实现超时管理

  • ClassFactory需要实现一个CreateClass(devId)函数,用于创建一个新的设备实例

驱动类说明

TLMeter类

是天信无线水表的驱动类,该水表通过无线远传数据,每隔1小时上传一次数据,数据通过串口汇报,数据是类似DLT/645 97协议的

Readme

Keywords

none

Package Sidebar

Install

npm i yeedriver-simple-serial

Weekly Downloads

0

Version

1.0.8

License

ISC

Last publish

Collaborators

  • ploto