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。
