实验20 自动灭火场景实验
1. 实验目的
串口屏通过温度传感器,检测火焰温度,当火焰温度超过报警温度时,启动风扇进行灭火。
2. 实验工具
支持MODBUS、IO的串口屏,本例程串口屏型号为(SANY-WV-S43-04M-C)
支持MODBUS的温度传感器,本例程使用的是自主生产的传感器
一个5V继电器、一个直流电机、一个IO转接板及软排线
3. 页面设计
项目设置,勾选MODBUS 主机。修改波特率为9600(传感器波特率为9600,需要保持一致)。
page0 页面控件
控件名
属性
功能
image0
可见 图片
场景UI
progressbar6
可见 进度条
显示当前温度
numf6
可见 浮点数
显示当前温度
numf8
可见 浮点数
设置报警温度(透明度属性设置为0)
gif7
可见 GIF图片
显示动态报警
io2
不可见 IO控件
输出高低电平(初始化为低电平0)
mod3
不可见 MODBUS
支持使用MODBUS协议
timer4
不可见 定时器
用于定时查询温度传感器并显示
timer10
不可见 定时器
用于对比报警值,超出报警温度时,IO输出高电平
4. 传感器模块参数
波特率:9600 功能码:03,读取寄存器
设备地址 |
寄存器地址 |
|||
---|---|---|---|---|
1 |
0x0000 |
温度 |
只读 |
float类型,一个寄存器表示温度,单位*0.01℃ |
0x0001 |
湿度 |
只读 |
float类型,一个寄存器表示湿度,单位*0.01%rh |
本例程仅使用温度寄存器。
5. 逻辑实现
5.1. 页面加载事件,初始报警温度
脚本如下:
numf8.valf = 60.0;//初始化报警温度
5.2. 定时查询温度(timer4)
脚本如下:
int Ret;
Ret = modbusRead(0x01,0x03,0x0000,2,100);//查询一次
if(Ret == 0)//查询成功
{
numf6.valf = (float)(mod3.rxBuf[1]<<8 | mod3.rxBuf[2])/100;//转换温度
progressbar6.val = (int)numf6.valf;
}
5.3. 对比报警温度(timer10)
脚本如下:
if(numf6.valf > numf8.valf)//读取温度超过设置温度
{
gif7.visible = 1;//GIF图片可见
io2.val = 1;//IO.Pin0输出高电平
}
else
{
gif7.visible = 0;//GIF图片隐藏
io2.val = 0;//IO.Pin0输出低电平
}
6. 实验结果
编译成功后,点击下载按钮,下载到串口屏。
具体实验现象:用串口屏做一个自动灭火场景_哔哩哔哩_bilibili