Skip to content

Commit 80da56f

Browse files
author
NEVSTOP
committed
备份设计
1 parent 9ece100 commit 80da56f

File tree

9 files changed

+252
-84
lines changed

9 files changed

+252
-84
lines changed

Protocol Design.v0.(zh-cn).md

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
# CSM TCP Router 网络传输协议定义
2+
3+
CSM-TCP-Router 中 TCP 数据包格式定义如下:
4+
5+
```
6+
| 数据长度(4B) | 版本(1B) | TYPE(1B) | FLAG1(1B) | FLAG2(1B) | 文本数据 |
7+
╰─────────────────────────── 包头 ──────────────────────────╯╰──── 数据长度字范围 ────╯
8+
```
9+
10+
## 包头字段
11+
12+
### 数据长度(4字节)
13+
14+
数据长度为4字节,表示数据字段的长度。
15+
16+
### 版本信息(1字节)
17+
18+
版本信息为1字节,表示数据包的版本信息。当前的版本信息为 `0x01`。可以根据版本信息进行不同的处理,实现向前兼容。
19+
20+
### 数据包类型(1字节)
21+
22+
数据包类型用于描述数据包的内容,为枚举类型,目前支持的数据包类型有:
23+
24+
- 信息数据包(info) - `0x00`
25+
- 错误数据包(error) - `0x01`
26+
- 指令数据包(cmd) - `0x02`
27+
- 同步响应数据包(resp) - `0x03`
28+
- 异步响应数据包(async-resp) - `0x04`
29+
- 订阅返回数据包(status) - `0x05`
30+
31+
### FLAG1类型(1字节)
32+
33+
FLAG1用于描述数据包的属性, 保留字段。
34+
35+
### FLAG2类型(1字节)
36+
37+
FLAG2用于描述数据包的属性, 保留字段。
38+
39+
## 数据内容
40+
41+
### 信息数据包(info)
42+
43+
info 数据包的数据内容为提示信息内容,纯文本格式。
44+
45+
### 错误数据包(error)
46+
47+
error 数据包的数据内容为错误信息内容,为纯文本格式,文本格式定为 CSM Error 格式。
48+
49+
> [!NOTE]
50+
> CSM Error 格式为:"[Error: `错误代码`]`错误字符串`"。
51+
>
52+
53+
### 指令数据包(cmd)
54+
55+
指令数据包的数据内容为指令内容,格式为 CSM 本地指令格式,支持:
56+
57+
- 同步(-@)
58+
- 异步(->)
59+
- 无返回异步(->|)消息,
60+
- 注册(register)
61+
- 注销(unregister)。
62+
63+
> [!NOTE]
64+
> 举例:假设本地程序存在名为DAQmx的CSM模块,具有一个接口为 "API: Start Sampling".
65+
> 本地我们可以发送消息给这个模块,控制采集的启停:
66+
>
67+
> - API: Start Sampling -@ DAQmx // 同步消息
68+
> - API: Start Sampling -> DAQmx // 异步消息
69+
> - API: Start Sampling ->| DAQmx // 异步无返回消息
70+
>
71+
> 现在只要通过TCP连接,发送同样的文本消息,就可以实现远程消息。
72+
>
73+
74+
> [!NOTE]
75+
> 举例:假设本地程序存在名为A的CSM模块,不停的发送一个监控状态为 "Status", 另外一个模块B可以订阅这个状态。
76+
>
77+
> - status@a >> api@b -><register> // 订阅状态
78+
> - status@a >> api@b -><unregister> // 取消订阅
79+
>
80+
> 现在只要通过TCP连接,发送同样的文本消息,就可以实现远程控制底层 csm 模块的订阅
81+
>
82+
> 但是如果发送中缺省了订阅方(api@b), 则表示连接到 tcp-router 的 client订阅状态
83+
>
84+
> - status@a -><register> // client 订阅 A 模块status
85+
> - status@a >> api@b -><unregister> // 取消 client 订阅 A 模块status
86+
>
87+
> 当 A 模块发出 Status 后,client 将自动收到 `status` 数据包
88+
>
89+
90+
### 同步响应数据包(resp)
91+
92+
当执行完毕同步消息指令后,tcp-router 将 response 返回给 client.
93+
94+
### 异步响应数据包(async-resp)
95+
96+
当执行完毕同步消息指令后,tcp-router 将 response 返回给 client. 格式为:"`Response数据` <- `异步消息原文`"
97+
98+
### 订阅返回数据包(status)
99+
100+
Client 订阅了CSM模块的状态,当状态发生时,client 会自动收到此数据包。
101+
102+
数据包格式为 "状态名 >> `状态数据` <- 发送模块"

