2.0协议完善加简单交管配置
This commit is contained in:
+34
-34
@@ -2,7 +2,7 @@
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>MagFass2Car Guide</title>
|
||||
<title>Mag2Car Guide</title>
|
||||
<style>
|
||||
@page { size: A4; margin: 18mm 16mm; }
|
||||
body { font-family: "Microsoft YaHei", "Segoe UI", sans-serif; color: #222; line-height: 1.55; font-size: 11pt; }
|
||||
@@ -25,10 +25,10 @@
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>MagFass2Car(FASS 2.0)使用指南</h1>
|
||||
<h1>Mag2Car(FASS 2.0)使用指南</h1>
|
||||
<blockquote><p>适用对象:第一次接触磁导航 + FASS 2.0 的调试/实施人员 </p></blockquote>
|
||||
<blockquote><p>插件:`StandardScene.Magnetic.dll` </p></blockquote>
|
||||
<blockquote><p>车型:`MagFass2Car` </p></blockquote>
|
||||
<blockquote><p>车型:`Mag2Car` </p></blockquote>
|
||||
<blockquote><p>最后更新:2026-07</p></blockquote>
|
||||
<hr/>
|
||||
<h2>目录</h2>
|
||||
@@ -57,7 +57,7 @@
|
||||
</ol>
|
||||
<hr/>
|
||||
<h2>1. 这套系统能做什么</h2>
|
||||
<p><code>MagFass2Car</code> 是 StandardScene **磁导航平台插件**里的 FASS 2.0 车型,主要能力:</p>
|
||||
<p><code>Mag2Car</code> 是 StandardScene **磁导航平台插件**里的 FASS 2.0 车型,主要能力:</p>
|
||||
<table>
|
||||
<thead><tr>
|
||||
<th>能力</th>
|
||||
@@ -96,12 +96,12 @@
|
||||
<h3>步骤 1:加载插件</h3>
|
||||
<p>确认场景已加载 <code>scene.mag</code>(<code>StandardScene.Magnetic.scene.json</code>),提供:</p>
|
||||
<ul>
|
||||
<li>车型:<code>MagCar</code>、<code>MagFass2Car</code></li>
|
||||
<li>进程:<code>EventCarMission</code>、<code>MagFass2LoopMission</code></li>
|
||||
<li>车型:<code>MagCar</code>、<code>Mag2Car</code></li>
|
||||
<li>进程:<code>EventCarMission</code>、<code>Mag2LoopMission</code></li>
|
||||
</ul>
|
||||
<h3>步骤 2:添加一辆车</h3>
|
||||
<ol>
|
||||
<li>在场景中添加车型 **<code>MagFass2Car</code>**</li>
|
||||
<li>在场景中添加车型 **<code>Mag2Car</code>**</li>
|
||||
<li>填写基本参数(UDP 模式示例):</li>
|
||||
</ol>
|
||||
<table>
|
||||
@@ -150,8 +150,8 @@
|
||||
<p>**方式 A — 手动 Go(Web/调度下发)** </p>
|
||||
<p>用系统自带的「去某站」功能,内部会编译脚本,例如:</p>
|
||||
<pre><code>
|
||||
agv.MagFass2Go(1, 2, 0.2);
|
||||
agv.MagFass2Go(2, 5, 0.2);
|
||||
agv.Mag2Go(1, 2, 0.2);
|
||||
agv.Mag2Go(2, 5, 0.2);
|
||||
</code></pre>
|
||||
<p>**方式 B — LoopMission 环线** </p>
|
||||
<ol>
|
||||
@@ -165,11 +165,11 @@ agv.MagFass2Go(2, 5, 0.2);
|
||||
<pre><code>
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 业务层:LoopMission / 手动 Go / 脚本 │
|
||||
│ (分配 goalSite 或编译多行 MagFass2Go) │
|
||||
│ (分配 goalSite 或编译多行 Mag2Go) │
|
||||
└────────────────────────┬────────────────────────────────┘
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ MagFass2Car 执行层 │
|
||||
│ Mag2Car 执行层 │
|
||||
│ · 脚本拦截(Loop + goalSite)→ 一次全程任务 │
|
||||
│ · Fass2TaskBuilder:路径 + fields → 节点序列 │
|
||||
│ · Fass2TaskStateMachine:滑动窗口下发 + 动作闭环 │
|
||||
@@ -186,7 +186,7 @@ agv.MagFass2Go(2, 5, 0.2);
|
||||
<p>**关键理解:**</p>
|
||||
<ul>
|
||||
<li>**LoopMission(Core)** 只负责「给谁分配哪个目标站」(写 <code>goalSite</code> 标签)</li>
|
||||
<li>**MagFass2Car** 负责「怎么走过去」(拼包、下发、等到站)</li>
|
||||
<li>**Mag2Car** 负责「怎么走过去」(拼包、下发、等到站)</li>
|
||||
<li>**阶段 4** 后,Loop 不再逐行执行多段脚本,而是**拦截为一次全程任务**(可关)</li>
|
||||
</ul>
|
||||
<hr/>
|
||||
@@ -195,8 +195,8 @@ agv.MagFass2Go(2, 5, 0.2);
|
||||
<p>文件:<code>StandardScene.Magnetic.scene.json</code></p>
|
||||
<pre><code>
|
||||
{
|
||||
"carTypes": [ "MagCar", "MagFass2Car" ],
|
||||
"missionTypes": [ "EventCarMission", "MagFass2LoopMission" ]
|
||||
"carTypes": [ "MagCar", "Mag2Car" ],
|
||||
"missionTypes": [ "EventCarMission", "Mag2LoopMission" ]
|
||||
}
|
||||
</code></pre>
|
||||
<h3>4.2 选哪个 Mission?</h3>
|
||||
@@ -210,21 +210,21 @@ agv.MagFass2Go(2, 5, 0.2);
|
||||
<tbody><tr>
|
||||
<td><code>LoopMission</code></td>
|
||||
<td>Core</td>
|
||||
<td>通用环线,MagFass2Car 同样可用</td>
|
||||
<td>通用环线,Mag2Car 同样可用</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>磁导航FASS2环线</code>(<code>MagFass2LoopMission</code>)</td>
|
||||
<td><code>磁导航FASS2环线</code>(<code>Mag2LoopMission</code>)</td>
|
||||
<td>Magnetic 插件</td>
|
||||
<td>逻辑与 LoopMission 相同,名称标识磁导航 FASS2 场景</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>FASS车辆事件进程</code>(<code>EventCarMission</code>)</td>
|
||||
<td>Magnetic 插件</td>
|
||||
<td>**仅 MagCar(FASS 1.0)**,不驱动 MagFass2Car</td>
|
||||
<td>**仅 MagCar(FASS 1.0)**,不驱动 Mag2Car</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<blockquote><p>新手建议:MagFass2Car 环线用 **`LoopMission`** 或 **`磁导航FASS2环线`** 均可。</p></blockquote>
|
||||
<blockquote><p>新手建议:Mag2Car 环线用 **`LoopMission`** 或 **`磁导航FASS2环线`** 均可。</p></blockquote>
|
||||
<h3>4.3 tasklist.json 最小示例</h3>
|
||||
<pre><code>
|
||||
{
|
||||
@@ -253,7 +253,7 @@ agv.MagFass2Go(2, 5, 0.2);
|
||||
<p>含义:车到站 1 → 自动分配目标站 2;到站 2 → 自动分配目标站 1,形成环线。</p>
|
||||
<hr/>
|
||||
<h2>5. 车辆参数说明</h2>
|
||||
<p>在场景编辑器中选中 <code>MagFass2Car</code>,常用字段如下。</p>
|
||||
<p>在场景编辑器中选中 <code>Mag2Car</code>,常用字段如下。</p>
|
||||
<h3>5.1 通讯</h3>
|
||||
<table>
|
||||
<thead><tr>
|
||||
@@ -426,8 +426,8 @@ agv.MagFass2Go(2, 5, 0.2);
|
||||
<p>**流程**:</p>
|
||||
<pre><code>
|
||||
FindRoute → Compile → 多行脚本:
|
||||
agv.MagFass2Go(1,2,speed);
|
||||
agv.MagFass2Go(2,3,speed);
|
||||
agv.Mag2Go(1,2,speed);
|
||||
agv.Mag2Go(2,3,speed);
|
||||
...
|
||||
→ SelfEvaluating 逐行执行
|
||||
→ 每行:锁终点 → 发 0xB1 → 等到站 → 释放起点
|
||||
@@ -435,7 +435,7 @@ FindRoute → Compile → 多行脚本:
|
||||
<p>**特点**:每**条边**一段任务,多次 <code>taskId</code>,与交管「逐段锁点」一致。</p>
|
||||
<hr/>
|
||||
<h3>方式 2:Loop 全程任务(阶段 4,默认)</h3>
|
||||
<p>**触发**:<code>goalSite</code> 标签 + 编译脚本含 <code>MagFass2Go</code> + <code>EnableLoopTaskDrive=true</code>。</p>
|
||||
<p>**触发**:<code>goalSite</code> 标签 + 编译脚本含 <code>Mag2Go</code> + <code>EnableLoopTaskDrive=true</code>。</p>
|
||||
<p>**流程**:</p>
|
||||
<pre><code>
|
||||
LoopMission 写 goalSite
|
||||
@@ -446,7 +446,7 @@ LoopMission 写 goalSite
|
||||
</code></pre>
|
||||
<p>**特点**:业务上一次任务,协议上仍遵守每帧 ≤10 站。</p>
|
||||
<hr/>
|
||||
<h3>方式 3:单段 MagFass2Go(脚本一行)</h3>
|
||||
<h3>方式 3:单段 Mag2Go(脚本一行)</h3>
|
||||
<p>**触发**:脚本里只有一行,或无 <code>goalSite</code> 的测试。</p>
|
||||
<p>**流程**:与方式 1 的单行相同,状态机只跑 <code>src → dst</code> 一段。</p>
|
||||
<hr/>
|
||||
@@ -631,7 +631,7 @@ LoopMission 写 goalSite
|
||||
</tr>
|
||||
<tr>
|
||||
<td>车辆开关</td>
|
||||
<td><code>MagFass2Car.UseTagValueAsNode = true</code></td>
|
||||
<td><code>Mag2Car.UseTagValueAsNode = true</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>示例</td>
|
||||
@@ -1295,7 +1295,7 @@ LoopMission 写 goalSite
|
||||
<td><code>Magnet</code></td>
|
||||
<td>bool</td>
|
||||
<td>—</td>
|
||||
<td><code>true</code> 启用 <code>MagneticTrackCoder</code>(<code>agv.MagGo</code> 等),与 <code>MagFass2Go</code> 模板独立</td>
|
||||
<td><code>true</code> 启用 <code>MagneticTrackCoder</code>(<code>agv.MagGo</code> 等),与 <code>Mag2Go</code> 模板独立</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>ReverseDst</code></td>
|
||||
@@ -1433,7 +1433,7 @@ Fass2_Obstacle = 2
|
||||
2. 匹配 tasklist:currentStationId = N → 分配 targetStationId
|
||||
3. 写 tags:goalSite = 目标站 ID
|
||||
4. LoopStartAction 调用 GoSite
|
||||
5. MagFass2Car 拦截 → 全程任务到 goalSite
|
||||
5. Mag2Car 拦截 → 全程任务到 goalSite
|
||||
6. 到达后 GoSite 清理 goalSite / occupied / loopAssigned
|
||||
7. 下一轮任务匹配
|
||||
</code></pre>
|
||||
@@ -1462,13 +1462,13 @@ Fass2_Obstacle = 2
|
||||
<ul>
|
||||
<li>**不需要改 Core**;<code>LoopMission</code> 逻辑完全沿用</li>
|
||||
<li><code>磁导航FASS2环线</code> 仅为场景标识,行为与 <code>LoopMission</code> 相同</li>
|
||||
<li>真正区别在 **车型** 是否 <code>MagFass2Car</code> 且 <code>EnableLoopTaskDrive=true</code></li>
|
||||
<li>真正区别在 **车型** 是否 <code>Mag2Car</code> 且 <code>EnableLoopTaskDrive=true</code></li>
|
||||
</ul>
|
||||
<h3>9.4 关闭 Loop 拦截(恢复多段脚本)</h3>
|
||||
<pre><code>
|
||||
EnableLoopTaskDrive = false
|
||||
</code></pre>
|
||||
<p>Loop 仍走 Compile 多行 <code>MagFass2Go</code>,每行一段边。</p>
|
||||
<p>Loop 仍走 Compile 多行 <code>Mag2Go</code>,每行一段边。</p>
|
||||
<hr/>
|
||||
<h2>10. 任务状态机与协议下发</h2>
|
||||
<h3>10.1 状态流转</h3>
|
||||
@@ -1595,7 +1595,7 @@ Idle → Planning → Moving → AtStation → SegmentDone → … → Complete
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>日志前缀:<code>[MagFass2Car:车名(id)]</code>,任务状态机:<code>task-sm</code>。</p>
|
||||
<p>日志前缀:<code>[Mag2Car:车名(id)]</code>,任务状态机:<code>task-sm</code>。</p>
|
||||
<hr/>
|
||||
<h2>12. 常见问题排查</h2>
|
||||
<h3>Q1:车显示离线(UDP)</h3>
|
||||
@@ -1698,13 +1698,13 @@ Idle → Planning → Moving → AtStation → SegmentDone → … → Complete
|
||||
<p>看日志:</p>
|
||||
<ul>
|
||||
<li><code>loop goal drive intercept</code> → 全程任务(阶段 4)</li>
|
||||
<li><code>script begin</code> + 多行 <code>MagFass2Go</code> → 多段脚本</li>
|
||||
<li><code>script begin</code> + 多行 <code>Mag2Go</code> → 多段脚本</li>
|
||||
</ul>
|
||||
<h3>Q6:与 MagCar 混用注意事项</h3>
|
||||
<ul>
|
||||
<li><code>EventCarMission</code> **只控制 MagCar**</li>
|
||||
<li>同场景两种车型时,tasklist 和车辆类型要对应</li>
|
||||
<li>FASS 1.0 用 <code>MagCar</code>,FASS 2.0 用 <code>MagFass2Car</code></li>
|
||||
<li>FASS 1.0 用 <code>MagCar</code>,FASS 2.0 用 <code>Mag2Car</code></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h2>13. 参数推荐与检查清单</h2>
|
||||
@@ -1722,7 +1722,7 @@ MoveTimeoutSeconds = 120
|
||||
<h3>13.2 上线前检查清单</h3>
|
||||
<ul>
|
||||
<li>[ ] 插件 <code>StandardScene.Magnetic.dll</code> 已加载</li>
|
||||
<li>[ ] 车型为 <code>MagFass2Car</code>(不是 <code>MagCar</code>)</li>
|
||||
<li>[ ] 车型为 <code>Mag2Car</code>(不是 <code>MagCar</code>)</li>
|
||||
<li>[ ] <code>VehicleCode</code>、IP、端口与车体一致</li>
|
||||
<li>[ ] UDP 能收到 100B,日志有 <code>0x10</code> 应答</li>
|
||||
<li>[ ] 关键站点 <code>TagValue</code> / <code>Fass2_*</code> 已配置</li>
|
||||
@@ -1785,7 +1785,7 @@ MoveTimeoutSeconds = 120
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td>车型</td>
|
||||
<td><code>CarTypes/MagFass2Car.cs</code></td>
|
||||
<td><code>CarTypes/Mag2Car.cs</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>协议</td>
|
||||
@@ -1805,7 +1805,7 @@ MoveTimeoutSeconds = 120
|
||||
</tr>
|
||||
<tr>
|
||||
<td>环线 Mission</td>
|
||||
<td><code>Chained/MagFass2LoopMission.cs</code></td>
|
||||
<td><code>Chained/Mag2LoopMission.cs</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>站点字段常量</td>
|
||||
+66
-38
@@ -1,8 +1,8 @@
|
||||
# MagFass2Car(FASS 2.0)使用指南
|
||||
# Mag2Car(FASS 2.0)使用指南
|
||||
|
||||
> 适用对象:第一次接触磁导航 + FASS 2.0 的调试/实施人员
|
||||
> 插件:`StandardScene.Magnetic.dll`
|
||||
> 车型:`MagFass2Car`
|
||||
> 车型:`Mag2Car`
|
||||
> 最后更新:2026-07
|
||||
|
||||
---
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
## 1. 这套系统能做什么
|
||||
|
||||
`MagFass2Car` 是 StandardScene **磁导航平台插件**里的 FASS 2.0 车型,主要能力:
|
||||
`Mag2Car` 是 StandardScene **磁导航平台插件**里的 FASS 2.0 车型,主要能力:
|
||||
|
||||
| 能力 | 说明 |
|
||||
|------|------|
|
||||
@@ -54,12 +54,12 @@
|
||||
|
||||
确认场景已加载 `scene.mag`(`StandardScene.Magnetic.scene.json`),提供:
|
||||
|
||||
- 车型:`MagCar`、`MagFass2Car`
|
||||
- 进程:`EventCarMission`、`MagFass2LoopMission`
|
||||
- 车型:`MagCar`、`Mag2Car`
|
||||
- 进程:`EventCarMission`、`Mag2LoopMission`
|
||||
|
||||
### 步骤 2:添加一辆车
|
||||
|
||||
1. 在场景中添加车型 **`MagFass2Car`**
|
||||
1. 在场景中添加车型 **`Mag2Car`**
|
||||
2. 填写基本参数(UDP 模式示例):
|
||||
|
||||
| 参数 | 示例值 | 含义 |
|
||||
@@ -86,8 +86,8 @@
|
||||
用系统自带的「去某站」功能,内部会编译脚本,例如:
|
||||
|
||||
```text
|
||||
agv.MagFass2Go(1, 2, 0.2);
|
||||
agv.MagFass2Go(2, 5, 0.2);
|
||||
agv.Mag2Go(1, 2, 0.2);
|
||||
agv.Mag2Go(2, 5, 0.2);
|
||||
```
|
||||
|
||||
**方式 B — LoopMission 环线**
|
||||
@@ -103,11 +103,11 @@ agv.MagFass2Go(2, 5, 0.2);
|
||||
```text
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 业务层:LoopMission / 手动 Go / 脚本 │
|
||||
│ (分配 goalSite 或编译多行 MagFass2Go) │
|
||||
│ (分配 goalSite 或编译多行 Mag2Go) │
|
||||
└────────────────────────┬────────────────────────────────┘
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ MagFass2Car 执行层 │
|
||||
│ Mag2Car 执行层 │
|
||||
│ · 脚本拦截(Loop + goalSite)→ 一次全程任务 │
|
||||
│ · Fass2TaskBuilder:路径 + fields → 节点序列 │
|
||||
│ · Fass2TaskStateMachine:滑动窗口下发 + 动作闭环 │
|
||||
@@ -125,7 +125,7 @@ agv.MagFass2Go(2, 5, 0.2);
|
||||
**关键理解:**
|
||||
|
||||
- **LoopMission(Core)** 只负责「给谁分配哪个目标站」(写 `goalSite` 标签)
|
||||
- **MagFass2Car** 负责「怎么走过去」(拼包、下发、等到站)
|
||||
- **Mag2Car** 负责「怎么走过去」(拼包、下发、等到站)
|
||||
- **阶段 4** 后,Loop 不再逐行执行多段脚本,而是**拦截为一次全程任务**(可关)
|
||||
|
||||
---
|
||||
@@ -138,8 +138,8 @@ agv.MagFass2Go(2, 5, 0.2);
|
||||
|
||||
```json
|
||||
{
|
||||
"carTypes": [ "MagCar", "MagFass2Car" ],
|
||||
"missionTypes": [ "EventCarMission", "MagFass2LoopMission" ]
|
||||
"carTypes": [ "MagCar", "Mag2Car" ],
|
||||
"missionTypes": [ "EventCarMission", "Mag2LoopMission" ]
|
||||
}
|
||||
```
|
||||
|
||||
@@ -147,11 +147,11 @@ agv.MagFass2Go(2, 5, 0.2);
|
||||
|
||||
| Mission | 来源 | 适用 |
|
||||
|---------|------|------|
|
||||
| `LoopMission` | Core | 通用环线,MagFass2Car 同样可用 |
|
||||
| `磁导航FASS2环线`(`MagFass2LoopMission`) | Magnetic 插件 | 逻辑与 LoopMission 相同,名称标识磁导航 FASS2 场景 |
|
||||
| `FASS车辆事件进程`(`EventCarMission`) | Magnetic 插件 | **仅 MagCar(FASS 1.0)**,不驱动 MagFass2Car |
|
||||
| `LoopMission` | Core | 通用环线,Mag2Car 同样可用 |
|
||||
| `磁导航FASS2环线`(`Mag2LoopMission`) | Magnetic 插件 | 逻辑与 LoopMission 相同,名称标识磁导航 FASS2 场景 |
|
||||
| `FASS车辆事件进程`(`EventCarMission`) | Magnetic 插件 | **仅 MagCar(FASS 1.0)**,不驱动 Mag2Car |
|
||||
|
||||
> 新手建议:MagFass2Car 环线用 **`LoopMission`** 或 **`磁导航FASS2环线`** 均可。
|
||||
> 新手建议:Mag2Car 环线用 **`LoopMission`** 或 **`磁导航FASS2环线`** 均可。
|
||||
|
||||
### 4.3 tasklist.json 最小示例
|
||||
|
||||
@@ -186,7 +186,7 @@ agv.MagFass2Go(2, 5, 0.2);
|
||||
|
||||
## 5. 车辆参数说明
|
||||
|
||||
在场景编辑器中选中 `MagFass2Car`,常用字段如下。
|
||||
在场景编辑器中选中 `Mag2Car`,常用字段如下。
|
||||
|
||||
### 5.1 通讯
|
||||
|
||||
@@ -269,8 +269,8 @@ agv.MagFass2Go(2, 5, 0.2);
|
||||
|
||||
```text
|
||||
FindRoute → Compile → 多行脚本:
|
||||
agv.MagFass2Go(1,2,speed);
|
||||
agv.MagFass2Go(2,3,speed);
|
||||
agv.Mag2Go(1,2,speed);
|
||||
agv.Mag2Go(2,3,speed);
|
||||
...
|
||||
→ SelfEvaluating 逐行执行
|
||||
→ 每行:锁终点 → 发 0xB1 → 等到站 → 释放起点
|
||||
@@ -282,7 +282,7 @@ FindRoute → Compile → 多行脚本:
|
||||
|
||||
### 方式 2:Loop 全程任务(阶段 4,默认)
|
||||
|
||||
**触发**:`goalSite` 标签 + 编译脚本含 `MagFass2Go` + `EnableLoopTaskDrive=true`。
|
||||
**触发**:`goalSite` 标签 + 编译脚本含 `Mag2Go` + `EnableLoopTaskDrive=true`。
|
||||
|
||||
**流程**:
|
||||
|
||||
@@ -298,7 +298,7 @@ LoopMission 写 goalSite
|
||||
|
||||
---
|
||||
|
||||
### 方式 3:单段 MagFass2Go(脚本一行)
|
||||
### 方式 3:单段 Mag2Go(脚本一行)
|
||||
|
||||
**触发**:脚本里只有一行,或无 `goalSite` 的测试。
|
||||
|
||||
@@ -370,7 +370,7 @@ LoopMission 写 goalSite
|
||||
|------|------|
|
||||
| 映射协议字段 | `Node`(节点号) |
|
||||
| 何时配置 | 磁导航地标号与地图 `site.id` **不一致**时必须配置 |
|
||||
| 车辆开关 | `MagFass2Car.UseTagValueAsNode = true` |
|
||||
| 车辆开关 | `Mag2Car.UseTagValueAsNode = true` |
|
||||
| 示例 | `TagValue = 10086` |
|
||||
| 注意 | 未配置且 `UseTagValueAsNode=false` 时,直接用 `site.id` 作为节点号 |
|
||||
|
||||
@@ -387,9 +387,9 @@ LoopMission 写 goalSite
|
||||
|
||||
| 项目 | 说明 |
|
||||
|------|------|
|
||||
| 映射协议字段 | 无(当前版本不直接写入节点块) |
|
||||
| 映射协议字段 | 无(不写入节点块) |
|
||||
| 规划值 | `None` / `Button` / `Plc` / `Api` |
|
||||
| 当前状态 | 字段已定义,**等待放行联动逻辑待扩展**;可通过修改 `Fass2_StartStop` 或外部改 fields 触发重发 |
|
||||
| 当前状态 | 人工/外部放行源预留。**管控区按车放行**请用 `Fass2_StartStop=12` + `Fass2_ControlArea`(站点列表),不要靠改地图 `Fass2_StartStop` 放行 |
|
||||
|
||||
---
|
||||
|
||||
@@ -401,8 +401,8 @@ LoopMission 写 goalSite
|
||||
|----|---------------------------|----------|
|
||||
| `1` | 过站(不停) | 路径中间站、通道站 |
|
||||
| `2` | 普通停车 | 工位、等待点、装卸点 |
|
||||
| `11` | 管控启动 | 管控区入口,需授权后启动 |
|
||||
| `12` | 管控停止 | 管控区停车等待 |
|
||||
| `11` | 管控启动 | 本车放行后写入 **0xA1 / 后续 0xB1**(地图站点仍保持 12) |
|
||||
| `12` | 管控停止 | 管控区停车,等调度按车放行 |
|
||||
| `22` | 精准停止 | 装配、对接,精度要求高 |
|
||||
|
||||
**默认规则**(未显式配置 `Fass2_StartStop` 时,`Fass2TaskBuilder` 自动决定):
|
||||
@@ -413,7 +413,17 @@ LoopMission 写 goalSite
|
||||
| 末站(goalSite) | `2`(停车) |
|
||||
| 末站 + `Fass2_PrecisionStop=true` | `22`(精准停) |
|
||||
|
||||
**动作完成判定**:若配置了非过站值,状态机要求上报 `Node.StartStop` 与期望值一致,且车体非运行态(`State≠1`),才推进下一段。
|
||||
**动作完成判定**:`2`/`22` 要求上报 `StartStop` 一致且车体非运行态。`12` **不会**因上报 12 就推进:必须等同区占用条件满足后,调度把本车期望值改为 `11`(或 `1`),车体回显后再离站。
|
||||
|
||||
**管控停止按车放行(`12`)**:
|
||||
|
||||
- 地图 `Fass2_StartStop` **始终保持 12**,不要改成 1 来放行(否则下一辆车的 0xB1 也会变成过站)。
|
||||
- `0xB1` 窗口截断在第一个尚未放行的 12,其后站点不会出现在同一帧里。
|
||||
- 本车到站并停稳后,统计 `Fass2_ControlArea` **站点列表**上的他车占用(`holdingLocks` + Mag2 `siteID`)。他车数 **≥** `Fass2_ControlCapacity`(默认 1,即数量与容量相等)则不放行;本车不计入,避免停在列表内时永远走不了。
|
||||
- 放行只改**本车**报文:`0xA1` 把当前节点 `12→11`(可用 `Fass2_ControlReleaseStartStop=1` 改为过站),并补发含后续站的 `0xB1`。下一辆车仍会收到 12。
|
||||
- 等待放行期间不消耗移动超时。断线重连若仍停在该管控点,会重新判定占用;条件满足则再次发放行报文。
|
||||
|
||||
相关站点字段:`Fass2_ControlArea`(站点 ID 数组,如 `10,11,12`)、`Fass2_ControlCapacity`、`Fass2_ControlReleaseStartStop`。未配或解析不出站点时,只统计当前管控点本身。
|
||||
|
||||
**与 `Fass2_PrecisionStop` 关系**:
|
||||
|
||||
@@ -614,6 +624,9 @@ LoopMission 写 goalSite
|
||||
| `Fass2_Tray` | byte | `Tray` | 是(非 0 时) |
|
||||
| `Fass2_Shutdown` | byte | `Shutdown` | 是(非 0 时) |
|
||||
| `Fass2_WaitMode` | string | — | 预留 |
|
||||
| `Fass2_ControlArea` | string | — | 管控站点列表,如 `10,11,12` |
|
||||
| `Fass2_ControlCapacity` | int | — | 列表内他车数达到该值则不放行,默认 1 |
|
||||
| `Fass2_ControlReleaseStartStop` | byte | 放行后的 `StartStop` | `11`(默认)或 `1` |
|
||||
|
||||
---
|
||||
|
||||
@@ -632,7 +645,7 @@ LoopMission 写 goalSite
|
||||
| `magSelect` | byte | `Byroad` | 磁导航 coder 分叉序号;`Fass2_Byroad` 为空时作为 Byroad 备选 |
|
||||
| `Fass2_Direction` | byte | `Direction` | 边级车头旋转;站点未覆盖时生效 |
|
||||
| `Fass2_Orientation` | byte | `Orientation` | 边级朝向;站点未覆盖时生效 |
|
||||
| `Magnet` | bool | — | `true` 启用 `MagneticTrackCoder`(`agv.MagGo` 等),与 `MagFass2Go` 模板独立 |
|
||||
| `Magnet` | bool | — | `true` 启用 `MagneticTrackCoder`(`agv.MagGo` 等),与 `Mag2Go` 模板独立 |
|
||||
| `ReverseDst` | int | — | 倒车目的地站 ID;磁 coder 跳过该边 |
|
||||
|
||||
**距离 `Distance`**:由地图坐标自动计算(上一站与本站欧氏距离,mm 取整),一般无需手配。
|
||||
@@ -717,6 +730,21 @@ Fass2_Charge = 2 # 开始充电
|
||||
|
||||
---
|
||||
|
||||
#### 场景 E2:管控停止(按车放行)
|
||||
|
||||
在 12 站点填写要监控的站点列表;**地图 `Fass2_StartStop` 保持 12**。
|
||||
|
||||
```text
|
||||
Fass2_StartStop = 12
|
||||
Fass2_ControlArea = 10,11,12 # 这些站上有他车且数量达到容量则不放行
|
||||
Fass2_ControlCapacity = 1
|
||||
# Fass2_ControlReleaseStartStop = 11 # 默认;改 1 则放行后按过站离站
|
||||
```
|
||||
|
||||
列表 `10,11,12` 上已有 1 辆他车时,本车停在 12 等待;他车离开列表后,调度只给本车发 `0xA1`(12→11)。下一辆车仍会先收到 12。
|
||||
|
||||
---
|
||||
|
||||
#### 场景 F:Y 型磁分叉口
|
||||
|
||||
**站点**(推荐在岔口站配):
|
||||
@@ -792,7 +820,7 @@ Fass2_Obstacle = 2
|
||||
2. 匹配 tasklist:currentStationId = N → 分配 targetStationId
|
||||
3. 写 tags:goalSite = 目标站 ID
|
||||
4. LoopStartAction 调用 GoSite
|
||||
5. MagFass2Car 拦截 → 全程任务到 goalSite
|
||||
5. Mag2Car 拦截 → 全程任务到 goalSite
|
||||
6. 到达后 GoSite 清理 goalSite / occupied / loopAssigned
|
||||
7. 下一轮任务匹配
|
||||
```
|
||||
@@ -809,7 +837,7 @@ Fass2_Obstacle = 2
|
||||
|
||||
- **不需要改 Core**;`LoopMission` 逻辑完全沿用
|
||||
- `磁导航FASS2环线` 仅为场景标识,行为与 `LoopMission` 相同
|
||||
- 真正区别在 **车型** 是否 `MagFass2Car` 且 `EnableLoopTaskDrive=true`
|
||||
- 真正区别在 **车型** 是否 `Mag2Car` 且 `EnableLoopTaskDrive=true`
|
||||
|
||||
### 9.4 关闭 Loop 拦截(恢复多段脚本)
|
||||
|
||||
@@ -817,7 +845,7 @@ Fass2_Obstacle = 2
|
||||
EnableLoopTaskDrive = false
|
||||
```
|
||||
|
||||
Loop 仍走 Compile 多行 `MagFass2Go`,每行一段边。
|
||||
Loop 仍走 Compile 多行 `Mag2Go`,每行一段边。
|
||||
|
||||
---
|
||||
|
||||
@@ -890,7 +918,7 @@ Idle → Planning → Moving → AtStation → SegmentDone → … → Complete
|
||||
| 重置UDP监听 | — | 重新注册 UDP 会话 |
|
||||
| 重置TCP连接 | — | 关闭长连接(TCP 模式) |
|
||||
|
||||
日志前缀:`[MagFass2Car:车名(id)]`,任务状态机:`task-sm`。
|
||||
日志前缀:`[Mag2Car:车名(id)]`,任务状态机:`task-sm`。
|
||||
|
||||
---
|
||||
|
||||
@@ -936,13 +964,13 @@ Idle → Planning → Moving → AtStation → SegmentDone → … → Complete
|
||||
看日志:
|
||||
|
||||
- `loop goal drive intercept` → 全程任务(阶段 4)
|
||||
- `script begin` + 多行 `MagFass2Go` → 多段脚本
|
||||
- `script begin` + 多行 `Mag2Go` → 多段脚本
|
||||
|
||||
### Q6:与 MagCar 混用注意事项
|
||||
|
||||
- `EventCarMission` **只控制 MagCar**
|
||||
- 同场景两种车型时,tasklist 和车辆类型要对应
|
||||
- FASS 1.0 用 `MagCar`,FASS 2.0 用 `MagFass2Car`
|
||||
- FASS 1.0 用 `MagCar`,FASS 2.0 用 `Mag2Car`
|
||||
|
||||
---
|
||||
|
||||
@@ -964,7 +992,7 @@ MoveTimeoutSeconds = 120
|
||||
### 13.2 上线前检查清单
|
||||
|
||||
- [ ] 插件 `StandardScene.Magnetic.dll` 已加载
|
||||
- [ ] 车型为 `MagFass2Car`(不是 `MagCar`)
|
||||
- [ ] 车型为 `Mag2Car`(不是 `MagCar`)
|
||||
- [ ] `VehicleCode`、IP、端口与车体一致
|
||||
- [ ] UDP 能收到 100B,日志有 `0x10` 应答
|
||||
- [ ] 关键站点 `TagValue` / `Fass2_*` 已配置
|
||||
@@ -993,12 +1021,12 @@ MoveTimeoutSeconds = 120
|
||||
|
||||
| 模块 | 路径 |
|
||||
|------|------|
|
||||
| 车型 | `CarTypes/MagFass2Car.cs` |
|
||||
| 车型 | `CarTypes/Mag2Car.cs` |
|
||||
| 协议 | `Protocol/Fass2Protocol.cs`、`Fass2UdpHub.cs` |
|
||||
| 组包 | `Tasking/Fass2TaskBuilder.cs` |
|
||||
| 状态机 | `Tasking/Fass2TaskStateMachine.cs` |
|
||||
| 动作判定 | `Tasking/Fass2ActionResolver.cs` |
|
||||
| 环线 Mission | `Chained/MagFass2LoopMission.cs` |
|
||||
| 环线 Mission | `Chained/Mag2LoopMission.cs` |
|
||||
| 站点字段常量 | `Tasking/Fass2SiteFields.cs` |
|
||||
|
||||
---
|
||||
@@ -1,7 +1,7 @@
|
||||
# Export MagFass2Car guide Markdown to PDF (requires Chrome or Edge)
|
||||
# Export Mag2Car guide Markdown to PDF (requires Chrome or Edge)
|
||||
param(
|
||||
[string]$InputMd = "$PSScriptRoot\MagFass2Car使用指南.md",
|
||||
[string]$OutputPdf = "$PSScriptRoot\MagFass2Car使用指南.pdf"
|
||||
[string]$InputMd = "$PSScriptRoot\Mag2Car使用指南.md",
|
||||
[string]$OutputPdf = "$PSScriptRoot\Mag2Car使用指南.pdf"
|
||||
)
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
@@ -147,7 +147,7 @@ $html = @"
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>MagFass2Car Guide</title>
|
||||
<title>Mag2Car Guide</title>
|
||||
<style>
|
||||
@page { size: A4; margin: 18mm 16mm; }
|
||||
body { font-family: "Microsoft YaHei", "Segoe UI", sans-serif; color: #222; line-height: 1.55; font-size: 11pt; }
|
||||
|
||||
Reference in New Issue
Block a user