向您现有的INF系统或受INF内核支持的系统添加支持VDA5050协议规范的移动设备
AGVsTD早已在2023年10月就实现了VDA5050接口协议,并在未来进行了数万小时的混合调度接口测试,现在您可以将支持VDA5050协议的移动设备添加到INF系统。
什么是VDA5050?由德国汽车工业协会(VDA)发布的用于自动引导车(AGV)和主控制系统之间的通信协议,具体内容和介绍可转到Github社区查看。该协议致力于简化新车辆和集群控制系统之间的连接,实现快速插拔式AGV添加,以在汽车行业中将来自不同制造商的AGV和现有集群控制系统在同一个工作环境中并行运行。
AGVsTD现已在INF上实现该接口协议并通过测试,下面描述在INF中添加基于VDA5050协议的移动机器人设备流程:
注意,根据您手里的INF产品版本,相关软件的UI控件可能有所区别
打开INF产品系列中的INF Studio工作室软件:
将VDA5050协议设备加入INF需要三步:
1.通讯配置;
2.车型配置;
3.将通讯和车型配对创建一个VDA支持的AGV设备。
一、添加和配置通讯
点击菜单栏中的“配置”选项卡,选择工具栏组“通讯”中的“通讯设置”工具:
这将打开如下画面:我们这里选择“创建”,来创建一个基于MQTT通讯协议的通讯设置
选择通讯类型为“消息队列”,适配器选择“MQTT配置数据”:
然后为其命名,这里是“AGV 44”,稍后点击“通讯配置数据”让我们来配置MQTT相关设置:
其中包括用于登录的客户端Id,用户名和密码,消息编码选择UTF-8,消息协议选择VDA5050_2.0最新版本。
然后再创建一个稍后用于INF Device Simulator(INF设备模拟器)的通讯设置“AGV SIM 44”:
这将在INF Device Simulator启动后自动启动一个模拟AGV程序来和INF进行真实VDA5050接口协议通讯,该模拟策略使用基于真实环境的接口通讯机制,即所见即所得,和实际项目部署完全相同。
值得注意的是,如果您的系统处于没有MQTT服务端可用的环境中,那么您必须再添加一个用于启动MQTT服务端的通讯配置,并将属性“作为服务端”设置为True,之后系统将根据此来开启一个MQTT服务端来负责接收和分发来自各个客户端的消息或者使用第三方MQTT服务端。其实在大型IoT项目中会有专门的部分(例如客户的主机系统MES,ERP,SAP等)来负责MQTT服务端的部署工作,这里我们已经存在这样的服务器,所以就不添加了。
二、添加和配置通讯之后点击“配置”工具栏中的“设备”-“类型”来创建 你要添加的VDA车型:
从下面的选项卡中选择类型为Vda5050,该类型一旦创建,后续再添加相同类型的AGV时就不需要再创建了,如果已经存在添加的车型则忽略该步骤:
(INF内部已经实现海内外多种可以直接用于生产环境的接口协议)
并根据项目需求和可阅读的factsheet来配置VDA设备集合参数,VDA官方给出的factsheet包含的信息不足或更为粗糙或过剩,您必须结合具体项目来确认相关项的值。例如,假如factsheet中包含agv可以处理的最多节点数量为30,但是您必须考虑INF系统交通管制优化计划,所以您只能在“发送到AGV最大路径段数量”中填写5,而不是30或者29。因为过多的路径发送可能会导致不必要的交通管制(过量资源占用):
令INF自豪的是,可以在如下配置界面中实现“无代码”增加“instantActions(即时指令)”扩展,这意味着您的VDA设备具备的所有即时指令都可以无代码适配到INF系统并在INF Coder调用,点击AGV指令集:
添加用于该车体和项目的即时指令和参数集,下面以启动充电和停止充电为例,INF中还实现了设置货叉高度的指令(有一个参数:目标货叉高度),在该配置卡中还可以为每一个即时指令配置Qos安全质量。值得注意的是该选项卡界面并非是VDA协议独有,其他协议也会使用诸如指令号等参数,它们分别只使用自己感兴趣的属性:
选择“配置数据”可以配置其他Topic的安全Qos和制造商版本等(为了方便和VDA文档匹配,这里直接用英文属性显示):
三、添加设备
点击工具栏中的“设备”,然后在弹出的对话框点击“创建”
在弹出的对话框中进行如下配置,并为其指定步骤一和步骤二中创建的通讯设置(AGV 44、AGV SIM 44)和设备类型(VDA)
现在,所有添加VDA接口设备的操作已经完成,保存INF Stuido。
打开INF SCADA,进入“探索”选项卡,点击“热重载”;如果您的INF SCADA没有“探索”菜单,或者探索菜单下没有“热重载”那么您需要重启INF服务管理器(记得暂停所有AGV,重启之后点击继续所有AGV),如下:
这样可以在不操作其他单机设备的情况下重启INF服务。
【注意,以下操作可能涉及危险】
重启之后,您需要将您的VDA设备驾驶到存在定位环境和路径规划的通道上,建议找到一条路径规划简单的、暂时没有其他AGV存在的主路径,然后将VDA设备摆正,大概和规划的路径平行,然后将其从手动转化到自动模式(注意,危险),此时您的VDA设备受INF控制并移动,您应该远离它。如果转化到手动之后,设备没有移动,您可能需要更换位置重复之前的手自动转化操作。
下面的信息是非常重要的,由于VDA5050的不成熟性,我们对其进行了私有的“微妙”改善,如果您想在您的VDA设备上体现与INF接口设备的美好体验,您可能需要要求您的VDA厂商实现如下功能:
文本文字信息传递
为了更好的理解AGV当前正在做的任务,而不携带笔记本,那么在VDA设备上显示来自INF的文本文字提示显得尤为重要,这样您可以在您的VDA设备上查看来自INF系统的一些关键信息,比如当前AGV正在前往某些位置做哪些事情,或者遇到什么麻烦,这是通过instantActions(即时指令)实现的,类型为“displayText”,action参数(始终为第一个)的值为要显示的文本文字(UTF-8编码),下面是一个例子,来自INF的意思为:从手动到自动转化失败(我们称之为上线失败)的json例子(后面有关于上下线的描述):
{
"actions": [
{
"actionType": "displayText",
"actionId": "41b24e26-9b7f-4ea6-8913-0d3a4f5f5f72",
"actionDescription": "",
"blockingType": "NONE",
"actionParameters": [
{
"key": "text",
"value": "failedOnline"
}
]
}
],
"headerId": 23117,
"timestamp": "2024-10-25T13:31:00.00Z",
"version": "2.0.0",
"manufacturer": "VDA",
"serialNumber": "36"
}
该即时指令(文本文字显示)不需要执行类似其他的即时指令的状态变化,只需要将传递的文本文字打印到AGV显示器上即可。当然,如果愿意,也可以变化,但是INF不关心这个指令的状态变化,因为马上会有新的文本文字的即时指令传输到AGV,对之前的文本提示进行覆盖/刷新。
以下是基于INF标准为增强安全考虑的附件注意事项:
上线概念,VDA5050接口协议规范中不存在设备上线、下线的概念,这与INF标准的接口存在偏差,使用如下操作来完成类似INF标准设备接口的上下线操作:
如果您将您的VDA设备从手动转化为自动,INF会认为这是一个类似INF标准中的上线申请,如果附近的资源可用,INF会控制AGV驱动,之后您可以远离AGV去做自己的事情;当然,如果手自动转化之后AGV没有移动,如果您的VDA实现了上面的文本文字显示功能,那么您应该可以从AGV显示屏观察到来自INF的信息,如果您的VDA没有实现文本文字显示功能,您可以从INF SCADA中找到为什么上线失败的原因,通常,手动驾驶移动AGV位置再次转为自动可能会成功。
注意,由于VDA中没有上下线概念,并且INF现在始终将手动到自动的切换识别为上线申请,如果您希望您的VDA设备在自动模式下不受到INF控制,比如调试设备统一性校准/标定等工作,您应该在INF SCADA中将该AGV从系统移除,您可以在INF SCADA的设备页面或者INF MeTA中找到该AGV,然后右键选择“禁用”:
之后您可以在不受INF控制的情况下自动运行您的VDA设备去完成标定校准工作。工作完成后,如果您希望将您的禁用VDA设备重新加入INF系统,切记,回到INF SCADA中,右键该设备,选择“启用”。
下线概念,VDA中不存在下线概念,如果您希望在您的VDA设备上获得与INF标准设备接口完全相同的美好体验,那么您需要这些知识:当自动作业的AGV出现致命故障,必须手动驾驶离开前往维护区域,INF为了保证设备之间的安全性能,在您手动驾驶物理真实的AGV离开后,实际上INF系统中仍旧会保留该AGV在受系统控制最后一刻的位置和信息。如果您不做任何处理,该信息会阻塞其他通过的AGV,所以,在您将VDA设备手动驾驶到安全的位置之后,您需要从INF SCADA中将其下线,在INF SCADA的设备页面或者INF MeTA中找到该AGV,右键选择,从“从布局移除”(注意,只有AGV切换到手动后,该按钮才可用),后续将您的VDA设备重新上线不需要点击“启用”按钮,而是直接驾驶到相关位置完成手自动切换即可。
以上,便是在INF系统中添加VDA接口设备的流程和注意事项,祝您一切顺利!
有任何问题您都可以在INF SCADA的报告选项卡提交Issue并将其发送到您的支持工程师团队或者发送邮件到support@agvstd.com。