Skip to content

ppyder/Communication-Component-Attempt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 

Repository files navigation

Communication-Component-Attempt

Develop COM methods.

通信组件开发


简介

此通信组件是为基于C#开发的上位机以及使用STM32开发的下位机提供后台信息交互服务的解决方案。

①上位机相应组件中包含了可选择的信道类型,简单的数据处理工具集以及方便重定义的通信协议接口。

②下位机提供了兼容同种通信协议的CAN和串口通信组件,支持自定义格式化数据包和随机任意长度数据的拆包发送和接收。同时在收发机制上提供了软件层次的模拟半双工机制。

综上,本组件实现了通信功能的封装操作,为使用带来方便。

上位机组件特性

0.目前为定长缓冲区收发

1.可定制的通信载体实现

  • 通用设置
    • 通过属性访问和清空通知文本缓冲区并可设置其大小
    • 通过属性设置该组件的信道类型
    • 致命通知以异常方式抛出,非致命通知存在上述通知文本缓冲区中。
    • 提供统一的发送数据方法。即基于所选的信道载体调用相应的发送方法即兴数据发送
  • 串口通信
    • 获取串口连接状态
    • 通过属性设置串口基本参数(串口号、波特率、数据位、停止位、校验位)
    • 提供的操作方法
      • 从外部实例化串口
      • 打开/关闭串口
      • 发送数据
      • 以线程方式接收数据
  • 网口通信
    • 获取网口连接状态
    • 通过属性设置网口基本参数(服务器IP、通信端口、视频流地址)
    • 提供的操作方法
      • 打开/关闭网口
      • 发送数据
      • 以线程方式接收数据
      • 加载指定视频地址的图像到特定的PictureBox

2.较灵活丰富的数据处理工具集

  • 数据转换
    • 字符数组与各类型数据的相互转换
    • 十六进制数转换为同义字符串
    • 将以HEX格式书写的字符串处理为同义字符数组
    • 将以字符格式书写的字符串处理为同义字符数组
  • 数据信息获取
    • 获取某个类型变量的大小
    • 获取几个整型数中较大的值
    • 获取几个变量类型中所占最大的内存空间大小
    • 获得一个短整型变量各个字节段的数据
  • 一些运算
    • 计算校验值
      • 求和校验

3.易于自定义和扩展的用户数据类型

  • 通过属性获取数据头、数据尾、数据内容的长度
  • 用户自定义数据格式和数据内容

note:

<1>.目前采用的收发方式是模拟半双工定长缓冲区数据收发。因此数据包具备相同的特性,即皆由数据头、数据内容以及数据尾构成。

<2>.其中,数据头内容包括长度为两个字节的固定数据头、指令类型、数据反馈和数据头校验;数据尾为整型校验值。

<3>.数据内容完全由用户自定义,以结构体形式体现。添加新的数据类型时需要进行的操作是:添加新的数据结构体、在枚举清单中添加代表该结构体的数据ID,实现解析此类数据的数据解析函数、在构造函数中增加获取新数据结构大小的指令、在数据处理委托数组中注册数据处理函数。

4.通信协议具体实现

  • 支持接收随机数据格式化数据,通过相应属性进行使能
  • 提供数据接收计数器以及正确/错误包统计功能
  • 提供数据流测速功能(待实现)
  • 提供可选的HEX格式和字符格式解析字符串数据
  • 提供可选的消息时间戳功能
  • 通过属性访问随机数据存储缓冲区,并在读取后自动清空
  • 随机数据缓冲区本质上是一个字符串变量,大小可指定
  • 针对格式化数据的具体通信协议实现
    • 模拟半双工机制
      • 一次发送完成后进入等待状态
      • 支持重连唤醒操作,即重置发送状态标识以重新激活发送动作
      • 实时记录本机和通讯方发出和接收到的消息类型,在通讯过程中进行检查,避免有效信息被覆盖
      • 支持在发送请求过程中识别通信中断和错误状态
    • 发送队列机制(目前还未使用数据结构Queue实现)
      • 存在三个发送空位,缺省以空白指令(优先级最低)填充
      • 如果三个空位中的特殊指令都没有被发送出去,阿么新的发送请求将会被丢弃
      • 按照时间顺序先后对发送的特殊指令进行响应
      • 指令之间存在优先级(未实现)
    • 基于用户数据定义的数据处理
      • 具备在随机数据中辨识格式化数据的能力
      • 基于用户提供的方法进行数据解析
      • 将错误包以通知的形式存进通知缓冲区以便查错

