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

AGV调度服务的核心类库

小车事件参数

两个公共属性:车辆信息、事件描述。一个构造函数传入两个参数赋值给属性。

核心数据类

初始化及存储调度系统中所有的档案信息。

多个静态公共属性存储不同类型的系统数据:是否全局服务、数据库操作对象、系统参数集合、数据库辅助类对象、车辆信息列表、所有呼叫器列表、所有呼叫器明细列表、所有充电桩列表、所有IO设备列表、所有储位列表、所有线段列表、所有地标列表、所有物料信息列表、AGV地图坐标对照数据表、地图与实际尺寸的缩放比例、交通管制路口档案集合、 所有线路线段配置列表、所有平板信息列表、所有平板操作设置列表、所有指令信息列表、调度程序类配置信息、所有区域档案、指定AGV记忆信息xml文件的目录。

这个静态类的作用是聚合和管理系统内所有相关配置信息和资源列表,以便在系统运行时能够方便地进行访问和管理。

委托发布类

类里定义了多个事件及其触发方式,以实现不同设备状态改变时的消息通知。

声明了5个委托,用于定义各种回调函数的签名,每个委托类型都有对应的事件参数:小车状态改变时的回调函数(小车事件参数)、小车有反馈消息时的回调函数(小车基本状态信息)、用于调度状态变化时的回调函数(字符串消息)、充电桩状态改变时的回调函数(充电桩信息)、IO设备状态改变时的回调函数(IO设备信息)。

委托状态类,为上述每一个委托类型定义了相应的静态事件,这些事件可以被外部的订阅者订阅: 小车状态改变时触发的事件、小车反馈信息时触发的事件、显示调度状态时触发的事件、充电桩状态改变时触发的事件、IO设备信息反馈时触发的事件。

对于每个事件,委托发布类提供了一个触发方法(Invoke Method)这些方法是异步执行: 异步触发小车改变事件、异步触发小车反馈事件、异步触发调度状态事件、异步触发充电桩状态改变事件、异步触发IO设备反馈事件。

每个触发方法都会尝试异步执行事件,如果事件有订阅者,则会调用订阅者方法。在每个触发方法中都是用try catch块来捕获可能发生的任何异常,并记录错误日志。使用await Task.Factory.StartNew(() => { ... }) 来异步执行事件调用,确保在触发事件时不会阻塞主线程。

调度器接口类

接口声明了一系列与调度服务和设备交互相关的方法。列举如下:

初始化调度服务,返回bool值表示初始化是否成功。

启动调度服务,返回布尔值表示服务启动是否成功。

停止调度服务,返回布尔值表示服务终止是否成功。

处理车辆的信息反馈,参数为车辆基本状态信息类型。

接收并处理IO设备的反馈信息,参数为IO设备信息。

接收并处理充电桩的反馈信息,参数类型为充电桩信息。

向指定ID的AGV添加执行指令,参数包括AGV的ID和指令的相关值。

同步数据库的基础档案信息到内存。

发送车辆执行路线的指令,参数类型为车辆信息。

向指定ID的充电桩通讯层添加执行指令,参数包括充电桩的ID和指令相关值。

添加IO设备的控制指令,参数包括IO设备的ID和指令相关值。

调用Web API接口,参数为车辆信息,返回值为字符串类型表示调用结果。

清除指定车辆的锁定资源,参数为车辆信息类型。

获取交通信息,返回值为字符串类型,表示交通信息内容。

此接口的设计意图是为了定义一个调度核心类所需要实现的方法契约,使得调度系统功能够统一管理AGV车辆、充电桩和IO设备的指令发送、状态反馈和信息处理等功能。由此可见,实现该接口的类将担负起调度系统的中心角色,协调系统内部各设备的交互和运行状态。

调度模型类库

AGV命令枚举类

这些枚举值代表了可以对AGV执行的各种指令和动作,用于指导小车的运行状态、动作切换、性能配置等。以下是枚举中定义的部分关键项及其用途:

启动,表示让AGV开始运行的指令。

停止,用于让AGV停止运行的指令。

切换路线,只是AGV切换其当前的导航路线到另一条路。