Protocol Design.v1.(zh-cn).md

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
# CSM TCP Router 网络传输协议定义
2+
3+
CSM-TCP-Router 中 TCP 数据包格式定义如下:
4+
5+
```
6+
╭────────────────── CRC校验范围 ────────────────────╮
7+
| 数据长度(4B) | 版本(1B) | FLAG1(1B) | FLAG2(1B) | TYPE(1B) | 文本长度(4B) | 文本数据 | 二进制长度(4B) | 二进制数据 | CRC(2B) |
8+
╰─────────────────────────── 包头 ──────────────────────────╯╰──────────────────── 数据长度字范围 ──────────────────────────╯
9+
```
10+
11+
## 包头字段
12+
13+
### 数据长度(4字节)
14+
15+
数据长度为4字节,表示数据字段的长度。
16+
17+
### 版本信息(1字节)
18+
19+
版本信息为1字节,表示数据包的版本信息。当前的版本信息为 `0x01`。可以根据版本信息进行不同的处理,实现向前兼容。
20+
21+
### FLAG1类型(1字节)
22+
23+
FLAG1用于描述数据包的属性
24+
25+
``` ini
26+
FLAG_TEXT = 0b00000001 # 存在文本数据(置1时需解析文本长度+内容)
27+
FLAG_BIN = 0b00000010 # 存在二进制数据(置1时需解析二进制长度+内容)
28+
FLAG_CRC = 0B00010000 # 存在CRC校验(置1时需解析CRC校验)
29+
```
30+
31+
### FLAG2类型(1字节)
32+
33+
FLAG2用于描述数据包的属性, 保留字段。
34+
35+
### 数据包类型(1字节)
36+
37+
数据包类型用于描述数据包的内容,为枚举类型,目前支持的数据包类型有:
38+
39+
- 信息数据包(info) - `0x00`
40+
- 错误数据包(error) - `0x01`
41+
- 指令数据包(cmd) - `0x02`
42+
- 同步响应数据包(resp) - `0x03`
43+
- 异步响应数据包(async-resp) - `0x04`
44+
- 订阅返回数据包(status) - `0x05`
45+
46+
## 数据内容
47+
48+
当 FLAG1 的 `FLAG_TEXT` 为1时,数据包中存在文本数据。文本数据的格式为:`文本数据长度(4字节)` | `文本数据内容`
49+
当 FLAG1 的 `FLAG_BIN` 为1时,数据包中存在二进制数据。二进制数据的格式为:`二进制数据长度(4字节)` | `二进制数据内容`
50+
51+
> [!NOTE]
52+
> `数据包类型`决定了数据内容的格式, 主要规定了文本数据的内容。
53+
>
54+
55+
> [!NOTE]
56+
>
57+
> 目前当文本数据格式中存在`MassData`类型的参数或返回数据时,才会有二进制数据。
58+
>
59+
60+
### 文本数据
61+
62+
#### 信息数据包(info)
63+
64+
info 数据包的数据内容为提示信息内容,纯文本格式。
65+
66+
#### 错误数据包(error)
67+
68+
error 数据包的数据内容为错误信息内容,为纯文本格式,文本格式定为 CSM Error 格式。
69+
70+
> [!NOTE]
71+
> CSM Error 格式为:"[Error: `错误代码`]`错误字符串`"。
72+
>
73+
74+
#### 指令数据包(cmd)
75+
76+
指令数据包的数据内容为指令内容,格式为 CSM 本地指令格式,支持:
77+
78+
- 同步(-@)
79+
- 异步(->)
80+
- 无返回异步(->|)消息,
81+
- 注册(register)
82+
- 注销(unregister)。
83+
84+
> [!NOTE]
85+
> 举例:假设本地程序存在名为DAQmx的CSM模块,具有一个接口为 "API: Start Sampling".
86+
> 本地我们可以发送消息给这个模块,控制采集的启停:
87+
>
88+
> - API: Start Sampling -@ DAQmx // 同步消息
89+
> - API: Start Sampling -> DAQmx // 异步消息
90+
> - API: Start Sampling ->| DAQmx // 异步无返回消息
91+
>
92+
> 现在只要通过TCP连接,发送同样的文本消息,就可以实现远程消息。
93+
>
94+
95+
> [!NOTE]
96+
> 举例:假设本地程序存在名为A的CSM模块,不停的发送一个监控状态为 "Status", 另外一个模块B可以订阅这个状态。
97+
>
98+
> - status@a >> api@b -><register> // 订阅状态
99+
> - status@a >> api@b -><unregister> // 取消订阅
100+
>
101+
> 现在只要通过TCP连接,发送同样的文本消息,就可以实现远程控制底层 csm 模块的订阅
102+
>
103+
> 但是如果发送中缺省了订阅方(api@b), 则表示连接到 tcp-router 的 client订阅状态
104+
>
105+
> - status@a -><register> // client 订阅 A 模块status
106+
> - status@a >> api@b -><unregister> // 取消 client 订阅 A 模块status
107+
>
108+
> 当 A 模块发出 Status 后,client 将自动收到 `status` 数据包
109+
>
110+
111+
#### 同步响应数据包(resp)
112+
113+
当执行完毕同步消息指令后,tcp-router 将 response 返回给 client.
114+
115+
#### 异步响应数据包(async-resp)
116+
117+
当执行完毕同步消息指令后,tcp-router 将 response 返回给 client. 格式为:"`Response数据` <- `异步消息原文`"
118+
119+
#### 订阅返回数据包(status)
120+
121+
Client 订阅了CSM模块的状态,当状态发生时,client 会自动收到此数据包。
122+
123+
数据包格式为 "状态名 >> `状态数据` <- 发送模块"
124+
125+
### 二进制数据
126+
127+
当大量数据需要进行传递时,使用二进制格式传输会在不损失精度的前提下节省带宽。目前支持 CSM MassData 数据格式,当文本描述中的参数、返回为 CSM MassData 数据时,MassData 指向的数据区域,将被放置在`二进制数据段` 传输。
128+
129+
> [!NOTE]
130+
> 举例,假设本地程序存在名为DAQmx的CSM模块,具有一个接口为 "API: Read Data", 返回的 Response 为 MassData 格式
131+
>
132+
> 通常返回的纯文本描述为 <MassData>Start:100;Length:1000
133+
>
134+
> 此时,MassData 指向的数据区域,将被放置在`二进制数据段` 传输。
135+
136+
## CRC校验
137+
138+
当 FLAG1 的 `FLAG_CRC` 为1时,数据包中存在CRC校验。CRC校验为2字节,校验范围为数据内容段,不包括包头。

