• 沒有找到結果。

基于 C/S 模型计算机与机器人之间的网络通信技术

第 3章 系统通信模块的设计与开发

3.2 基于 C/S 模型计算机与机器人之间的网络通信技术

基于C/S 模型计算机与机器人之间的网络通信技术,利用以机器人为服务器,

外部计算机为客户端,组成的机器人控制网络。

3.2.1 Client/Server 结构

C/S 计算模型是由麻省理工学院的 Forrestoer Restarch 于 1989 年首先提出口

[31],起初是为了解决台式计算机与网络服务器之问的数据和应用软件的共享而设 计的一种计算机网络结构。如今,基于C/S 的计算机网络模型已发展为一种标准 的计算机网络模型,它可以定义如下:客户机是指运行用户服务请求程序,并将 这些请求传送到服务器的计算机。服务器是指管理数据资源,响应并受理由客户 机发出的请求,并将计算结果传送给客户机的计算机。服务器可接受多个客户机 的多个请求,将请求排队或同时处理。可以看出,服务器运行服务器程序,响应 并执行来自前端客户的服务请求,最后向前端返回计算结果;而客户机,前端运 行客户端程序,向服务器发出请求。两者基于网络通信机制实现了任务的分工和 资源的共享。

Fig. 3-3 Three-layer structure of C/S model 图 3-3 C/S 的三层结构

C/S 计算模型以三层 C/S 模型为基础,可以概括有以下两种类型:(1)C/S 三 层结构模型的分布式表示,如图 3-3 所示。服务器不仅用于数据管理服务,而 且用于对数据进行计算并显示结果应用程序服务,客户机则只显示系统的计算结 果,多数处理保留在主机或服务器上,客户机和服务器在同一个局域网里。由于 有数据服务、应用服务和客户端三个层次,所以称之为C/S 模型三层结构。(2) C/S 三层结构模型的Internet 远程表示,如图 3-4 所示。这是 C/S 三层结构模型的扩 展,在服务器上进行数据管理和计算,而在客户机上只显示计算结果,服务器不

显示结果,服务器和客户机不在同一局域网里,而是属于Internet 范畴。因此,

在C/S 模型中,服务器上进行数据管理和一部分计算,客户机上进行一部分计算 并显示计算结果,这种方式的应用程序分布在服务端和客户端,利用了工作站的 计算能力减少了服务器的处理请求,并且可灵活配置硬件和软件,实现了C/S 计 算模型。同时,对于局域网内的多个不同平台的C/S 应用,采用 C/S 思想的,基 于Internet 的 Web 应用方式,可以实现异构系统之间的信息交换及其几乎是无限 制的系统扩展能力。采用这种结构,由于使用TCP,IP 协议,使 Internet 和所有 局域网无缝连接,解决了异构系统同的连接,系统不限制系统的用户数,具有彻 底的开放性,系统扩充容易。

Fig. 3-4 Three-layer structure C/S model of internet 图 3-4 C/S 的 INTERNET 的三层结构

3.2.2 基于 C/S 模型机器人与计算机之间的网络通信模式

以机器人控制器为服务器,外部计算机为客户机组建机器人控制网络。ABB S4 型工业机器人控制器具有基于 C/S 模型性能,提供了一些标准的服务,并可 响应外部计算机作为客户机发出的请求,其服务程序主要提供的功能[32,33,34,35]

有:

基本管理服务,如建立或关闭外部计算机与机器人的连接;

机器人语言数据的通信,外部计算机可以在线与机器人 RAPID 程序数 据区定义的数据进行通信。如布尔型,空间点型,夹具型,速度型等数 据类型;

文件管理服务,外部计算机可以在线的进行文件的传输,打开关闭文件 等操作;

机器人程序控制服务,如机器人程序的装入,执行,停止等操作;

S4 控制器配置服务,如机器人控制器状态读取,机器人状态的控制,机 器人的打开关闭等操作。

