RS485計數器
# Smart之RS485計數器
# 1. 功能
範例採用RS485介面,通過ModbusRTU通訊協議,讀取計數器數據並控制數據顯示。使用Modbus協議進行計數器數值的讀取,並且寫入數值0以達到清零的效果。
範例使用到的計數器為FC304N-R計數器,該計數器通過RS485協議與計算機進行連線通訊。配合該計數器使用到的配件包含USB-485轉換器,金屬接近開關感測器,電源線纜,通訊線纜。計數器的220V介面與220V電源連線,12V+,12V-與IN1分別與金屬接近開關的正極、負極、訊號極相連。計數器的485A、485B介面分別與USB-485的正極,負極相連。USB-485轉換器在連線至計算機時會被識別為通訊埠,請記住該通訊埠的埠號,在接下來的配置過程中會使用到該埠號。
通過範例學習,可以掌握ModbusRTU的基本通訊原理,並通過RS485進行計數器的讀取與控制功能。
# 2. 設計明細
開啟Smart智慧控制平臺,分別加入下插圖之控制元件。或者通過點選功能表欄[檔案]-[打開專案]
選擇範例專案檔案來打開該範例。
①:TImage元件,控制元件名稱為Image1
。
②:TWidgetLCDLabel元件,控制元件名稱為WidgetLCDLabel1
。
③:TModbusWriteChannel元件,控制元件名稱為ModbusWriteChannel1
。
④:TModbusReadChannel元件,控制元件名稱為ModbusReadChannel1
。
⑤:TTimer元件,控制元件名稱為Timer1
。
⑥:TModbusConnection元件,控制元件名稱為ModbusConnection1
。
⑦:TLabel元件,控制元件名稱為Label1
。
⑧:TButton元件,控制元件名稱為ButtonClear
。
Main窗體屬性設定
Caption
:設定窗體標題=RS485計數器
。ClientHeight
:設定窗體顯示區的高度=220
。ClientWidth
:設定窗體顯示區的寬度=405
。
①Image1屬性設定
Align
:設定對齊方式,設定為alClient
。Stretch
:設定圖片拉伸,設定為True
。Picture
:設定圖片。點選Picture
屬性右側的[...]
按鈕,打開檔案上傳界面,點選[Load...]
從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]
載入圖片。
②WidgetLCDLabel1屬性設定
Height
:控制元件高度,設定為150
。Width
:控制元件寬度,設定為379
。Fill.Kind
:設定填充樣式=gfkSolid
。Caption.FillOff.Color
:設定未顯示區域的數值顏色=clBlack
。Caption.Format
:設定預設顯示的數值格式型別=0000
。
③ModbusWriteChannel1屬性設定
ModbusList
:設定連線列表。點選ModbusList
屬性右側的[...]
按鈕,打開列表編輯界面。點選左上角的新增按鈕新增一項ModbusList
專案,選擇對應的項進入到專案的屬性界面。
- ModbusList[0]屬性設定
ConnectionMode
:設定連線的模式,設定為cmClient
。DataType
:設定Modbus讀取/寫入的數據型別,設定為dtInt
。FunctionCode
設定使用ModbusRTU的寫入指令,此處設定為fc16
。ModbusConnection
:Modbus連線的元件對象,此處設定為ModbusConnection1
。RegCount
:Modbus設備讀取/寫入暫存器的位數,此處設定為1
。StartReg
:Modbus設備讀取/寫入暫存器的起始位置,此處設定為1
。對應的Modbus保持暫存器的地址位為1
。ServerAddress
:Modbus設備服務的地址,此處設定為1
。
④ModbusReadChannel1屬性設定
ModbusList
:設定連線列表。點選ModbusList
屬性右側的[...]
按鈕,打開列表編輯界面。點選左上角的新增按鈕新增一項ModbusList
專案,選擇對應的項進入到專案的屬性界面。
- ModbusList[0]屬性設定
ConnectionMode
:設定連線的模式,設定為cmClient
。DataType
:設定Modbus讀取/寫入的數據型別,設定為dtFloat
。FunctionCode
設定使用ModbusRTU的寫入指令,設定為fc03
。ModbusConnection
:Modbus連線的元件對象,設定為ModbusConnection1
。RegCount
:Modbus設備讀取/寫入暫存器的位數,設定為1
。StartReg
:Modbus設備讀取/寫入暫存器的起始位置,設定為1
。對應的Modbus保持暫存器的地址位為1
。ServerAddress
:Modbus設備服務的地址(從機號),定義為1
。
⑤Timer1屬性設定
Enabled
:是否啟用計時器的功能,此處設定為True
。Interval
:計數器計時事件觸發的時間間隔,以ms為單位,設定為1000
。
⑥ModbusConnection1屬性設定
BaudRate
:連線RS485的通訊埠通訊速率,設定為br9600
。DataBits
:連線RS485的通訊埠通訊數據位,設定為db8
。Parity
:連線RS485通訊埠的數據校驗方式,設定為psNone
。Port
:連線RS485通訊埠的埠號,此處依實際的RS485介面為準。
⑦Label1屬性設定
AutoSize
:是否根據字型調整控制元件大小,設定為True
。Caption
:標籤內容,設定為計數器/計米器
。Font
:設定字型,設定內容如下所示。
⑧ButtonClear屬性設定
Height
:設定控制元件高度=29
。Width
:設定控制元件寬度=76
。Caption
:設定按鈕文字=復位
。Name
:設定控制元件名稱=ButtonClear
。Font
:設定字型。
# 3. 程式設計
# 3.1. 程式初始化設定
在程式啟動時,建立ModbusRTU通訊。
constructor TMyHandler.Create(AOwner: TComponent);
begin
FThis :=TBaseForm(AOwner);、
//建立Modbus連線
FThis.ModbusConnection1.Active := True;
end;
2
3
4
5
6
# 3.2. 事件設定
- ⑤Timer1-OnTimer事件
計時器事件觸發時,讀取計數器的數值解析並顯示。
procedure TMyHandler.Timer1Timer;
//定時採集數據並顯示
begin
FThis.ModbusRTUReadChannel1.ModbusList[0].execute;
FThis.WidgetLCDLabel1.Caption.Value := FThis.ModbusRTUReadChannel1.ModbusList[0].DataValue;
end;
2
3
4
5
6
- ⑧ButtonClear-OnClick事件
當復位按鈕被按下時,計數器的數值變為0。
procedure TMyHandler.ButtonClearClick;
//清零
begin
FThis.ModbusRTUWriteChannel1.ModbusList[0].DataValue := 0;
FThis.ModbusRTUWriteChannel1.ModbusList[0].execute;
end;
2
3
4
5
6
# 4. 運行結果
通過工具欄儲存,將程式儲存為 sdb 專案檔案。
使用滑鼠點選工具欄運行(Run),測試運行結果。此時計算機程式中的數值顯示為計數器顯示的值,當用金屬物體去靠近金屬接近開關感測器時,計數器的數值會增加,同時計算機顯示的數值也會增加。當點選復位按鈕時,計數器的數值變成0,同時計算機程式端也顯示為0。