控制虚拟机械手臂
# PinToo 虚拟机械手臂
# 1. 说明
- Android 开发工具 PinToo 使用 ModbusTCP 协议,控制虚拟工厂场景中的机械手臂,实现机械臂的位移、抓取物件等操作。示例中的 X轴、Y轴与Z轴滑块用于控制机械臂的位移动作。抓取物体的操作由抓取按钮控制。
- 范例所使用的虚拟工厂为 Factory IO,这是一款出色的虚拟仿真软件,可以自由使用其内部的各种元器件、传感器、驱动器等搭建自己理想中的工业现场,并联合PLC进行编程仿真。
- Factory IO 虚拟场景所使用的传感器与驱动器,通过ModbusTCP映射至指定的寄存器,通过读取对应的寄存器地址,可以得知机械手臂的运行状态。通过写入驱动器的数值,控制机械臂的位移与抓取动作。
# 2. 设计步骤
# 2.1. Factory IO 场景设计
Factory IO 场景的设计步骤如下:
- Factory IO 场景中包含一个平移式机械臂,机械臂下方有传送带与模拟使用的纸箱。
- Factory IO 场景设置完成后,请修改场景的驱动设置。点击菜单栏中的
文件-驱动
,在下拉框中选择驱动方式为Modbus TCP/IP Server
,点击右侧的配置
按钮,将从站ID 修改为255
。IO配置
界面中的数值按照下图所示的内容修改。

- 传感器与控制器的设置界面按照下图所示的内容设置。这个步骤用于Modbus寄存器与传感器的绑定。后续 PinToo 会依照图示的寄存器地址设计。

- 场景的配置完成后,开始设计 PinToo 界面。
# 2.2. PinToo 程序设计
开启PinToo设计器,分别加入下插图之控件。

