使用手册 - 更多交管细节用法:修订间差异
跳到导航
跳到搜索
(→1.必空点) |
|||
| (未显示同一用户的3个中间版本) | |||
| 第14行: | 第14行: | ||
[[文件:982cbb082b59f743ed46acfef0eb665.png|600x600像素]] | [[文件:982cbb082b59f743ed46acfef0eb665.png|600x600像素]] | ||
Bonus: | |||
此外,路线可以设置sconflicts或conflicts,前者是行走某个路径和某个站点冲突,后者是两个路径不能同时行走。可以用于一些交管复杂的情况。 | |||
[[文件:ImageTrackConflicts.png|无|缩略图|如此例中,左路线和右点可能存在干涉:车辆在冲突点黄色点旋转时可能会影响左路线行驶,因此可以在路线上标记sconflicts处理该问题。]] | |||
== 2.修改Simple项目属性 == | == 2.修改Simple项目属性 == | ||
| 第39行: | 第45行: | ||
* DestinationBlockedException: 有车堵塞了该车前往终点的路径:这些车停在当前车去目标点的必经路径上或即将到达堵塞位置。conflictedCars包含了堵塞车的列表。 | * DestinationBlockedException: 有车堵塞了该车前往终点的路径:这些车停在当前车去目标点的必经路径上或即将到达堵塞位置。conflictedCars包含了堵塞车的列表。 | ||
** 若堵塞车的终点为terminal点或sink点,或设置有escape路径,那么可以防止该异常发生。 | ** 若堵塞车的终点为terminal点或sink点,或设置有escape路径,那么可以防止该异常发生。 | ||
== 交管事件 == | |||
用户程序可以监听交管事件。目前提供以下事件:<syntaxhighlight lang="c#" line="1"> | |||
public delegate void TrafficControlEvent(AbstractCar car, int siteId); | |||
public delegate void TrafficDeadLockEvent(AbstractCar[] loopingCar); | |||
public delegate bool TrafficControlBeforeLockCallback(AbstractCar car, int siteId); | |||
public static TrafficControlBeforeLockCallback BeforeLock; //在小车试图获取锁时调用:参数为哪个车试图获取哪个锁,返回true表示允许获取,返回false表示拒绝。 | |||
public static TrafficControlEvent OnLockAcquired; //在小车已拿到锁时调用:参数为哪个车获取了哪个锁 | |||
public static TrafficControlEvent AfterLeave; //在小车释放锁时调用:参数为哪个车释放了哪个锁 | |||
public static TrafficDeadLockEvent OnDeadLock; //在系统检测到死锁情况时调用。参数为发生了死锁的车辆。 | |||
</syntaxhighlight>其中业务程序中常用的事件主要是BeforeLock/AfterLeave事件,这个事件可以用于控制车辆的诸如排队充电、排队取货等行为。 | |||
2026年2月6日 (五) 17:20的最新版本
1.必空点
1.1 必空点概念
在Simple中,可以通过站点上mustFree的字段添加必空点,在id为1的必空点上添加mustFree:[2,3]代表当1号点被锁时,2、3号点不能被锁。
注意必空点为单向的概念,即1号点被锁,2、3不能被锁,但2、3被锁不影响1号点的上锁情况。
1.2 如何配置必空点
- 可以通过在站点上添加mustFree字段来添加必空点。
- 可以通过点击”设置必空点“来添加。
Bonus:
此外,路线可以设置sconflicts或conflicts,前者是行走某个路径和某个站点冲突,后者是两个路径不能同时行走。可以用于一些交管复杂的情况。

2.修改Simple项目属性
Simple中项目属性如下图,其中含义在”MDCS参数表:Simple“中有叙述。
1. 搜索路线时允许终点和别的车的终点重合
plan里加“forbid_cross”字段,设置为“true”。
(Search_AllowDestOnRoute为True:表示允许本次搜索路线的终点在别的车的路径上)
2. 寻路时某个点需要经过多次
将Search_MaxVisitPerSite(每个站点最多的经过次数)和Search_MaxDupVisit(整条路径上最多重复经过多少个站点)改大一些。
3. 寻路时和交管相关的抛出异常:
- DestinationSameException:搜索路径的终点和其他车相同。conflictedCars包含了冲突车的列表。
- 可以使用“forbid_cross”来暂时允许,多用于要连续拼接多条路线的情况。但如果整条路线终点确实和其他车的终点重合,那么无法进行交管规划。
- 可编辑终点为terminal点或sink点。
- 若其他车具有escape,则不会冲突。
- DestinationOnRouteException:搜索路径的终点停在其他车的路径上。这个异常可能会在未来被移除。可设置参数Search_AllowDestOnRoute为true来屏蔽该异常。
- 之所以抛该异常是因为这会导致:当前车在到达终点前,必须先等其他车经过终点后才能前往终点。
- DestinationBlockedException: 有车堵塞了该车前往终点的路径:这些车停在当前车去目标点的必经路径上或即将到达堵塞位置。conflictedCars包含了堵塞车的列表。
- 若堵塞车的终点为terminal点或sink点,或设置有escape路径,那么可以防止该异常发生。
交管事件
用户程序可以监听交管事件。目前提供以下事件:
public delegate void TrafficControlEvent(AbstractCar car, int siteId);
public delegate void TrafficDeadLockEvent(AbstractCar[] loopingCar);
public delegate bool TrafficControlBeforeLockCallback(AbstractCar car, int siteId);
public static TrafficControlBeforeLockCallback BeforeLock; //在小车试图获取锁时调用:参数为哪个车试图获取哪个锁,返回true表示允许获取,返回false表示拒绝。
public static TrafficControlEvent OnLockAcquired; //在小车已拿到锁时调用:参数为哪个车获取了哪个锁
public static TrafficControlEvent AfterLeave; //在小车释放锁时调用:参数为哪个车释放了哪个锁
public static TrafficDeadLockEvent OnDeadLock; //在系统检测到死锁情况时调用。参数为发生了死锁的车辆。
其中业务程序中常用的事件主要是BeforeLock/AfterLeave事件,这个事件可以用于控制车辆的诸如排队充电、排队取货等行为。
