调度模拟模型类库
车辆监控类
用于模拟和控制一个移动车辆,可能是一个 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 发送移动方法,用于异步的触发(步点改变事件非空)步点改变的事件
1.5 停止方法,用于停止小车移动
设置车辆是否移动中为false、禁用计时器
1.6 启动方法:启动小车移动
设置是否移动中为true,开启车辆激活计时器
1.7 车辆激活方法
线程休眠25毫秒,调用移动方法。
2. 日志记录类
用于记录错误、运行日志、各类操作或事件的信息
类中有两个锁,错误锁对象、锁对象,用于保证记录日志的线程安全。
写入错误日志方法:用于记录错误日志,输入是异常对象,将异常消息和堆栈跟踪内容写入到以日期命令的错误日志文件中。
写入日志方法:记录运行日志,输入是一个字符串,它将创建一