通訊埠電子秤
# PinToo之通訊埠電子秤
- 文件號:P-EL-DEM-2002
# 1. 說明
範例採用通訊埠通訊協議,控制駁接在手機上的電子秤。手機端發送讀取指令,電子秤返回稱重重量的資訊;手機端發送去皮與置零的指令,電子秤端執行相應的操作。電子秤是工業生產過程中經常使用到的設備,現如今大部分近期生產的工業用電子秤都已經預留了通訊埠通訊的介面。在範例中使用的電子秤也具有該功能。
範例使用到的電子秤為耀華XK3190-A12+E,其秤頭的外觀如下圖所示。
地磅與秤頭按照上圖所示的內容進行連線,電子秤的外接通訊埠端與USB通訊埠轉接線的通訊埠端相連,另外一端與手機的USB埠連線,打開電子秤的開關。
通過範例學習,可以掌握通訊埠的基本通訊原理,並結合電子秤進行數據讀取的功能。
# 2. 設計明細
開啟PinToo設計器,分別加入下插圖之控制元件。或者點選左上角的[打開模板Lib檔案]
選擇模板檔案來打開對應模板。
①:TfxImageSearh元件,控制元件名稱為fxImageSearch
。
②:TfxText元件,控制元件名稱為fxTextStatus
。
③:TfxText元件,控制元件名稱為fxTextPilled
。
④:TfxText元件,控制元件名稱為fxTextWeight
。
⑤:TfxSwitchButton元件,控制元件名稱為fxSwitchButtonWeight
。
⑥:TfxImage元件,控制元件名稱為fxImageConnect
。
⑦:TfxUsbSerial元件,控制元件名稱為fxUsbSerial
。
⑧:TfxText元件,控制元件名稱為fxTextZero
。
fxRunFrame屬性設定
Height
:設定頁面高度=800
。Width
:設定頁面寬度=400
。
fxComboBox屬性設定
Visible
:設定控制元件是否可見=True
。Name
:設定控制元件名稱=fxComboBox
。
fxTimer屬性設定
Enabled
:是否啟用計數事件觸發功能,此處設定為False
。Interval
:計數時間的間隔,此處設定為1000
。
①fxImageSearch屬性設定
Height
:設定控制元件高度=40
。Width
:設定控制元件寬度=40
。Name
:設定控制元件名稱=fxImageSearch
。WarpMode
:設定影象在控制元件中顯示的模式,設定為Fit
,即影象適應于控制元件大小。Bitmap
:設定顯示的圖片,雙擊該屬性或者點選屬性右側的[...]
打開影象編輯器。點選[Load...]
打開資源管理器,選擇所需的圖片後點擊[打開]
,選擇的影象會顯示在預覽框中。可在該頁面下進行裁切或者縮放畫素以使影象與控制元件的寬度高度相適應,修改完成後點選[OK]
按鈕完成影象修改。
②fxTextStatus屬性設定
Text
:設定顯示文字=等待連線
。Height
:設定控制元件高度=40
。Width
:設定控制元件寬度=280
。Name
:設定控制元件名稱=fxTextStatus
。TextSettings
:設定文字字型的相關資訊。設定Font.Size
=18
。FontColor
=White
。HorzAlign
:設定文字在控制元件中的水平位置=Center
。VertAlign
:設定文字在控制元件中的垂直位置=Center
。
③fxTextPilled屬性設定
Text
:設定顯示文字=去皮
。Height
:設定控制元件高度=80
。Width
:設定控制元件寬度=80
。Name
:設定控制元件名稱=fxTextPilled
。TextSettings
:設定文字字型的相關資訊。設定Font.Size
=24
。FontColor
=White
。HorzAlign
:設定文字在控制元件中的水平位置=Center
。VertAlign
:設定文字在控制元件中的垂直位置=Center
。
④fxTextWeight屬性設定
Text
:設定顯示文字=35.200
。Height
:設定控制元件高度=70
。Width
:設定控制元件寬度=220
。Name
:設定控制元件名稱=fxTextWeight
。TextSettings
:設定文字字型的相關資訊。設定Font.Size
=64
。FontColor
=White
。HorzAlign
:設定文字在控制元件中的水平位置=Center
。VertAlign
:設定文字在控制元件中的垂直位置=Center
。
⑤fxSwitchButtonWeight屬性設定
Height
:設定控制元件高度=200
。Width
:設定控制元件寬度=200
。Name
:設定控制元件名稱=fxSwitchButtonWeight
。SwitchOffBmp
:設定開關狀態為關時顯示的影象,雙擊該屬性或者點選屬性右側的[...]
打開影象編輯器。點選[Load...]
打開資源管理器,選擇所需的圖片後點擊[打開]
,選擇的影象會顯示在預覽框中。可在該頁面下進行裁切或者縮放畫素以使影象與控制元件的寬度高度相適應,修改完成後點選[OK]
按鈕完成影象修改。
SwitchOnBmp
:設定開關狀態為開時顯示的影象,雙擊該屬性或者點選屬性右側的[...]
打開影象編輯器。點選[Load...]
打開資源管理器,選擇所需的圖片後點擊[打開]
,選擇的影象會顯示在預覽框中。可在該頁面下進行裁切或者縮放畫素以使影象與控制元件的寬度高度相適應,修改完成後點選[OK]
按鈕完成影象修改。
⑥fxImageConnect屬性設定
Height
:設定控制元件高度=40
。Width
:設定控制元件寬度=40
。Name
:設定控制元件名稱=fxImageConnect
。WarpMode
:設定影象在控制元件中顯示的模式,設定為Fit
,即影象適應于控制元件大小。Bitmap
:設定顯示的圖片,雙擊該屬性或者點選屬性右側的[...]
打開影象編輯器。點選[Load...]
打開資源管理器,選擇所需的圖片後點擊[打開]
,選擇的影象會顯示在預覽框中。可在該頁面下進行裁切或者縮放畫素以使影象與控制元件的寬度高度相適應,修改完成後點選[OK]
按鈕完成影象修改。
⑦fxUsbSerial屬性設定
UsbSerialType
:設定USB通訊埠的連線型別,此處設定為RS232
。
⑧fxTextZero屬性設定
Text
:設定顯示文字=置零
。Height
:設定控制元件高度=80
。Width
:設定控制元件寬度=80
。Name
:設定控制元件名稱=fxTextZero
。TextSettings
:設定文字字型的相關資訊。設定Font.Size
=24
。FontColor
=White
。HorzAlign
:設定文字在控制元件中的水平位置=Center
。VertAlign
:設定文字在控制元件中的垂直位置=Center
。
# 3. 程式設計
點選程式設計界面右下角的按鈕,切換至單元選擇界面,勾選需要使用的單元。該程式需要引用uUsbSerial
單元。
# 3.1. 程式初始設定
該程式無初始設定。
# 3.2. 事件設定
- ①fxImageSearch-OnClick事件
點選按鈕以載入通訊埠列表並顯示。
Procedure fxImageSearchOnClick(Sender: TObject);
//點選搜索按鈕尋找印表機
Begin
if fxUsbSerial.Devices.Text = '' Then
begin
fxTextStatus.Text := '請檢查通訊埠是否連線';
Exit;
End;
fxComboBox.Items := fxUsbSerial.Devices;
fxComboBox.DropDown;
End;
2
3
4
5
6
7
8
9
10
11
- fxComboBox-OnChange事件
點選切換選擇通訊埠。
Procedure fxComboBoxOnChange(Sender: TObject);
Begin
fxUsbSerial.UsbDevice := fxComboBox.Items.Strings[fxComboBox.ItemIndex];
fxTextStatus.Text := '已選擇電子秤';
End;
2
3
4
5
- ⑥fxImageConnect-OnClick事件
點選以打開通訊埠。
Procedure fxImageConnectOnClick(Sender: TObject);
//連線印表機
Begin
fxUsbSerial.Open(True);
if fxUsbSerial.Devices.Text <> '' Then
fxTextStatus.Text := '電子秤已連線';
End;
2
3
4
5
6
7
- ⑤fxSwitchButtonWeight-OnSwitch事件
點選以開啟/關閉計時器。
Procedure fxSwitchButtonWeightOnSwitch(Sender: TObject);
//切換讀取與非讀取狀態
Begin
fxTimer1.Enabled := fxSwitchButtonWeight.IsChecked;
End;
2
3
4
5
- fxTimer1-OnTimer事件
計時器定時觸發讀取電子秤的讀數。
Procedure fxTimer1OnTimer(Sender: TObject);
//連續讀取
Begin
fxUsbSerial.WriteByte(Ord('R'),1000);
End;
2
3
4
5
- ⑦fxUsbSerial-OnReceiveData事件
當通訊埠接收到資訊時解析數據並顯示。
Procedure fxUsbSerialOnReceiveData(Sender: TObject; ReceiveData: string);
//獲取接收資訊
var
FData:String;
ASymbol:string;
AStr:String;
AValue:float;
AD:string;
begin
FData := ReceiveData;
if FData <> '' Then
begin
FData :=Trim(FData);
if Copy(FData,1,2) = 'AD' Then
begin
ASymbol:=Copy(FData,3,1);
AStr:=Copy(FData,4,6);
if ASymbol='+' Then
AValue:=StrToFloat(AStr)*0.001
else
AValue:=StrToFloat(AStr)*0.001*-1;
fxTextWeight.Text := FloatToStr(AValue);
end;
end
else
begin
fxTextWeight.Text := '000.0';
end
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
- ③fxTextPilled-OnClick事件
點選按鈕以執行電子秤去皮操作。
Procedure fxTextPilledOnClick(Sender: TObject);
//去皮
Begin
fxUsbSerial.WriteByte(Ord('T'),1000);
End;
2
3
4
5
- ⑧fxTextZero-OnClick事件
點選按鈕以執行電子秤置零操作。
Procedure fxTextZeroOnClick(Sender: TObject);
//置零
Begin
fxUsbSerial.WriteByte(Ord('Z'),1000);
End;
2
3
4
5
# 4. 運行結果
使用滑鼠在 PinToo 功能表,點選[儲存至資料庫]
按鈕,將其儲存至資料庫,點選[除錯運行]
確認能夠正常打開。
通過同步中心,將程式上傳至手機PinToo運行;同步時,請確保手機已經運行PinToo,並且已經登陸。
點選左側的搜索按鈕,載入通訊埠設備列表,選擇對應的設備后,點選右側的連線按鈕打開通訊埠建立通訊連線。點選下方的電子秤圖示開啟數據讀取,可點選兩側的[去皮]
與[置零]
按鈕對電子秤進行對應的操作。