[JAVA版] GBT 20999-2017 SDK 通讯协议工具 —— 1. 程序文件路径目录及程序代码类说明

ChinaGBT创始人
• 阅读 8

GBT 20999-2017 SDK 程序文件路径目录及程序代码类说明

索引

简介

GBT20999-2017开发框架SDK程序目录说明,解释说明SDK程序的目录结构,方便开发者更清晰的了解项目源码。

目录说明

整个SDK程序的包路径是  org.chinagbt.gbt209992017 ,下面是对目录简单的介绍说明,开发者可参考。

名称 描述
java 当前项目的资源文件目录,里面可以存放一些图片、图标及其它资源文件。
  api 存放SDK对外的JAVA工具类文件。
    GBT209992017API.java 对外部程序暴露的工具方法类,是SDK统一对外的静态方法类,包含常用的查询、设置、获取、启动服务等等动作方法,开发者可在依赖的程序中直接调用即可。
  config 存放SDK的配置工具类和加载配置的工具类文件。
    ConfigParam.java 配置参数类,该类中有SDK常用的配置参数,配置参数均有默认值,开发者可自行修改。
    LoadConfig.java 配置加载工具类,该类用于加载配置文件,并加载到ConfigParam类中,默认加载 resources\gbt20999_2017_sdkconfig.properties 资源目录中的属性配置文件。
  constant 常量定义文件目录,里面有应用、业务、通用、正则等定义好的常量属性。
    CommonConstant.java 通用常量定义。
    GBTConstant.java GBT常量定义,将GBT-20999-2017标准中定义的常量,封装到GBTConstant类中,方便开发者使用。
  core 存放SDK核心类文件,里面有具体详细解析各数据类、对象、属性、元素等。
    custom 存放自定义类文件,如:自定义设备运行状态。
      ClientRunStatus_Custom.java 此类被实例的ClientInfo里的内部类定时调用,第三方开发者可根据自己需要重写此类,以保证将自己定义查询的心跳内容输送给应用程序。
    index 存放默认主要入口文件。
      DoAllDataFrameIndex.java 处理全部帧数据总入口,此类可以被Netty的TCP处理器和UDP处理器调用。
    packagesetvalue 存放数据帧解析类文件。
      SetParamValueUtil.java 设置参数工具类,包含需要事务的设置和非事务的设置。
    parseresponse 存放各数据类的数据帧解析类文件,解析数据时是被结果池对象调用的,结果池的数据是由Netty处理器调用的,这样便可以达到层层调用解析数据,返回至结果池中。本目录的类在通常情况下是被 ParseConvertDataType_Detail.java 类所调用的,主要用于解析基本信息的各个属性数据值。
      DataTypeID1_DeviceInfo.java 数据类1:解析基本信息。
      DataTypeID2_BasicInfo.java 数据类2:解析基本信息。
      DataTypeID3_LightGroupInfo.java 数据类3:解析灯组信息。
      DataTypeID4_PhaseInfo.java 数据类4:解析相位信息。
      DataTypeID5_DetectorInfo.java 数据类5:解析检测器信息。
      DataTypeID6_PhaseStageInfo.java 数据类6:解析相位阶段信息。
      DataTypeID7_SecurityInfo.java 数据类7:解析安全信息。
      DataTypeID8_UrgentFirst.java 数据类8:解析安全信息。
      DataTypeID9_PlanInfo.java 数据类9:解析方案信息。
      DataTypeID10_TransitRestrain.java 数据类10:解析过渡信息。
      DataTypeID11_TimeTable.java 数据类11:解析日计划信息。
      DataTypeID12_ScheduleTable.java 数据类12:解析调度信息。
      DataTypeID13_RuntimeStatus.java 数据类13:解析运行状态。
      DataTypeID14_TrafficData.java 数据类14:解析交通数据。
      DataTypeID15_AlarmData.java 数据类15:解析报警数据。
      DataTypeID16_FaultData.java 数据类16:解析故障数据。
      DataTypeID17_CenterCtrl.java 数据类17:解析中心控制。
      DataTypeID18_CommandPipeline.java 数据类18:解析命令管道。
    querydatatypes 存放查询整个数据类的文件。
      Query_ALL_ActualNum.java 查询所有数据类对应配置表的实际能力数量值。
      Query_DataType1_DeviceInfo.java 查询设备信息数据类中所有属性。
      Query_DataType2_BasicInfo.java 查询基础信息数据类中所有属性。
      Query_DataType3_LightGroupInfo.java 查询全部灯组信息数据类中所有属性。
      Query_DataType4_PhaseInfo.java 查询所有相位信息数据类中所有属性。
      Query_DataType5_DetectorInfo.java 查看所有检测器信息数据类中所有属性。
      Query_DataType6_PhaseStageInfo.java 查看所有相位阶段信息数据类中所有属性。
      Query_DataType7_SecurityInfo.java 查询全部相位安全信息配置数据类中所有属性。
      Query_DataType8_UrgentFirst.java 查询紧急优先数据类中所有属性。
      Query_DataType9_PlanInfo.java 查询所有方案信息据类中所有属性。
      Query_DataType10_TransitRestrain.java 查询全部过滤约束数据类中所有属性。
      Query_DataType11_TimeTable.java 查询所有日计划数据类中所有属性。
      Query_DataType12_ScheduleTable.java 查询所有调度表配置信息类中所有属性。
      Query_DataType13_RuntimeStatus.java 查询所有运行状态类中所有属性。
    sigdevicectrl 信号机控制模块,该目录下包含了对下位信号机控制的容器设计。
      container 下位机控制容器,每次针对同一台下位机的控制,都有一个当前控制的对象,这些全部对象存放在容器中。
        SigCtrlModelContainer.java 信号机控制容器工具类,里面有着对控制对象的管理,以及控制对象的创建等等。
      model 控制模型对象,上位机每操作一次会产生一个控制模型对象,该对象会保存该次操作的参数,以及其它控制信息。
        SigCtrlModelChannel.java 信号机控制模型对象即控制管道,不论上位机是否多少个控制线程来源,最终都只会创建针对这一个信号机一个控制模型对象,该对象会保存该次操作的参数,以及其它控制信息。
    transaction 控制事务对象,该对象会保存该次操作的参数,以及其它控制信息。
      TradeFollow.java 事务交易跟踪的模型动作类,该中存放了所有交易跟踪的模型动作方法,如:初始事务、进行事务、审核事务、完成事务等。
      TransactionContainer.java 事务容器,里面会存放多个事务对象,每个事务对象都有各自的执行线程去对需要设置的数据进行事务流程的跟踪。
      TransactionIDUtil.java 事务ID的工具类,用于生成事务ID。
      TransactionUtil.java 事务工具类,里面定义了标准文档中需要参与事务的数据OID信息映射,可供在设备数据时,对指令数据进行事务与非事务的数据分批计算。
    util 核心模块包中的工具类目录,里面有查询、设置相关的工具类。
      QueryUtil.java 查询指令工具类,在此类中,主要是要调用SendOrderUtil.java类中的方法。
      SetUtil.java 设置工具类,在此类中,主要是要调用SendOrderUtil.java类中的方法。
      SendOrderUtil.java 发送指令工具类,本工具类用于发送指令数据帧,要求传入的数据帧长度不超过缓冲区大小。工具类会自动从客户端连接管理容器中获取对应下位机的连接对象,并调用其字节发送方法执行指令传输。
      SetUtilWithTradeFollow.java 设置工具类携带事务,针对需要参与事务的数据进行设置,在本类的发送设置方法中,会创建事务对象。
  kit 项目中常用的一些工具类,其与下面的util包其实都是存放工具类的,不过一些是以Kit为结尾文件名,一些是以Util为结尾文件名,有些类在开发初期时包路径声明的有些随意了,各位江湖道友还多包涵。
    other 里面包含项目中常用的工具类,如:报警类型值工具类、字节处理工具类、封装JSON数据体工具类等。
      AlarmDataTypeValueKit.java 解析报警数据类型与数据值,解析机制参考于GBTConstant.java类AlarmType子类中注释所写而解析,该类下的方法appendTypeAndValueParseDataByte4GBT20999_2017.javadoTrapDataDetail方法else if(dataTypeID == GBTConstant.DataTypeID.DATATYPEID_ALARM_DATA) 块所调用,对报警类型值和报警数据值进行解析并附带相应中文描述内容。
      ByteKit.java 字节操作相关工具类,本SDK程序中,使用了Netty框架对字节进行解析,并协同Hutool库的字节工具类一起完成字节数据解析动作。
      PackageJSONHeadBodyKit.java 封装JSON头体工具类,在向引用SDK的JAVA程序传送数据时,需要对每个数据进行包装一层,为其声明好数据类型,然后将数据放入消息推送器中,在接收处理数据的静态方法中可以根据数据类型标识进行其它业务处理。
    string 处理String数组相关工具类。
      StringArrayKit 自定义String数组相关工具类。
  model SDK项目中外围声明的模型对象,如:数据帧类、数据帧里的数据值、设置查询指令、前世数据帧类。
    DataFrameInfo.java 数据帧信息类,将7E开头7D结尾的数据帧,重新定义封装成DataFrameInfo的JAVA类,并提供了一些数据帧与对象相互转换的常用方法。
    DataFrameValue.java 数据帧里的数据值,该类型对象在DataFrameInfo中是多值集合形式存在。
    Instruct.java 动作指令,即查询、设置动作时的数据索引对象。里面包含了数据类ID、对象ID、属性ID、元素ID、数据值等信息。
    PrelifeDataFrames.java 数据帧的前世模型类,数据帧最终成型时,应该是由多个数据值形成的多个数据帧对象,即多个DataFrameInfo类对象。查询和设置动作时,将所有的数据类、对象、属性、元素转换成数据帧的前世类,再由前世类进行“转世”动作,转成一个或多个数据帧。
  msg 消息推送模块,由于当前SDK程序是被其它JAVA应用依赖引入的,所以SDK产生的数据需要直接推送回应用项目的代码中,这里存放了消息推送模块,利用的是JAVA反射将数据推送到应用项目代码中。
    ImitateReceive.java 模拟接收数据消息的接收类,开发者可以根据这个类仿写自己程序中的类,这样通过配置便可以将数据从SDK程序推送至我们自己的应用中了。
    PushMsgUtil.java 消息推送器,根据ConfigParam.MsgParam.PUSH_CLASS_FULLPATHConfigParam.MsgParam.PUSH_METHOD_NAME的配置,利用JAVA反射将数据推送至应用项目指定的静态方法中去,建议:开发者最好在自己的数据接收类中使用生产消费模式,因为推送的数据量可能会较大,避免程序的线程阻塞。
  result SDK数据通讯结果池机制模块,即查询、设置动作是需要下位机返回对应结果数据的。在结果池的设计中,可以通过设置超时时间,来判断下位机是否已经返回了结果数据,如果超时,则认为下位机没有返回结果数据,则需要重新发送指令。
    container 结果池容器目录,里面存放结果池容器类。
      ResultPoolContainer.java 结果池容器类,该类对象中存放了结果池对象。上位机向信号机做查询与设置等指令时,收集信号机响应结果应答的容器。
    model 结果池模型目录,里面存放结果池模型类。
      WaitResultData.java 等待结果数据类,该类对象中存放了等待结果数据。是结果池容器中的对象类。
    util 结果池工具类目录,里面存放结果池工具类。
      WaitResultDataUtil.java 等待结果数据工具类。
  server 服务器模块,里面存放了TCP或UDP相关的Netty服务器类。
    channelinitializer Netty的初始化管道类,里面有TCP管道和UDP的管道。
      GBTTCPServerChannelInitializer.java TCP服务器管道类,定义了设置心跳监控、解码器、编码器、业务数据处理器类等。
      GBTUDPServerChannelInitializer.java UDP服务器管道类,定义了解码器、编码器、业务数据处理器类等。
    connectioncontainer Netty客户端的连接容器类,里面存放了连接对象。
      ClientContainer.java 客户端容器,用于存放下位机设备连接对象的容器,里面有自动清理的线程以及在线设备的集体心跳线程设计。
      ClientInfo.java 客户端信息类,该类下定义了非常多的连接属性,并持有网络通讯管道对象,是最终数据发送的端点。SetUtil.javaQueryUtil.java工具类,最终都是调用到了容器类里面的本类对象数据发送方法。
    customcodes Netty自定义处理码类,里面存放了自定义处理码类。
      CustomByteToMessageDecoder.java 自定义TCP的解码器,在这里针对数据字节进行了转义字符处理、TCP的数字粘包与半包的处理、验证数据校验帧等等。
      CustomByteToMessageEncoder.java 自定义TCP的编码器,对数据进行转义处理,若数据体内有7E、7D之类的数据字节时,需要对其进行转义。
      CustomGBT4UDPDecoder.java 自定义UDP的解码器。
      CustomGBT4UDPEncoder.java 自定义UDP的编码器。
    handler Netty的处理类,里面存放了处理类。
      GBT209992017Handler4TCP.java GBT服务端处理器Handler,使用此处理器说明,当前上位机SDK程序是TCP的服务端,而下位机设备是客户端。
      GBT209992017Handler4UDP.java UDP服务端处理器Handler。
  util 项目中常用的一些工具类,其与上面的kit包其实都是存放工具类的,不过一些是以Kit为结尾文件名,一些是以Util为结尾文件名。
    ByteArrayStr16ToString.java 16进制串转10进制自定义编写的工具类。
    CRC16Util.java CRC-16 算法生成多项式为: x^16 + x^12 + x^2 + 1
    FrameFlowUtil.java 帧流水号生成工具类。
    GBT20999ByteUtil.java 20999协议字节工具类,包括:CRC校验、获取报文长度等。
    GBT20999DictUtil.java 字典工具类,用于对resources目录下的GBT20999Dict.json文件进行解析获取的工具类。
    IntegerToHexUtil.java 自定义封装的16进制工具类。
    ParseConvertDataType_Detail.java 详细解析、转换各数据类型的元素值,里面的解析方法由ParseDataByte4GBT20999_2017.java类引用。
    ParseDataByte4GBT20999_2017.java 解析国标协议工具类,这里方法由ResultPoolContainer.java结果池类引用,因为结果池对象在接收到应答数据时,需要对应答数据进行解析。
