Skip to content

Latest commit

 

History

History
93 lines (62 loc) · 3.45 KB

File metadata and controls

93 lines (62 loc) · 3.45 KB

CSM-TCP-Router

English | 中文

本仓库演示如何构建一个可复用的TCP通讯层(CSM-TCP-Router),将本地程序变成可远程控制的TCP服务器,展示了CSM框架隐形总线机制的优势。

功能介绍

framework

  • 所有本地可发送的CSM消息,均可通过TCP连接以CSM同步或异步格式转发给本地程序。
  • 基于JKI-TCP-Server库,支持多个TCP客户端同时连接。
  • [client] 提供一个标准的TCP客户端,可以连接到服务器,验证远程连接、消息发送等功能。

通讯协议

CSM-TCP-Router 中 TCP 数据包格式定义如下:

| 数据长度(4B) | 版本(1B) | TYPE(1B) | FLAG1(1B) | FLAG2(1B) |      文本数据          |
╰─────────────────────────── 包头 ──────────────────────────╯╰──── 数据长度范围 ─────╯

数据包类型字段为枚举值,用于描述数据包内容,目前支持以下类型:

  • 信息数据包(info) - 0x00:服务端在客户端连接时(欢迎消息)和连接关闭时(告别消息)发送
  • 错误数据包(error) - 0x01
  • 指令数据包(cmd) - 0x02
  • 指令响应数据包(cmd-resp) - 0x03
  • 同步响应数据包(resp) - 0x04
  • 异步响应数据包(async-resp) - 0x05
  • 状态广播数据包(status) - 0x06
  • 中断广播数据包(interrupt) - 0x07

详细的通讯协议定义, 见 协议设计

指令集

image

1. CSM 消息指令集

由现有基于CSM开发的代码定义。CSM框架通过隐形总线传递消息,无需侵入原有代码即可实现远程通讯。

例如,本程序中的AI CSM模块提供了:

  • Channels: 列出所有的通道
  • Read:读取指定通道的值
  • read all:读取所有通道的值

这些消息可以通过TCP连接发送给本地程序,实现远程控制。

2. CSM-TCP-Router 指令集

由CSM-TCP-Router通讯层定义,通过指令暴露CSM模块的管理功能,实现远程控制。

  • List: 列出所有CSM模块
  • List API: 列出指定模块的所有API
  • List State: 列出指定模块的所有CSM状态
  • Help: 显示模块的帮助文件(存储在CSM VI的Documentation字段)
  • Refresh lvcsm: 刷新缓存文件

[Client Only] 3. CSM-TCP-Router Client 指令集

代码中内置了一个标准的CSM-TCP-Router客户端,包含一些专属内置指令,这些指令在基于指令集API进行二次开发时无法使用。

  • Bye: 断开连接
  • Switch:切换模块,便于输入时省略模块名,不带参数时切换回默认模式
  • TAB键: 自动定位到输入对话框

CSM-TCP-Router Client Console

使用方法

  1. 在VIPM中安装本工具及依赖
  2. 在CSM的范例中打开范例工程CSM-TCP-Router.lvproj
  3. 启动代码工程中的CSM-TCP-Router(Server).vi
  4. 启动Client.vi,输入服务器的IP地址和端口号,点击连接
  5. 输入指令,点击发送,可以在控制台看到返回的消息
  6. 在Server程序的界面log中,可以看到执行过的历史消息
  7. 在Client.vi中输入Bye断开连接
  8. 关闭Server程序

下载

通过VIPM搜索CSM TCP Router,即可下载安装。

依赖

  • Communicable State Machine(CSM) - NEVSTOP
  • JKI TCP Server - JKI
  • Global Stop - NEVSTOP
  • OpenG