速度设置,允许对AGV的运行速度进行调节。

设置PBS,可能涉及到对AGV周边安全管理或者路径调度系统的配置。

升起勾销/降下勾销:控制AGV上的勾销装置,用于装卸货物等操作。

取消当前任务,指令AGV停止当前执行的任务。

读写寄存器通道,对AGV的内部寄存器进行读写操作,用于设备的参数配置或状态读取。

转向,控制AGV的转向动作。

强制IO/强制IO充电用,用于控制AGV的IO设备,例如执行特定的输入输出控制动作,充电IO指明特定的充电动作。

强制站点,在逻辑上设置或修改AGV的站点信息。

避障设置,配置AGV的避障策略,以确保安全行驶。

模拟按钮动作,模拟按下AGV上的实体按钮,执行相应的操作。

读取站点指令,获取指定站点的指令数据。

线路站点设置,配置AGV行驶的路线及站点信息。

充电桩相关的控制指令也包括在枚举中,例如:

开始充电

结束充电

心跳查询,可能用于检查充电桩的连接状态或AGV的充电状态。

枚举通过为AGV系统和相关设备定义一套标准化的指令集,使得系统能够统一管理和调度AGV的运行行为,从而提高了系统的可扩展性和可控制性。

AGV通讯参数类

设置和存储AGV在作为Socket服务端时需要的网络参数。

服务器端的IP地址,允许外部获取和设置。

服务端的端口号,可被外部获取和设置。

叉车动作命令枚举

叉车的叉举动作,1降 2升。

叉举高度。

构造函数无参,初始化叉举动作值为1,叉举高度值为0.

地标相关命令类

描述AGV在达到特定地标时应执行的动作指令及其详细参数。

构造函数,初始化部分成员变量。动作类型为0表示没有特定动作。导航类型默认为激光导航,任务条件代码初始化为空字符串。

地标代码:字符串,标识AGV达到的特定地标。

导航类型:整数类型,定义了AGV导航的技术手段,如激光导航、激光导航+二维码终点定位、二维码导航等。

X\Y,双精度浮点数,标识在激光导航中使用的坐标值。

角度,整数,AGV达到地标时的角度。

移动方向,整数,标识AGV的前进方向,0前进1后退。

转向方向,整数,0右转,1左转。

移动速度,整数。

避障参数,整数。

动作类型,整数。描述AGV达到地标时执行的动作,包括无动作、充电、升降平台、夹持机构的操作等。

是否传感器停车,整数,0否,1是。

额外动作参数,整数,比如叉车抬升高度。

任务条件编号,字符串,用于定义必经过程中的特定条件。
任务条件配置明细ID,整数ID,用于精确控制必经过程中的任务条件。

等待时间,双精度浮点数,表示在地标处的等待时间。分钟单位。

类提供了这些详尽的属性,允许精细地控制AGV在到达特定地标时的行为,使任务执行更加灵活和准确。

命令转值类

该类映射了AGV指令与相应的命令值。

命令,类型为AGV命令枚举的公有属性,表示AGV接收的命令类型,区分不同AGV命令。

命令值,类型为object的公有属性,它持有与命令相关的命令值。允许存储任何类型的数据。

单参构造函数,接受一个AGV命令枚举类型的参数,并赋值给命令属性。

双参构造函数,接受一个AGV命令枚举类型的参数和一个object类型的命令值作为参数,并分别赋值给属性。

类通过构造函数提供了灵活的初始化方式,可以只指定命令,也可以同时指定命令和相应的值。

TCP客户端类型枚举

0 未知类型TCP客户端

操作台类型的TCP客户端

App类型的TCP客户端

在使用TCP网络通信时,这个枚举可以用来识别或区分连接到服务器的客户端类型,这有助于针对不同类型的客户端实现特定的逻辑处理。

Mes模型

车辆消息类

类用于存储小车信息的消息。

生产厂区或工厂相关信息、小车编号、小车当前站点

无参构造函数,初始化所有属性为空字符串。

设置值方法,参数小车信息,通过该对象设置属性值。厂区值为固定字符串。

设置值方法2,参数为小车ID和站点字符串。赋值给属性。厂区默认字符串。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值