PinToo程序设计流程步骤如下:
- 设计布局,界面中的布局主要为标题栏与下侧的内容显示区,标题栏放置显示的标题,内容区域放置控制的滑块与按钮。
- 设计区域放置
TfxModbusTCP
控件,对应的控件名称分别为fxModbusTCP1
-fxModbusTCP4
。控制的项目有四种类型,需要放置四个控件来对每个控件进行控制,需注意修改每一个控件的Host
属性,修改属性取值为 Factory IO 中设定的地址,其他取值的填写是无效的。还需注意UnitID
的取值是否与Factory IO 中设置的从站ID
一致,如不一致请修改为 Factory IO 中预设的值。 - 放置滑块控件
TfxHorzSlider
、TfxVertSlider
,共计放置三个控件,控件名称分别为slideX
,slideY
,slideZ
。都需要调整旋转角度的属性RotationAngle
。 - 放置按钮,开启与关闭时,按钮的显示状态图片上传至控件中。
详细的的控件清单如下:
- TfxRDVertSlideBar 组件,控件名称为
slideX
。 - TfxRDHorzSlideBar 组件,控件名称为
slideY
。 - TfxRDHorzSlideBar 组件,控件名称为
slideZ
。 - TfxSwitchButton 组件,控件名称为
fxSwitchButton1
。 - TfxModbusTCP 组件,控件名称为
fxModbusTCP1
。 - TfxModbusTCP 组件,控件名称为
fxModbusTCP2
。 - TfxModbusTCP 组件,控件名称为
fxModbusTCP3
。 - TfxModbusTCP 组件,控件名称为
fxModbusTCP4
。
以下是各控件需要调整的属性的说明。
fxRunFrame属性设置
Height
:设置页面高度=800
。Width
:设置页面宽度=400
。
slideX 属性设置
ValueMax
:设置取值的最大值,设置为1000
。RotationAngle
:设置控件旋转的角度,设置为-90
。
slideY 属性设置
ValueMax
:设置取值的最大值,设置为1000
。RotationAngle
:设置控件旋转的角度,设置为90
。
slideZ 属性设置
ValueMax
:设置取值的最大值,设置为1000
。RotationAngle
:设置控件旋转的角度,设置为90
。
fxSwitchButton1 属性设置
SwitchOffBmp
:设置处于关闭状态时显示的图片。点击右侧的按钮打开图片编辑器,选择图片进行上传。SwitchOnBmp
:设置处于开启状态时显示的图片。点击右侧的按钮打开图片编辑器,选择图片进行上传。
fxModbusTCP1 属性设置
Host
:设置Factory IO 场景的 IP 地址,此处需填写 Factory IO 中指定或默认设置的地址。
fxModbusTCP2 属性设置
Host
:设置Factory IO 场景的 IP 地址,此处需填写 Factory IO 中指定或默认设置的地址。
fxModbusTCP3 属性设置
Host
:设置Factory IO 场景的 IP 地址,此处需填写 Factory IO 中指定或默认设置的地址。
fxModbusTCP4 属性设置
Host
:设置Factory IO 场景的 IP 地址,此处需填写 Factory IO 中指定或默认设置的地址。
# 3. 程序设计
点击程序设计界面右下角的按钮,切换至单元选择界面,勾选需要使用的单元。该程序需要引用uModbusTCP
单元。
# 3.1. 程序初始设置
设置演示模式,以及初始状态设定。
//演示模式下,此项被设置为 True ,演示模式下不会与设备或服务连接。
//相关的连接操作会被阻止,如需要使用范例功能,请将此项设置为 False。
const demo = true;
var
Detected,Grab: Boolean;
ZValue: Integer;
2
3
4
5
6
初始状态设置。
Procedure fxRunFrameAfterScriptRun(Sender: TObject);
var
v,w,z: word;
Begin
if demo Then
begin
fxSwitchButton1.HitTest := False;
exit;
End;
if fxModbusTCP1.ReadHoldingRegister(1,v) Then
slideX.Value := Round(v);
if fxModbusTCP2.ReadHoldingRegister(2,w) Then
slideY.Value := Round(w);
if fxModbusTCP3.ReadHoldingRegister(3,z) Then
begin
slideZ.Value := Round(z);
ZValue := Round(z);
End;
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 3.2. 事件设置
slideX - OnChange 事件
X轴的滑块移动时,向 Modbus 寄存器写入数值,控制机械臂在 X 轴方向上移动。
Procedure slideXOnChange(Sender: TObject);
Begin
if not demo Then
fxModbusTCP1.WriteRegister(1,slideX.Value);
End;
2
3
4
5
slideY - OnChange 事件
Y 轴的滑块移动时,向 Modbus 寄存器写入数值,机械臂在 Y 轴方向上移动。
Procedure slideYOnChange(Sender: TObject);
Begin
if not demo Then
fxModbusTCP2.WriteRegister(2,slideY.Value);
End;
2
3
4
5
slideZ - OnChange 事件
Z 轴的滑块移动时,向 Modbus 寄存器写入数值,机械臂在 Z 轴方向上移动。
Procedure slideZOnChange(Sender: TObject);
var
i: Integer
Begin
if (not demo) Then
begin
fxModbusTCP3.WriteRegister(3,slideZ.Value);
End;
End;
2
3
4
5
6
7
8
9
fxSwitchButton1 - OnSwitch 事件
按钮按动时,向 Modbus 寄存器写入数值,切换机械臂抓取、松开的状态。
Procedure fxSwitchButton1OnSwitch(Sender: TObject);
Begin
if (not demo) Then
begin
Grab := fxSwitchButton1.IsChecked;
fxModbusTCP4.WriteCoil(4,Grab);
End;
End;
2
3
4
5
6
7
8
# 4. 运行结果
使用鼠标在 PinToo 菜单,点击[保存至数据库]
按钮,将其保存至数据库,点击[调试运行]
确认能够正常打开。
通过同步中心,将程序上传至手机PinToo运行;同步时,请确保手机已经运行PinToo,并且已经登录。
当设备与虚拟场景连接时,可通过 PinToo 中的控制控件,控制场景中的机械臂,拖动三个滑块控件,可使机械臂执行移动的操作,点击抓取按钮,控制机械臂爪子抓取物体、松开物体的操作。