如图 3-5[36]所示,机器人控制器一方面作为操作手的控制系统;另一方面 作为服务器,提供数据管理服务和应用服务,响应并受理由外部计算机发出的请 求,并将计算结果传给外部计算机。

Manipulator Controller

RPC Server RPC Client PC/Workstation

Ask Answer Spontaneous

informent

Fig. 3-5 The sketch gap of connection between robot and computer based C/S mode 图 3-5 基于 C/S 模型机器人与计算机通信示意图

ABB 公司的 WebWare 软件是基于 Ethernet 进行计算机与机器人程序的数据 通信,其原理是基于RAP 的 DCOM。机器人控制器所具备的所有服务,也是以 远程过程调用 RPC 存根函数库的接口形式提供,服务器程序则由机器人控制器 厂家自动转载。远程过程调用RPC,其基本原理[38]见图 3-6,从图可以看出,

Fig. 3-6 Remote procedure call 图 3-6 远程过程调用

行实时数据通信。RPC 服务器程序可以跨进程与操作系统或机器人程序进行数 据通信,从而获得机器人系统和机器人程序的状态和数据变量。外部计算机运行 RPC 客户端程序,通过 WinROBWeld 的通信模块向机器人控制器发出请求,并 实时响应机器人控制器上的RPC 服务器程序的答复的方法进行数据通信。

Fig. 3-7 The connection principle between WinROBWeld system and robot 图 3-7 WinROBWeld 系统与机器人通信原理

3.2.3 机器人 RAPID 主程序设计

机器人RAPID 主程序,主要用来完成对机器人的控制与操作以及辅助设备 的控制。它分为两部分:数据区和程序区,如图 3-8 所示。数据区被程序区调 用,数据区与WinROBWeld 系统的通信模块进行实时通信。

Fig. 3-8 Communication between system’s programs 图 3-8 系统程序间通信图

在程序区中建立了与不同路径类型对应的子程序及控制加工设备的子程序,

并在数据区预设路径元素的坐标数据,机器人主程序循环检测各个子程序入口的

布尔量,如果布尔量为 1 则执行相应的子程序,因此WinROBWeld 系统可以对 各子程序的布尔量进行设置 1 和 0 来决定机器人程序的流程,执行相应的操作。

在设置子程序布尔量之前,WinROBWeld 系统首先把路径元素的数据传输给机 器人数据区的数据变量,使机器人获得计算机离线编程后的路径轨迹数据,然后 WinROBWeld 系统对机器人程序中的该子程序入口的布尔量进行置 1,则机器人 程序就执行相应路径的行走动作。这样就实现了 WinROBWeld 系统在线控制机 器人进行空间操作的方法。机器人主程序流程图如图 3-9 所示。

Fig. 3-9 The flow chart of the server robot RAPID program 图 3-9 机器人 RAPID 主程序流程图

该方法突破了传统计算机与机器人之间的通信技术,解决了以往不能在线获 得机器人控制器以外传感器的数据,并节省了计算机与机器人大量数据通信的时 间。

控制加工设备的子程序,比如控制激光器、MIG 及 TIG 焊机等的子程序。这 些子程序是,根据机器人IO 口与加工设备的连接情况,依次设置或读取 IO,进 而控制加工设备。

3.2.4 客户端程序设计

客户端程序,对应于 WinROBWeld 系统的通信模块。从通信数据处理这个 角度将通信模块处理过程分为读取、转换及发送三个过程。

读取:系统的程序数据主要存储在全局的结构链表中。分为指令序列链表和 指令链表。指令序列链表是总体框架,并与其他指令链表,如路径链表、速度链 表、域值链表等存在映射关系。指令链表的定义如下:

instr_number 是当前结点的索引,instr_type[0]代表当前结点指令类型,映射 到相应类型的指令链表中。instr_type[1]是当前结点的指令内容在被映射的指令 链表中的索引。系统重要指令链表如表 3-1 所示,通过依次读取指令序列链表 中的数据,并以此为基准读取其他链表的数据,从而获取全部的程序数据信息。