README(zh-cn).md

Lines changed: 12 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -16,93 +16,21 @@
1616

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

19-
>
20-
> | `数据长度(4字节)` | `数据包类型(10字节)` | `数据内容` |
21-
>
19+
```
20+
| 数据长度(4B) | 版本(1B) | FLAG1(1B) | FLAG2(1B) | TYPE(1B) | 文本数据 |
21+
╰─────────────────────────── 包头 ──────────────────────────╯╰──── 数据长度字范围 ────╯
22+
```
2223

23-
### 数据长度
24+
数据包类型用于描述数据包的内容,为枚举类型,目前支持的数据包类型有:
2425

25-
数据长度为4字节,表示整个 tcp 数据包的长度,包括数据包类型和数据包内容。
26+
- 信息数据包(info) - `0x00`
27+
- 错误数据包(error) - `0x01`
28+
- 指令数据包(cmd) - `0x02`
29+
- 同步响应数据包(resp) - `0x03`
30+
- 异步响应数据包(async-resp) - `0x04`
31+
- 订阅返回数据包(status) - `0x05`
2632

27-
### 数据包类型
28-
29-
数据包类型用于描述数据包的内容,长度为10字节,不足10字节的用 `\0` 填充。
30-
31-
数据包类型相当于一个枚举类型,目前支持的数据包类型有:
32-
33-
- 信息数据包(info)
34-
- 错误数据包(error)
35-
- 指令数据包(cmd)
36-
- 同步响应数据包(resp)
37-
- 异步响应数据包(async-resp)
38-
- 订阅返回数据包(status)
39-
40-
### 数据内容
41-
42-
#### 信息数据包(info)
43-
44-
info 数据包的数据内容为提示信息内容,纯文本格式。
45-
46-
#### 错误数据包(error)
47-
48-
error 数据包的数据内容为错误信息内容,为纯文本格式,文本格式定为 CSM Error 格式。
49-
50-
> [!NOTE]
51-
> CSM Error 格式为:"[Error: `错误代码`]`错误字符串`"。
52-
53-
#### 参数/返回数据格式描述
54-
55-
同步(-@)、异步(->)、无返回异步(->|)消息都可能携带参数,`status` 数据包也会携带状态参数。
56-
57-
#### 指令数据包(cmd)
58-
59-
指令数据包的数据内容为指令内容,格式为 CSM 本地指令格式,支持同步(-@)、异步(->)、无返回异步(->|)消息,注册(register)、注销(unregister)。 参数格式见 [参数/返回数据包](#参数返回数据格式描述)
60-
61-
> [!NOTE]
62-
> 举例:假设本地程序存在名为DAQmx的CSM模块,具有一个接口为 "API: Start Sampling".
63-
> 本地我们可以发送消息给这个模块,控制采集的启停:
64-
>
65-
> - API: Start Sampling -@ DAQmx // 同步消息
66-
> - API: Start Sampling -> DAQmx // 异步消息
67-
> - API: Start Sampling ->| DAQmx // 异步无返回消息
68-
>
69-
> 现在只要通过TCP连接,发送同样的文本消息,就可以实现远程消息。
70-
>
71-
72-
> [!NOTE]
73-
> 举例:假设本地程序存在名为A的CSM模块,不停的发送一个监控状态为 "Status", 另外一个模块B可以订阅这个状态。
74-
>
75-
> - status@a >> api@b -><register> // 订阅状态
76-
> - status@a >> api@b -><unregister> // 取消订阅
77-
>
78-
> 现在只要通过TCP连接,发送同样的文本消息,就可以实现远程控制底层 csm 模块的订阅
79-
>
80-
> 但是如果发送中缺省了订阅方(api@b), 则表示连接到 tcp-router 的 client订阅状态
81-
>
82-
> - status@a -><register> // client 订阅 A 模块status
83-
> - status@a >> api@b -><unregister> // 取消 client 订阅 A 模块status
84-
>
85-
> 当 A 模块发出 Status 后,client 将自动收到 `status` 数据包
86-
>
87-
88-
#### 同步响应数据包(resp)
89-
90-
当执行完毕同步消息指令后,tcp-router 将 response 返回给 client.
91-
92-
- `Response数据` 格式见 [参数/返回数据包](#参数返回数据格式描述)
93-
94-
#### 异步响应数据包(async-resp)
95-
96-
当执行完毕同步消息指令后,tcp-router 将 response 返回给 client. 格式为:"`Response数据` <- `异步消息原文`"
97-
98-
- `Response数据` 格式见 [参数/返回数据包](#参数返回数据格式描述)
99-
- `异步消息原文` 异步消息原文
100-
101-
#### 订阅返回数据包(status)
102-
103-
Client 订阅了CSM模块的状态,当状态发生时,client 会自动收到此数据包。
104-
105-
数据包格式为 "状态名 >> `状态数据` <- 发送模块"。`状态数据`格式见 [参数/返回数据包](#参数返回数据格式描述)
33+
详细的通讯协议定义, 见 [协议设计](/Protocol%20Design.v0.(zh-cn).md)
10634

10735
## 指令集
10836

src/Client/Client.vi

8 Bytes
Binary file not shown.
12 Bytes
Binary file not shown.
284 Bytes
Binary file not shown.
132 Bytes
Binary file not shown.
-3.22 KB
Binary file not shown.
-56 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)