5.在组件中增删和修改协议内容的操作步骤

  • <待填充>

6.该组件在范例工程中的位置

相关目录为:.\UpperTemp\TempUpper\TempUpper\...

  1. InterfaceToSlave.cs
  2. UserDatas.cs
  3. UserData_MsgDefine.cs
  4. ComEntity.cs
  5. DataTools.cs

下位机组件特性

软件基础为HAL库,使用Cube进行基底层外设参数配置。

0.目前为定长缓冲区收发

使用DMA中断进行双缓冲区数据接收,当数据接满至缓冲区长度时触发中断,进行定长数据处理。

同时具备数据头位置检索及其位置矫正的功能:
数据头不在首位的数据包将被丢弃,一次数据头位置错误将会在纠正操作中引起三个错误包的产生。

1.可选的通信外设(底层硬件接口)

  • 串口通信

    • 格式化数据发送方法
    • 随机数据发送方法
    • 接收回调函数
      • 使用组件映射函数获取处理本次数据接收的组件号
      • 切换缓冲区地址、重置接收数据长度以为下次数据的接收做准备;
      • 通过组件号对通信组件集合进行访问,调用其对应的数据处理函数进行数据处理;
      • 翻转缓冲区标志、更新本次接收长度;
  • CAN通信

    • 格式化数据发送方法
    • 随机数据发送方法
    • 数据的拆包发送机制
    • 允许一个组件下挂载一个自定义通信协议的设备以及任意多个非格式化单帧数据通信的设备
    • 接收回调函数
      • 接收以获得本帧数据及其数据头
      • 通过组件映射函数获取本次数据接收的组件号
      • 按ID分类处理数据

2.可在软件层次对发送模式进行约束(软件约束)

  • 模拟半双工机制
    • 发送消息后进入等待状态。允许下条消息发送的条件是:
      1. 存在一个发送请求(调用发送函数);
      2. 通信的对方已经发回应答消息(将isGetMsg标志置一);
    • 允许断线重连
    • 当上述isGetMsg标志为0时,产生的发送请求将会被驳回,该驳回次数将会被记录在相应的变量中。
    • 提供通信阻塞状态的指示,并提供通信阻塞异常处理接口,触发异常处理的条件是:
      1. 允许驳回的最大次数为非零值;
      2. 记录的驳回次数达到所允许的最大值;
    • 一次发送结束后,将驳回次数计数器清零。
    • 一次接收结束后,将isGetMsg标志置一。

3.易于自定义和扩展的通信协议

  • 用户自定义数据格式和数据内容示例:

note:

<1>.目前采用的收发方式是模拟半双工定长缓冲区数据收发。因此数据包具备相同的特性,即皆由数据头、数据内容以及数据尾构成。

<2>.其中,数据头内容包括长度为两个字节的固定数据头、指令类型、数据反馈和数据头校验;数据尾为整型校验值。

<3>.数据内容完全由用户自定义,以结构体形式体现。添加新的数据类型时需要进行的操作是:添加新的数据结构体、在枚举清单中添加代表该结构体的数据ID,实现解析此类数据的数据解析函数、在构造函数中增加获取新数据结构大小的指令、在数据处理委托数组中注册数据处理函数。

4.在组件中增删和修改协议内容的操作步骤

  • <待填充>

5.该组件在范例工程中的位置

相关目录为:

  1. 通信组件底层:.\STM32_Demo_F4\ClassDemo\HEROLib\Dev_Interface\Comunication\...
  1. Com_CanDriver.c    -- Can驱动
  2. Com_CanDriver.h
  3. ComStructDef.h    -- 结构体定义
  4. Comunication.c     -- 通信组件机制实现
  5. Comunication.h
  6. Com_UserModules.c  -- 用户使用的通信组件信息注册
  7. Com_UserModules.h
  8. Com_Functions.h   -- 通信组件操作函数声明
  1. 半双工机制实现:.\STM32_Demo_F4\ClassDemo\HEROLib\Universal\Simu_Half_Duplex\...
  1. Half_Duplex.c
  2. Half_Duplex.h
  1. 具体与某设备的通信组件:.\STM32_Demo_F4\ClassDemo\HEROLib\Devices\...
  1. .\BSP_Communication\...   -- 板间通信
  2. .\PC_Communication\...     -- 与小电脑通信
  3. .\Master_Communication\...  -- 与上位机通信
  4. .\M3508\...          -- 与M3508通信

@ppyder 2019.04.21