【C#】某AGV调度系统源码笔记(九)

调度模拟模型类库

  1. 车辆监控类

用于模拟和控制一个移动车辆,可能是一个 AGV(自动导向车)。包含了车辆的一些属性,例如位置、速度、状态等信息,以及一些方法用于控制车辆的行为,例如启动、停止、移动等。

构造函数初始化了车辆的一些基本属性,例如状态、位置、速度等,以及设定了一个定时器 车辆激活定时器,用于周期性地调用 移动方法使车辆移动。

代表车辆是否被锁定标志的布尔变量、车辆的编号、当前和下一地标信息对象、车辆运行的距离、车辆的当前路径(地标列表)

移动方法:使车辆按预设路径移动,首先禁用 车辆激活定时器以防止移动过程中被再次调用。然后如果存在可用的当前路径和一个大于0的缩放率,它将使车辆沿当前路径的地标移动,移动完成或者没有可用路径时,移动方法将再次启用 车辆激活定时器,并在捕获到异常时抛出。

发送移动方法:创建了一个新的任务用于调用步点改变事件,在车辆的位置改变后,步点改变事件被触发。

停止和开始方法:分别用于停止和开始车辆的电影。在停止方法中,是否移动布尔变量被设置为false,并禁用车辆激活定时器。而在开始方法中,布尔变量是否移动被置为true并启用车辆激活定时器。

最后,车辆激活方法在每个车辆激活定时器事件中被调用,其本质上是一个异步操作用于调用移动方法来使车辆移动。

1.1 构造函数

初始化:是否锁定为false,状态码为0【0-待命 1-运行中 2-停止】,当前地标信息、下一地标信息、当前路线中的地标信息列表、路线中地标的代码字符串列表、转弯地标的代码列表、待命地标代码、执行的任务编号、机械臂所在地标的代码、速度0.02(单位不详)、当前位置编号-1,创建车辆激活计时器且初始状态为禁用、绑定计时器的Elapsed事件与车辆激活方法、设置计时器的触发间隔为50毫秒。

1.2 类属性定义

车辆是否被锁定、车辆的AGV ID、当前地标信息、当前站点、下一站点、车辆当前X坐标、车辆当前Y坐标、车辆行驶距离、车辆速度、下一地标信息、车辆状态、当前路线(地标列表)、路线中地标代码列表、转弯地标代码列表、待命地标代码、执行的任务编号、是否返回布尔变量、任务详情ID、机械臂地标、操作类型、放置类型、缩放比例、步点改变委托、步点变化委托的实例即步点变化事件、车辆激活定时器、车辆是否移动中

1.3 移动方法

移动方法
{
  尝试 :
      在移动前先禁用计时器
      当小车正在移动且缩放比率大于0时
      {
        如果当前路线中存在地标
        {
          对当前路线的地标列表去重
          如果当前坐标与最终目标地标在一定误差范围内
          {
            获取当前开始时间
            更新当前地标为当期路线的最终地标
            更新X坐标
            更新Y坐标
            清空下一地标信息
            更新当前站点编号
            运行距离清零
            清空当前路线
            更新状态为待命
            禁用计时器
            调用发送移动方法,更新UI
            返回,结束移动昂发
          }
          如果当前状态是待命
          {
            记录开始时间
            更新当前地标为第一个路线地标
            运行距离清零
            更新X坐标
            更新Y坐标
            更新旧的站点为当前站点编号
            更新当前站点编号
            查找下一个路线地标
            确保下一地标不越界
            更新状态为运行中
          }
          否则
          {
            查找当前坐标一定范围内的地标
            如果找到地标且下一地标存在,且找到的地标与下一地标的地标码一致
            {
              更新X坐标为找到的地标
              更新Y坐标
              查找地标在路线中的索引
              更新当前地标
              更新旧的站点为当前站点编号
              更新当前站点编号
              查找下一路标地标确保不越界
              运行距离清零
              更新状态为运行
              记录结束时间
            }
            否则
            {
              记录开始时间
              如果当前地标与下一地标都非空
              {
                更新运行距离
                更新状态为运行
              }
            }
          }
          调用发送移动方法更新UI
        }
        否则
        {
          更新状态为待命
          清空路线地标代码列表
          清空转弯地标代码列表
          释放资源
          禁用计时器
        }
      }
      最终启用计时器
  捕获异常,向上传递异常
}

1.4 发送移动方法,用于异步的触发(步点改变事件非空)步点改变的事件

d6d253a1bf808d4635e03e62e4dccd94.png

1.5 停止方法,用于停止小车移动

设置车辆是否移动中为false、禁用计时器

1.6 启动方法:启动小车移动

设置是否移动中为true,开启车辆激活计时器

1.7 车辆激活方法

线程休眠25毫秒,调用移动方法。

2. 日志记录类

用于记录错误、运行日志、各类操作或事件的信息

类中有两个锁,错误锁对象、锁对象,用于保证记录日志的线程安全。

写入错误日志方法:用于记录错误日志,输入是异常对象,将异常消息和堆栈跟踪内容写入到以日期命令的错误日志文件中。

写入日志方法:记录运行日志,输入是一个字符串,它将创建一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值