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。