resources 当前项目的资源文件目录,里面可以存放一些图片、图标及其它资源文件。
  gbt20999_2017_sdkconfig.propertie SDK属性配置文件。
  GBT20999Dict.json GBT20999-2017的字典文件,将国标文件所使用的常量定义到JSON配置中,再由GBT20999DictUtil.java可以解析配置文件,生成字典对象。
  remark.txt 对项目进行简单的描述。
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
4年前
java 学习 语言特色。
1.总体来说java像一个不开窍的规则制定者。包名,类型,太实在了。文件名和类名必须对应,一个文件只能有一个PUBLIC的类。定义了包名,必须按这个路径去放置目标文件。相比c的虚拟命名空间。可能java最初就是设计出来让人用记事本来写代码的?而且还怕人找不到类放在哪个目录,哪个文件下。一个文件只能一个public
Wesley13 Wesley13
4年前
Java项目读取resources资源文件路径那点事
  今天在Java程序中读取resources资源下的文件,由于对Java结构了解不透彻,遇到很多坑。正常在Java工程中读取某路径下的文件时,可以采用绝对路径和相对路径,绝对路径没什么好说的,相对路径,即相对于当前类的路径。在本地工程和服务器中读取文件的方式有所不同,以下图配置文件为例: !(https://oscimg.oschina.net/o
Stella981 Stella981
4年前
Html5混合开发环境的H5牛牛平台搭建
工具:AndroidSDK,JavaJDK,Node.js,Cordova、Ionic、python;1、androd需要配置:jdk路径和sdk配置;jdk配置环境变量:JAVA\_HOME:jdk安装目录,如:F:\\Java\\jdk1.8.0\_11%JAVA\_HOME%\\bin;%JAVA\_HOME%\\jre\\bi
Stella981 Stella981
4年前
JeePlus:代码结构
ylbtechJeePlus:代码结构1.返回顶部1、代码结构1.文件结构1.1.源码目录src/main/javacom.jeeplusJeeplus目录录├common公共模块存放目录│├SMS短信工具类具类│├
Stella981 Stella981
4年前
File类方法小结
File类的方法中,除构造函数外,常用方法的几个用处:1.创建文件、目录,删除文件、目录;2.获取及设置文件属性。3\.搜索文件列表4.……还能获取分区信息?构造方法:构造方法摘要File(http://my.oschina.net/u/java/io/File.htmlFile(java.io.File,j
Wesley13 Wesley13
4年前
JavaSE IO流
1.文件操作:在Java中如何操作磁盘中文件,java中把文件作为一个对象进行操作   File类进行表示磁盘中的文件:   路径:     绝对路径:从磁盘的根目录进行表示如:E:\\vedio\\20170713\\JavaSE\\T\_day01\\question\\常见面试题\_01.t
Wesley13 Wesley13
4年前
Java多线程系列(1)
本章主要内容有:1.线程进程的区别2.线程的生命周期3.Java内存模型原子性,可见性及有序性4.线程池及Java实现1.线程进程的区别线程:程序运行的最小单位进程:资源分配的最小单位一个进程可以有多个线程,多个线程共享进程里面的数据线程间通讯相对更加方便,进程间通讯需要通过IPC(
Stella981 Stella981
4年前
Elasticsearch6.7 Kibana6.7 Windows安装过程
一、前提条件  Java1.8.131以上SDK确认安装,不能是预览版(预览版时只能localhost访问,不能使用IP访问)  JAVA\_HOME环境变量设置OK二、Elasticsearch6.7安装  1、解压安装文件  2、config目录,修改elasticsearch.yml文件,设置cluster.name、node.na
ChinaGBT创始人
ChinaGBT创始人
Lv1
君子温文尔雅而豪气纵横!
文章
3
粉丝
0
获赞
0