【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和站点字符串。赋值给属性。厂区默认字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/12656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Beego 使用教程 6:Web 输入处理

beego 是一个用于Go编程语言的开源、高性能的 web 框架 beego 被用于在Go语言中企业应用程序的快速开发,包括RESTful API、web应用程序和后端服务。它的灵感来源于Tornado, Sinatra 和 Flask beego 官网:http://beego.gocn.vip/ 上面的 bee…

P2234 [HNOI2002] 营业额统计

题目描述 Tiger 最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger 拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大…

对话机器人技术解说

一、RAG介绍 如何不通过微调模型来提高LLM性能,检索增强生成(RAG)是未来的发展方向。 Embedding:将文档的句子或单词块转换为数字向量。就向量之间的距离而言,彼此相似的句子应该很近,而不同的句子应该离…

react-native 渲染引擎经历了什么

React Native 的渲染引擎经历了多个迭代,不断优化和改进。以下是一些较为显著的迭代: 原生组件封装:最初的 React Native 版本是通过 JavaScript 渲染 UI,并通过桥接层将 UI 转化为原生组件。随着发展,React Native 开…

Spring的监听器使用(实用,直接拿去修改可用)

一,前言 这里我们以ApplicationListener为例,简单说明一下监听器如何使用。 本人基本只输出实用,即用的代码,希望能帮助到各位,如果想研究底层逻辑,大家可自行根据代码去类源码查看。 监听器的使用主要分…

美易官方:收盘美股收涨纳指创历史新高,市场关注CPI通胀数据

​收盘之际,美股市场呈现出一派欣欣向荣的景象,各大指数纷纷收红,尤其是纳斯达克指数更是创下了历史新高,市场气氛热烈而积极。这一日的交易过程中,投资者们信心满满,积极寻觅着能够带来丰厚回报的投资机会…

上层建筑(理解)

上层建筑(Superstructure)是指建立在一定经济基础上的社会意识形态以及与之相适应的政治法律制度和设施等的总和。它包括阶级关系(基础关系)、维护这种关系的国家机器、社会意识形态以及相应政治法律制度、组织和设施等。 上层建筑与经济基础对立统一。建…

用go语言写一个代码,加班就自动给老婆发信息,下班自动提醒的代码

文章推荐 1 作为程序员,开发用过最好用的AI工具有哪些? 2 Github Copilot正版的激活成功,终于可以chat了 3 idea,pycharm等的ai assistant已成功激活 4 新手如何拿捏 Github Copilot AI助手,帮助你提高写代码效率 5 Jetbrains的a…

相机模型,坐标变换,畸变

小孔成像模型 墨子就记录了小孔成像是倒立的。这从几何光学的角度是很好理解的:光沿直线传播,上方和下方的光线交叉,导致在成像平面位置互换。 小孔的大小有什么影响? 小孔越大,进光量变大了,但是成像平…

第二步 完善MBR

文章目录 前言一、什么是MBR?二、我们需要什么样的MBR?三、设计我们的MBR!1、打印“1 MBR”2、加载次引导程序——loader 四、实践检验! 查看系列文章点这里: 操作系统真象还原 前言 在上一篇文章 第一步 从启动BIOS开…

社交电商的三大模式,新零售招商模式策划

链动21奖励模式,七人拼团模式拆解,分享购模式解析 坐标:厦门,我是易创客肖琳 深耕社交新零售行业10年,主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 随着数字时代的到来,“互联网”概…

PyCharm2023 社区版安装 +中文语言包+配置教程+Python环境搭建

一、Python 安装 我们在安装Pycharm之前,首先要先安装Python环境也就是安装Python解释器 因为PyCharm是一个用于编写和调试Python代码的开发工具,而Python解释器是用于解释执行Python代码PyCharm需要依赖Python解释器来执行Python代码,因此…

R语言贝叶斯方法在生态环境领域中的应用

贝叶斯统计已经被广泛应用到物理学、生态学、心理学、计算机、哲学等各个学术领域,其火爆程度已经跨越了学术圈,如促使其自成统计江湖一派的贝叶斯定理在热播美剧《The Big Bang Theory》中都要秀一把。贝叶斯统计学即贝叶斯学派是一门基本思想与传统基于…

R语言基础--文件读写

From生物技能树(R第五节) 文章目录 一、文件读写1.注意用project管理工作目录2、文件读取1、读取.txt文件2、读取.csv文件注意:数据框不允许重复的行名 3.数据框的导出4.读取文件的其他方式(用于读取/导出文件的R包)--经验1.base2.readr3.dat…

图搜索算法-最小生成树问题-克鲁斯卡尔算法(kruskal)

相关文章: 数据结构–图的概念 图搜索算法 - 深度优先搜索法(DFS) 图搜索算法 - 广度优先搜索法(BFS) 图搜索算法 - 拓扑排序 图搜索算法-最短路径算法-戴克斯特拉算法 图搜索算法-最短路径算法-贝尔曼-福特算法 最小生…

CocoaPods 安装 b rew安装

安装 CocoaPods 通常是在 macOS 上进行的。以下是安装 CocoaPods 的步骤: 安装 Homebrew(如果尚未安装): Homebrew 是 macOS 上一个非常受欢迎的软件包管理器。你可以在终端中执行以下命令来安装 Homebrew: bash Copy…

【Redis】数据类型

Redis数据类型(5 3 1) 五种基本数据类型 String字符串 特点 二进制安全,可以包含任何数据,如数字,字符串,jpg图片或者序列化的对象 应用场景 缓存: redis作为缓存层,mysql做持…

【ORACLE战报】2024.4月最新OCP考试喜报.

课程介绍 DBA数据库管理必备认证:ORACLE OCP 19C 教材下载 ORACLE OCP 19C 官方电子教材 ORACLE OCP 12C官方电子教材 题库下载 ORACLE 19C题库 (083384题、082362题)-2024答案修正版.rar 所有的收获都是默默耕耘的成果 2024.4月【最新考试成…

Chromium 调试指南2024 Windows11篇-条件断点、函数断点(十一)

1. 前言 在调试过程中,步进代码和条件断点/函数断点是非常有用的工具和技术,它们可以帮助开发者更加精确地定位和解决问题。本文将介绍步进代码的常用工具以及条件断点/函数断点的设置方法,帮助开发者更加高效地进行调试工作。 2. 步进代码…

ControlNet原理解析

前排提示照片已经获得小姐姐许可。 光知道ControlNet好用,不想知道它背后的原理么?今天就看一看这篇论文,带大家了解一下ControlNet是如何炼成的。 ControlNet是干嘛的 我们知道现在文本到图像生成很火爆,你只需要输入文字就可以…