指令类型 CALL COMMENT FETCH FRAME RRETURN TCP WAIT

指令编码 2 3 4 5 11 14 17

Table. 3-1 The instruction type and its code of WinROBWeld system 表 3-1 WinROBWeld 系统指令类型及其编码

转换:将读取到的程序数据信息转换到 InterLink OLE Object 中,比如 S4RobPosData 、S4RobTarget、S4Pose、S4SpeedData、S4ToolData 及 S4ZoneData 等。OLE object 可以像结构体那样来定义与使用。下列代码给出 S4RobTarget 在 Visual C++中的定义。定义后就可以使用它的成员函数访问它的内部数据了。

表3-2 给出了 RAPID 数据类型、Visual C++中的类名及 InterLink OLE 对象类

IRobPosData m_Robpos;

m_Robpos.CreateDispatch("S4RobPosData");

ASSERT(m_Robpos.m_lpDispatch);

struct instruction_order {

int instr_number; //结点索引

int instr_type[2]; //指令类型及其内容 struct instruction_order *next;

};

typedef struct instruction_order INSTR_ORDER;

RAPID Type Class Type in VC++ InterLink OLE Object Type

Array of any type IArrayData S4Array

confdata IConfData S4ConfData extjoint IExtJoint S4ExtJoint

loaddata ILoadData S4LoadData motsetdata IMotSetData S4MotSetData orient IOrient S4Orient pos IPos S4Pos pose IPose S4Pose progdisp IProgDisp S4ProgDisp robposdata IRobPosData S4RobPosData robtarget IRobTarget S4RobTarget speeddata ISpeedData S4SpeedData tooldata IToolData S4ToolData wobjdata IWorkObjectData S4WorkObjectData xdata IXData S4XData

zonedata IZoneData S4ZoneData

Table. 3-2 The RAPID variable type and its corresponding type in OLE and in class type in Visual C++

表 3-2 RAPID 变量类型及与之相应的 OLE 对象类型

发送:通过WebWare SDK 的 ActiveX 控件的 helper 对象,将转换后的信息 发送到机器人程序数据区的 RAPID 变量对象中。比如发送到 robtarget、pose、

speeddata、tooldata 及 zonedata 等变量中。RAPID 变量类型、VC++的类名及 OLE 对象类型如表3-2所示。

3.2.5 通信模块层次结构

上小节从通信数据处理这个角度,将通信模块处理过程分为读取、转换及发 送三个过程。在这里分析通讯模块的层次结构,如图 3-10 所示,将通信模块设 计成以下三层:组织层、支持层及执行层。

Fig. 3-10 The hiberarchy of connection model 图 3-10 通信模块的层次结构

组织层,完成用户交互及信息显示,分析 WinROBWeld 系统生成的离线编 程数据,根据程序的路径不同,完成数据的读取与转换,并放于系统的临时对象 后,调用支持层。实时读取支持层的状态信息以控制程序的运行节奏。

支持层,接收系统临时对象中的数据,发送数据到机器人 RAPID 程序,并 根据路径类型设置相应子程序的入口布尔量。实时读取机器人运行程序状态以控 制程序的运行节奏。把这些功能封装到 CRobotS4API 类中,这样既提高了编程 效率与程序代码简洁性,也方便了程序移植。CRobotS4API 主要功能有:启停机 器人;运行与停止机器人RAPID 程序;控制机器人行走直线、圆弧、园等路径;

读写程序变量与机器人I/O;控制路径与激光焊接参数及获取实时 TCP 等。

CRobotS4API 类的设计编写是支持层开发的重点,以下给出 CRobotS4API 类的启动机器人函数的部分代码:

与机器人RAPID 程序的子程序对应,RobotS4API 类中包含了回零(Home)、走

与机器人RAPID 程序的子程序对应,RobotS4API 类中包含了回零(Home)、走

相關文件