控制虛擬機器械手臂
# 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 中的控制控制元件,控制場景中的機械臂,拖動三個滑塊控制元件,可使機械臂執行移動的操作,點選抓取按鈕,控制機械臂爪子抓取物體、鬆開物體的操作。