使用手册 - 更多交管细节用法:修订间差异

来自MDCS wiki
跳到导航 跳到搜索
(创建页面,内容为“== 1.必空点 == === 1.1 必空点概念 === 在Simple中,可以通过站点上mustFree的字段添加必空点,在id为1的必空点上添加mustFree:[2,3]代表当1号点被锁时,2、3号点不能被锁。 注意必空点为单向的概念,即1号点被锁,2、3不能被锁,但2、3被锁不影响1号点的上锁情况。 === 1.2 如何配置必空点 === # 可以通过在站点上添加mustFree字段来添加必空点。 # 可以通过点…”)
 
 
(未显示2个用户的6个中间版本)
第14行: 第14行:


[[文件:982cbb082b59f743ed46acfef0eb665.png|600x600像素]]
[[文件:982cbb082b59f743ed46acfef0eb665.png|600x600像素]]
Bonus:
此外,路线可以设置sconflicts或conflicts,前者是行走某个路径和某个站点冲突,后者是两个路径不能同时行走。可以用于一些交管复杂的情况。
[[文件:ImageTrackConflicts.png|无|缩略图|如此例中,左路线和右点可能存在干涉:车辆在冲突点黄色点旋转时可能会影响左路线行驶,因此可以在路线上标记sconflicts处理该问题。]]
== 2.修改Simple项目属性 ==
Simple中项目属性如下图,其中含义在”MDCS参数表:Simple“中有叙述。
[[文件:755a68e08f05a3e843db325873a5d2c.png]]
=== 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路径,那么可以防止该异常发生。
== 交管事件 ==
用户程序可以监听交管事件。目前提供以下事件:<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 如何配置必空点

  1. 可以通过在站点上添加mustFree字段来添加必空点。
  2. 可以通过点击”设置必空点“来添加。


Bonus:

此外,路线可以设置sconflicts或conflicts,前者是行走某个路径和某个站点冲突,后者是两个路径不能同时行走。可以用于一些交管复杂的情况。

如此例中,左路线和右点可能存在干涉:车辆在冲突点黄色点旋转时可能会影响左路线行驶,因此可以在路线上标记sconflicts处理该问题。

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事件,这个事件可以用于控制车辆的诸如排队充电、排队取货等行为。