通訊埠電子秤
# Smart之通訊埠電子秤
# 1. 說明
範例採用通訊埠通訊協議,控制駁接在PC設備上的電子秤。PC端發送讀取指令,電子秤返回稱重重量的資訊;PC端發送去皮與置零的指令,電子秤端執行相應的操作。電子秤是工業生產過程中經常使用到的設備,現如今大部分近期生產的工業用電子秤都已經預留了通訊埠通訊的介面。在本範例中使用的電子秤也具有該功能。
範例使用到的電子秤為耀華XK3190-A12+E,其秤頭的外觀如下圖所示。


地磅與秤頭按照上圖所示的內容進行連線,電子秤的外接通訊埠端與USB通訊埠轉接線的通訊埠端相連,另外一端與PC的USB埠連線,打開電子秤的開關,待連線確認后,打開Windows中的設備管理器,檢視該通訊埠埠號,在本範例中會使用到該埠號。
通過範例學習,可以掌握通訊埠的基本通訊原理,並結合電子秤進行數據讀取的功能。
# 2. 設計明細
開啟Smart智慧控制平臺,分別加入下插圖之控制元件。或者通過點選功能表欄[檔案]-[打開專案]選擇範例專案檔案來打開該範例。

①:TImage元件,控制元件名稱為Image1。
②:TLabel元件,控制元件名稱為Label1。
③:TImage元件,控制元件名稱為Image2。
④:TWidgetLCDLabel元件,控制元件名稱為WidgetLCDLabel1。
⑤:TImage元件,控制元件名稱為ImageSheer。
⑥:TTimer元件,控制元件名稱為Timer1。
⑦:TComPort元件,控制元件名稱為ComPort1。
⑧:TImage元件,控制元件名稱為ImageZero。
Main窗體屬性設定
Caption:設定窗體標題=通訊埠電子秤。ClientHeight:設定窗體客戶區高度=504。ClientWidth:設定窗體客戶區寬度=635。
①Image1屬性設定
Align:設定對齊方式=alClient。Stretch:設定影象拉伸=True。PicTure:設定影象。點選Picture屬性右側的[...]按鈕,打開檔案上傳界面,點選[Load...]從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]載入圖片。

②Label1屬性設定
AutoSize:設定控制元件大小與字型自適應=True。Caption:設定顯示標籤的內容=通訊埠電子秤。Font:設定字型,點選該屬性右側[...]按鈕或者雙擊該屬性打開字型設定界面,設定內容如下。

③Image2屬性設定
Height:設定圖片高度=417。Width:設定圖片寬度=624。Picture:設定圖片。點選Picture屬性右側的[...]按鈕,打開檔案上傳界面,點選[Load...]從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]載入圖片。

④WidgetLCDLabel1屬性設定
Height:控制元件高度,設定為130。Width:控制元件寬度,設定為308。Fill.Kind:設定填充樣式=gfkSolid。Caption.FillOff.Color:設定未顯示區域的數值顏色=clBlack。
⑤ImageSheer屬性設定
Height:設定控制元件高度=30。Width:設定控制元件寬度=32。Name:設定控制元件名稱=ImageSheer。
⑥Timer1屬性設定
Enabled:是否啟用計時器的功能=True。Interval:計數器計時事件觸發的時間間隔(ms)=1000。
⑦ComPort1屬性設定
BaudRate:通訊埠通訊速率=br9600。DataBits:通訊埠通訊數據位=db8。DeviceName:通訊埠通訊設備埠,此處設定為電子秤連線的埠號。Parity:通訊埠通訊校驗方式=paNone。StopBits:通訊埠通訊停止位=sb1。
⑧ImageZero屬性設定
Height:設定控制元件高度=30。Width:設定控制元件寬度=32。Name:設定控制元件名稱=ImageZero。
# 3. 程式設計
# 3.1. 程式初始設定
在程式打開時,開啟通訊埠通訊。
constructor TMyHandler.Create(AOwner: TComponent);
begin
FThis :=TBaseForm(AOwner);
FThis.ComPort1.Open;
end;
2
3
4
5
# 3.2. 事件設定
- ⑥Timer1-OmTimer事件
計數器事件,每隔一段時間讀取數據解析並顯示。
procedure TMyHandler.Timer1Timer;
//Timer1的OnTimer事件,定時讀取並顯示在界面上
var
FData: String;
ASymbol:string;
AStr:String;
AValue:Double;
begin
//讀取計數並轉換顯示
FThis.ComPort1.WriteChar('R');
FData := FThis.ComPort1.ReadUtf8;
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;
FThis.WidgetLCDLabel1.Caption.Value := AValue;
end;
end
else
begin
FThis.WidgetLCDLabel1.Caption.Value := 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
30
- ⑤ImageSheer-OnClick事件
該控制元件對應的是去皮按鈕,點選可進行電子秤的去皮操作。
procedure TMyHandler.ImageSheerClick;
//ImageSheer的OnClick事件,電子秤執行去皮操作
begin
FThis.ComPort1.WriteChar('T');
end;
2
3
4
5
- ⑧ImageZero-OnClick事件
該控制元件對應的是置零按鈕,點選可進行電子秤的清零操作。
procedure TMyHandler.ImageZeroClick;
//ImageZero的OnClick事件,電子秤執行清零操作
begin
FThis.ComPort1.WriteChar('Z');
end;
2
3
4
5
# 4. 運行結果
通過工具欄儲存,將程式儲存為 sdb 專案檔案。
使用滑鼠點選工具欄運行(Run),測試運行結果。程式運行時,如果通訊埠通訊正常,則電子秤圖片處會顯示數值。點選除皮按鈕,電子秤進行除皮操作;點選置零按鈕,電子秤進行置零操作。
