液化水槽监控
# FastWeb 液化水槽监控
# 1. 说明
范例采用Modbus TCP通讯协议,控制Factroy IO 的场景,场景中可进行相关操作,FastWeb 范例监控状态的变化,执行相应的操作。
Factory IO是一款出色的虚拟仿真软件,可以自由使用其内部的各种元器件、传感器、驱动器等搭建自己理想中的工业现场,并联合其他工控设备进行编程仿真。
范例使用的 Factory IO 场景的制作方式如下:
在Factory IO 中创建一个空白场景。在工作站分类中找到 Tank
,将其拖放至场景中,使用鼠标右键点选零件,将配置修改为 Analog
。
接下来选择驱动方式,点击菜单栏中的 文件-驱动
,在下拉框中选择驱动的方式为 Modbus TCP/IP Server
,点击右侧的 配置
按钮,将从站ID 修改为 255
,输入、输出点按照图示进行设置。
返回驱动界面,界面中寄存器分配设置如下:
# 2. 设计明细
开启FastWeb设计器,分别加入下插图之控件。或者通过点击[导入]
按钮选择模板文件来打开模板。
1:TUgSwitchImage 组件,控件名称为 UgSwitchImage03
。
2:TUgPanel 组件,控件名称为 UgPanel02
。
3:TUgSwitchImage 组件,控件名称为 UgSiwtchImage01
。
4:TUgTrackBar 组件,控件名称为 TrackBarIn
。
5:TUgPanel 组件,控件名称为 panelin
。
6:TUgPanel 组件,控件名称为 panellevel
。
7: TUgWaterTank 组件,控件名称为 UgWaterTank01
。
8:TUgPanel 组件,控件名称为 panelout
。
9:TUgPanel 组件,控件名称为 panelflow
。
10: TUgPanel 组件,控件名称为 UgPanel03
。
11:TUgSwitchIamge 组件,控件名称为 UgSwitchImage02
。
12:TUgTrackBar 组件,控件名称为 TrackBarOut
。
同时,界面中设置了8个 TUgModbusTCPClient
,其中的 Host
属性均设置为 Factory IO
运行的 ModbusTCP Server IP地址。
界面中设置了5个 TUgTimer
,其中的 Interval
设置为 100
。
UgWebRunFrame属性设置
Height
:设置窗体高度=600
。Width
:设置窗体宽度=800
。
UgSwichImage03属性设置
双击控件,打开图片编辑器,上传两个图片,用于代表开与关的状态。其中开的图片在前,关的图片在后。
UgPanel02属性设置
Ttite
:设置文章显示的标题,设置为进水控制
。ShowCaption
:是否在面板区域显示文字,设置为False
。TitleAlign
:设置标题显示的文字的对齐方式,设置为taCenter
。
UgSiwtchImage01属性设置
控件位于
UgPanel02
中,双击控件,打开图片编辑器,上传两个图片,用于代表开与关的状态。其中开的图片在前,关的图片在后。TrackBarIn属性设置
Max
:设置取值的最大值,设置为1000
。
panelin属性设置
Caption
:设置初始显示的文字,设置为0.00
。Title
:设置标题显示的文字,设置为进水最大流量(L/s)
。TitleAlign
:设置标题显示的文字的对齐方式,设置为taCenter
。
panellevel属性设置
Caption
:设置初始显示的文字,设置为0.00
。Title
:设置标题显示的文字,设置为液位高度(m)
。TitleAlign
:设置标题显示的文字的对齐方式,设置为taCenter
。
UgWaterTank01属性设置
Options
:设置相关选项,其中修改Height
为 240,修改Width
为100
。
panelout属性设置
Caption
:设置初始显示的文字,设置为0.00
。Title
:设置标题显示的文字,设置为出水最大流量(L/s)
。TitleAlign
:设置标题显示的文字的对齐方式,设置为taCenter
。
panelflow属性设置
Caption
:设置初始显示的文字,设置为0.00
。Title
:设置标题显示的文字,设置为出水流量(L/s)
。TitleAlign
:设置标题显示的文字的对齐方式,设置为taCenter
。
UgPanel03属性设置
Ttite
:设置文章显示的标题,设置为出水控制
。ShowCaption
:是否在面板区域显示文字,设置为False
。TitleAlign
:设置标题显示的文字的对齐方式,设置为taCenter
。
UgSiwtchImage02属性设置
控件位于
UgPanel03
中,双击控件,打开图片编辑器,上传两个图片,用于代表开与关的状态。其中开的图片在前,关的图片在后。TrackBarOut属性设置
Max
:设置取值的最大值,设置为1000
。
# 3. 程序设置
# 3.1. 程序初始设置
设置全局变量。
var Old_PotentionMeterFill,Old_PotentionMeterDisCharge,Fill,DisCharge,Fill_Pressed,DisCharge_Pressed,Old_Fill,Old_DisCharge;
设置初始运行项:
function UgWebRunFrameOnAfterRunScript(sender)
{
Fill_Pressed = false;
DisCharge_Pressed = false;
Old_Fill = "0";
Old_DisCharge = "1";
}
2
3
4
5
6
7
# 3.2. 事件设置
- UgTimer01-OnTimer事件
检测开关的状态寄存器,同步更新。
function UgTimer01OnTimer(sender)
{
var s,List;
List = new TStringList();
if (UgModbusTCPClient01.ReadCoils(1,2,s)){
List.CommaText = s;
if (List.Strings[0] == "1"){
UgSwitchImage01.IsChecked = true;
fill = true;
}
if (List.Strings[0] == "0"){
UgSwitchImage01.IsChecked = false;
fill = false;
}
if (List.Strings[1] == "1"){
UgSwitchImage02.IsChecked = true;
DisCharge = true;
}
if (List.Strings[1] == "0"){
UgSwitchImage02.IsChecked = false;
DisCharge = false;
}
}
List.Free;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- UgTimer02-OnTimer 事件
检测读数,并更新界面中显示的读数信息。
//读数状态切换
function UgTimer02OnTimer(sender)
{
var i,o,s,t;
if(UgModbusTCPClient02.ReadHoldingRegister(1,i)){
panelin.Caption = FloatToStr(i * 0.01);
}
if(UgModbusTCPClient02.ReadHoldingRegister(2,o)){
panelout.Caption = FloatToStr(o * 0.01);
}
if(UgModbusTCPClient02.ReadHoldingRegister(5,s)){
panellevel.Caption = FloatToStr(s * 0.001 * 3);
UgWaterTank01.Options.Level = s * 0.1;
}
if(UgModbusTCPClient02.ReadHoldingRegister(6,t)){
panelflow.Caption = FloatToStr(t * 0.01);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- ugSwitchImage01-OnSwitch事件
进水开关状态变化指令传递。
//进水开关
function ugSwitchImage01OnSwitch(sender)
{
UgModbusTCPClient03.WriteCoil(1,UgSwitchImage01.IsChecked);
}
2
3
4
5
- ugSwitchImage02-OnSwitch事件
出水开关状态变化指令传递。
//出水开关
function ugSwitchImage02OnSwitch(sender)
{
UgModbusTCPClient03.WriteCoil(2,UgSwitchImage02.IsChecked);
}
2
3
4
5
- TrackBarIn - OnChange事件
进水最大流量调节。
//进水调节
function TrackBarInOnChange(sender)
{
UgModbusTCPClient04.WriteRegister(1,TrackBarIn.Position);
UgModbusTCPClient04.WriteRegister(3,TrackBarIn.Position);
}
2
3
4
5
6
- TrackBarOut-OnChange事件
出水最大流量调节。
//出水调节
function TrackBarOutOnChange(sender)
{
UgModbusTCPClient04.WriteRegister(2,TrackBarIn.Position);
UgModbusTCPClient04.WriteRegister(4,TrackBarIn.Position);
}
2
3
4
5
6
- ugSwitchImage03-OnSwitch事件
监控开关。
//定时器
function ugSwitchImage03OnSwitch(sender)
{
UgTimer01.Enabled = UgSwitchImage03.IsChecked;
UgTimer02.Enabled = UgSwitchImage03.IsChecked;
UgTimer03.Enabled = UgSwitchImage03.IsChecked;
UgTimer04.Enabled = UgSwitchImage03.IsChecked;
UgTimer05.Enabled = UgSwitchImage03.IsChecked;
}
2
3
4
5
6
7
8
9
- UgTimer03-OnTimer 事件
按钮开关的状态检测,如有检测到按钮按动的操作,则执行相应的操作。
//检测按钮按下,开启开关
function UgTimer03OnTimer(sender)
{
var s,t,List;
List = new TStringList;
if (UgModbusTCPClient08.ReadInputBits(1,2,s)){
List.CommaText = s;
if (List.Strings[0] == "1"){
Fill_Pressed = True;
}
if (List.Strings[1] == "0"){
DisCharge_Pressed = True;
}
if ((Fill_Pressed) && (Fill == False)){
UgModbusTCPClient05.WriteCoil(1,True);
Fill_Pressed = false;
}
if ((Fill_Pressed) && (Fill == True)){
UgModbusTCPClient05.WriteCoil(1,False);
Fill_Pressed = false;
}
if ((DisCharge_Pressed) && (DisCharge == false)){
UgModbusTCPClient05.WriteCoil(2,True);
DisCharge_Pressed = false;
}
if ((DisCharge_Pressed) && (DisCharge == true)){
UgModbusTCPClient05.WriteCoil(2,False);
DisCharge_Pressed = false;
}
}
List.Free;
}
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
31
32
- UgTimer04-OnTimer事件
场景中的旋钮转动检测事件,同步更新界面的流量控制。
function UgTimer04OnTimer(sender)
{
var s,List;
List = new TStringList();
UgModbusTCPClient06.ReadInputRegisters(1,4,s){
List.CommaText = s;
if (Old_PotentionMeterFill != StrToInt(List.Strings[0])){
UgModbusTCPClient06.WriteRegister(1,StrToInt(List.Strings[0]));
Old_PotentionMeterFill = StrToInt(List.Strings[0]);
}
if (Old_PotentionMeterDisCharge != StrToInt(List.Strings[1])){
UgModbusTCPClient06.WriteRegister(2,StrToInt(List.Strings[1]));
Old_PotentionMeterDisCharge = StrToInt(List.Strings[1]);
}
UgModbusTCPClient06.WriteRegister(5,StrToInt(List.Strings[2]));
UgModbusTCPClient06.WriteRegister(6,StrToInt(List.Strings[3]));
}
List.Free;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- UgTimer05-OnTimer事件
控制开关,控制进出水流量的总开关。
function UgTimer05OnTimer(sender)
{
var s,List;
List = new TStringList;
if (UgModbusTCPClient07.ReadHoldingRegisters(1,4,s)){
List.CommaText = s;
if (Fill){
UgModbusTCPClient07.WriteRegister(3,StrToInt(List.Strings[0]));
}
Else{
UgModbusTCPClient07.WriteRegister(3,0);
}
if (DisCharge){
UgModbusTCPClient07.WriteRegister(4,StrToInt(List.Strings[1]));
}
Else{
UgModbusTCPClient07.WriteRegister(4,0);
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 4. 运行结果
使用鼠标点击工具栏保存到数据库,然后点击运行(Run),测试运行结果。监控按钮按下后,可在Factory IO 中的场景执行操作。