📄 mainfrm.frm
字号:
'End With
frmPassword.EventChar = "fyf3touliao"
frmPassword.Show vbModal
End Sub
Private Sub mnuCreat3ChuLiang_Click()
On Error Resume Next
With Batchlsrs(3)
.MoveLast
If (Not IsNull(.Fields("pici"))) And (Not IsNull(.Fields("banci"))) And _
(Not IsNull(.Fields("toulufang"))) And (Not IsNull(.Fields("yansuan"))) _
And (Not IsNull(.Fields("bujialufang"))) And (Not IsNull(.Fields("zdph"))) _
And (Not IsNull(.Fields("hcyzongliang"))) And _
(Not IsNull(.Fields("chuliang"))) Then
Call Inform(72)
End If
End With
With frmPassword
.EventChar = "fyf3chuliang"
.Show vbModal
End With
End Sub
Private Sub mnuExit1_Click()
With frmPassword
.EventChar = "end"
.Show vbModal
End With
End Sub
Private Sub mnuExitAbout_Click()
With frmAbout
.Show vbModal
End With
End Sub
Private Sub mnuGoOn1_Click()
With frmPassword
.EventChar = "fyf1goon"
.Show vbModal
End With
End Sub
Private Sub mnuGoOn2_Click()
With frmPassword
.EventChar = "fyf2goon"
.Show vbModal
End With
End Sub
Private Sub mnuGoOn3_Click()
With frmPassword
.EventChar = "fyf3goon"
.Show vbModal
End With
End Sub
Private Sub mnuHelp_Click()
With frmHelp
.Show
.SetFocus
End With
End Sub
Private Sub mnuMainBlackBox_Click()
With frmBlackBox
.Show
.SetFocus
End With
End Sub
Private Sub mnuMainUser_Click()
With frmUser
.Show
.SetFocus
End With
End Sub
'**********************************************
'年改变时,如果三个釜都不在投料,删除两年前的批次、
'连续黑匣子和报警记录
'**********************************************
Private Sub tmrDeleteRec_Timer()
On Error Resume Next
If (Not (gGongZuoZhuangTai(1))) And (Not (gGongZuoZhuangTai(2))) And Not ((gGongZuoZhuangTai(3))) Then
Select Case Year(Date)
Case Else
With Lsdb
.Execute "delete * from detaills1 where riqi <" & "#" & Year(Now) - 1 & "/" & 1 & "/" & 1 & "#"
.Execute "delete * from continous1 where riqi <" & "#" & Year(Now) - 1 & "/" & 1 & "/" & 1 & "#"
.Execute "delete * from detaills2 where riqi <" & "#" & Year(Now) - 1 & "/" & 1 & "/" & 1 & "#"
.Execute "delete * from continous2 where riqi <" & "#" & Year(Now) - 1 & "/" & 1 & "/" & 1 & "#"
.Execute "delete * from detaills3 where riqi <" & "#" & Year(Now) - 1 & "/" & 1 & "/" & 1 & "#"
.Execute "delete * from continous3 where riqi <" & "#" & Year(Now) - 1 & "/" & 1 & "/" & 1 & "#"
.Execute "delete * from blackbox where riqi <" & "#" & Year(Now) - 1 & "/" & 1 & "/" & 1 & "#"
End With
Baojingdb.Execute "delete * from bjjl where date <" & "#" & Year(Now) - 1 & "/" & 1 & "/" & 1 & "#"
End Select
For i = 1 To 3
Detaillsrs(i).Update
Continousrs(i).Update
Next
BlackBoxRec.Update
End If
End Sub
Private Sub tmrSample_Timer()
'*****************************
'采样,报警
'*****************************
'********************
'一号反应釜
'********************
'反应釜温度
With fyf1_fyfWenDu
'采样
.Sample
mfyf1WenDu(1) = .Value
If fyf1_Control.WorkState Then
'温度越上限报警
If (mfyf1WenDu(0) <= .SheDingValue + .AlarmUp) And _
(mfyf1WenDu(1) > .SheDingValue + .AlarmUp) Then Call nowAlarm( _
"fyf1_fyfWenDu", True)
'温度恢复正常提示
If (mfyf1WenDu(1) <= .SheDingValue + .AlarmUp) And (mfyf1WenDu(0) _
>= .SheDingValue + .AlarmUp) Then Call nowAlarm("fyf1_fyfWenDu", False)
End If
mfyf1WenDu(0) = mfyf1WenDu(1)
End With
'计量罐液位
With fyf1_jlgYeWei
.Sample
'投料过程中滤掉虚假液位
If Not (gblnBeginSet(1)) Then mjlgYeWei(1) = .Value
If (fyf1_Control.WorkState) And (.Value < mjlgYeWei(1)) Then .Value = mjlgYeWei(1)
mjlgYeWei(1) = .Value
End With
'判断投料完毕
With fyf1_Control
If (.WorkState) And (fyf1_jlgYeWei.Value >= .jlgjsYeWei - .jlgjsYeWei_TiQianLiang) Then
Call A_out(.tlfBaseAddress, .tlfChannel, 0, 0)
gintkdSheDing(1) = 0
Call TouLiaoWanBi(1)
End If
End With
'投料阀开度
fyf1_tlfKaiDu.Sample
'********************
'二号反应釜
'********************
With fyf2_fyfWenDu
.Sample
mfyf2WenDu(1) = .Value
If fyf2_Control.WorkState Then
If (mfyf2WenDu(0) <= .SheDingValue + .AlarmUp) And _
(mfyf2WenDu(1) > .SheDingValue + .AlarmUp) Then Call nowAlarm( _
"fyf2_fyfWenDu", True)
If (mfyf2WenDu(1) <= .SheDingValue + .AlarmUp) And (mfyf2WenDu(0) _
> .SheDingValue + .AlarmUp) Then Call nowAlarm("fyf2_fyfWenDu", False)
End If
mfyf2WenDu(0) = mfyf2WenDu(1)
End With
'计量罐液位
With fyf2_jlgYeWei
.Sample
'投料过程中滤掉虚假液位
If Not (gblnBeginSet(2)) Then mjlgYeWei(2) = .Value
If (fyf2_Control.WorkState) And (.Value < mjlgYeWei(2)) Then .Value = mjlgYeWei(2)
mjlgYeWei(2) = .Value
End With
'判断投料完毕
With fyf2_Control
If (.WorkState) And (fyf2_jlgYeWei.Value >= .jlgjsYeWei - .jlgjsYeWei_TiQianLiang) Then
Call A_out(.tlfBaseAddress, .tlfChannel, 0, 0)
gintkdSheDing(2) = 0
Call TouLiaoWanBi(2)
End If
End With
fyf2_tlfKaiDu.Sample
'********************
'三号反应釜
'********************
With fyf3_fyfWenDu
.Sample
mfyf3WenDu(1) = .Value
If fyf3_Control.WorkState Then
If (mfyf3WenDu(0) <= .SheDingValue + .AlarmUp) And _
(mfyf3WenDu(1) > .SheDingValue + .AlarmUp) Then Call nowAlarm( _
"fyf3_fyfWenDu", True)
If (mfyf3WenDu(1) <= .SheDingValue + .AlarmUp) And (mfyf3WenDu(0) _
> .SheDingValue + .AlarmUp) Then Call nowAlarm("fyf3_fyfWenDu", False)
End If
mfyf3WenDu(0) = mfyf3WenDu(1)
End With
'计量罐液位
With fyf3_jlgYeWei
.Sample
'投料过程中滤掉虚假液位
If Not (gblnBeginSet(3)) Then mjlgYeWei(3) = .Value
If (fyf3_Control.WorkState) And (.Value < mjlgYeWei(3)) Then .Value = mjlgYeWei(3)
mjlgYeWei(3) = .Value
End With
'判断投料完毕
With fyf3_Control
If (.WorkState) And (fyf3_jlgYeWei.Value >= .jlgjsYeWei - .jlgjsYeWei_TiQianLiang) Then
Call A_out(.tlfBaseAddress, .tlfChannel, 0, 0)
gintkdSheDing(3) = 0
Call TouLiaoWanBi(3)
End If
End With
fyf3_tlfKaiDu.Sample
fyf_lqysWenDu.Sample
'****************************************
'1#赋采样值、手动判断反应终点
'****************************************
With fyf1_Control
.fyfWenDu = fyf1_fyfWenDu.Value
.jlgYeWei = fyf1_jlgYeWei.Value
.lqysWenDu = fyf_lqysWenDu.Value
If (gblnIsAuto(1) = False) And (.jlgYeWei >= _
.jlgjsYeWei - .jlgjsYeWei_TiQianLiang) And (.WorkState) Then
Call A_out(.tlfBaseAddress, .tlfChannel, 0, 0)
Call TouLiaoWanBi(1)
End If
'倒计时
If .WorkState Then
zkhmfrm.lblDaoJiShi(0).Caption = CStr(Format(Abs(.jlgYeWei - .jlgjsYeWei), "0.0"))
If Abs(.jlgYeWei - .jlgjsYeWei) <= 10 Then
zkhmfrm.lblDaoJiShi(3).Visible = Not (zkhmfrm.lblDaoJiShi(3).Visible)
zkhmfrm.lblDaoJiShi(3).ForeColor = RGB(255, 0, 0)
Else
zkhmfrm.lblDaoJiShi(3).Visible = True
zkhmfrm.lblDaoJiShi(3).ForeColor = RGB(0, 0, 0)
End If
Else
zkhmfrm.lblDaoJiShi(3).Visible = True
zkhmfrm.lblDaoJiShi(0).Caption = "x"
zkhmfrm.lblDaoJiShi(3).ForeColor = RGB(0, 0, 0)
End If
If .WorkState Then
.Counter = .Counter + tmrSample.interval / 1000
End If
End With
'****************************************
'2#赋采样值、手动判断反应终点
'****************************************
With fyf2_Control
.fyfWenDu = fyf2_fyfWenDu.Value
.jlgYeWei = fyf2_jlgYeWei.Value
.lqysWenDu = fyf_lqysWenDu.Value
If (gblnIsAuto(2) = False) And (.jlgYeWei >= _
.jlgjsYeWei - .jlgjsYeWei_TiQianLiang) And (.WorkState) Then
Call A_out(.tlfBaseAddress, .tlfChannel, 0, 0)
Call TouLiaoWanBi(2)
End If
'倒计时
If .WorkState Then
zkhmfrm.lblDaoJiShi(1).Caption = CStr(Format(Abs(.jlgYeWei - .jlgjsYeWei), "0.0"))
If Abs(.jlgYeWei - .jlgjsYeWei) <= 10 Then
zkhmfrm.lblDaoJiShi(4).Visible = Not (zkhmfrm.lblDaoJiShi(4).Visible)
zkhmfrm.lblDaoJiShi(4).ForeColor = RGB(255, 0, 0)
Else
zkhmfrm.lblDaoJiShi(4).Visible = True
zkhmfrm.lblDaoJiShi(4).ForeColor = RGB(0, 0, 0)
End If
Else
zkhmfrm.lblDaoJiShi(4).Visible = True
zkhmfrm.lblDaoJiShi(1).Caption = "x"
zkhmfrm.lblDaoJiShi(4).ForeColor = RGB(0, 0, 0)
End If
If .WorkState Then
.Counter = .Counter + tmrSample.interval / 1000
End If
End With
'****************************************
'3#赋采样值、手动判断反应终点
'****************************************
With fyf3_Control
.fyfWenDu = fyf3_fyfWenDu.Value
.jlgYeWei = fyf3_jlgYeWei.Value
.lqysWenDu = fyf_lqysWenDu.Value
If (gblnIsAuto(3) = False) And (.jlgYeWei >= _
.jlgjsYeWei - .jlgjsYeWei_TiQianLiang) And (.WorkState) Then
Call A_out(.tlfBaseAddress, .tlfChannel, 0, 0)
Call TouLiaoWanBi(3)
End If
'倒计时
If .WorkState Then
zkhmfrm.lblDaoJiShi(2).Caption = CStr(Format(Abs(.jlgYeWei - .jlgjsYeWei), "0.0"))
If Abs(.jlgYeWei - .jlgjsYeWei) <= 10 Then
zkhmfrm.lblDaoJiShi(5).Visible = Not (zkhmfrm.lblDaoJiShi(5).Visible)
zkhmfrm.lblDaoJiShi(5).ForeColor = RGB(255, 0, 0)
Else
zkhmfrm.lblDaoJiShi(5).Visible = True
zkhmfrm.lblDaoJiShi(5).ForeColor = RGB(0, 0, 0)
End If
Else
zkhmfrm.lblDaoJiShi(5).Visible = True
zkhmfrm.lblDaoJiShi(2).Caption = "x"
zkhmfrm.lblDaoJiShi(5).ForeColor = RGB(0, 0, 0)
End If
If .WorkState Then
.Counter = .Counter + tmrSample.interval / 1000
End If
End With
'******************************
'读取实际值,赋给全局变量
'******************************
gfyfWenDu(1) = fyf1_fyfWenDu.Value
gtlfaKaiDu(1) = fyf1_tlfKaiDu.Value
gjlgYeWei(1) = fyf1_jlgYeWei.Value
glqysWenDu = fyf_lqysWenDu.Value
gGongZuoZhuangTai(1) = fyf1_Control.WorkState
gfyfWenDu(2) = fyf2_fyfWenDu.Value
gtlfaKaiDu(2) = fyf2_tlfKaiDu.Value
gjlgYeWei(2) = fyf2_jlgYeWei.Value
gGongZuoZhuangTai(2) = fyf2_Control.WorkState
gfyfWenDu(3) = fyf3_fyfWenDu.Value
gtlfaKaiDu(3) = fyf3_tlfKaiDu.Value
gjlgYeWei(3) = fyf3_jlgYeWei.Value
gGongZuoZhuangTai(3) = fyf3_Control.WorkState
'计算一甲胺流量
Dim intN As Integer
intN = 16
For i = 1 To 3
'***************************************
'intN的最大值可以设定到19,如果
'还需要大,需要修改gjlgYeWei2()数组的定义
'***************************************
gjlgYeWei2(1, intN) = fyf1_jlgYeWei.Value
gjlgYeWei2(2, intN) = fyf2_jlgYeWei.Value
gjlgYeWei2(3, intN) = fyf3_jlgYeWei.Value
Sum(i) = 0
For K = 1 To intN
Sum(i) = Sum(i) + (gjlgYeWei2(i, K) - gjlgYeWei2(i, 0)) / K
Next
'*************************
'采样值(由液位变化计算得到)
mYeWeiToLiuLiang(i) = 3600 * Sum(i) / (intN * N)
'*************************
If Not (gblnBeginSet(i)) Then myjaLiuLiang(i) = mYeWeiToLiuLiang(i)
gblnBeginSet(i) = True
'滤波值
mYeWeiToLiuLiang(i) = (1 - gsngLiuLiangLvBo(i)) * mYeWeiToLiuLiang(i) + _
gsngLiuLiangLvBo(i) * myjaLiuLiang(i)
'**********************************
'保存当前滤波值,作为下一个滤波的输入
myjaLiuLiang(i) = mYeWeiToLiuLiang(i)
For K = 0 To intN - 1
gjlgYeWei2(i, K) = gjlgYeWei2(i, K + 1)
Next
'求取流量的加权均值(10个点)
Dim KKK As Integer
For KKK = 0 To 8
mUsedForLiuLiang(i, KKK) = mUsedForLiuLiang(i, KKK + 1)
Next
mUsedForLiuLiang(i, 9) = mYeWeiToLiuLiang(i)
gyjaLiuLiang(i) = 0.05 * (mUsedForLiuLiang(i, 0) + _
mUsedForLiuLiang(i, 1) + mUsedForLiuLiang(i, 2) + _
mUsedForLiuLiang(i, 3)) + _
0.1 * (mUsedForLiuLiang(i, 4) + mUsedForLiuLiang(i, 5) + _
mUsedForLiuLiang(i, 6)) + _
0.15 * (mUsedForLiuLiang(i, 7) + mUsedForLiuLiang(i, 8)) + _
0.2 * mUsedForLiuLiang(i, 9)
If gtlfaKaiDu(i) <= 0 Then gtlfaKaiDu(i) = 0
If gyjaLiuLiang(i) <= 40 Then gyjaLiuLiang(i) = 0
If gyjaLiuLiang(i) > 1200 Then gyjaLiuLiang(i) = 1200
Next
glqysWenDu = fyf_lqysWenDu.Value
'计算温度斜率
Dim XieLv(1 To 3) As Single
Dim KK As Integer
For i = 1 To 3
For KK = 0 To 4
mfyfWenDuForXieLv(i, KK) = mfyfWenDuForXieLv(i, KK + 1)
Next
mfyfWenDuForXieLv(i, 5) = gfyfWenDu(i)
XieLv(i) = (mfyfWenDuForXieLv(i, 5) - mfyfWenDuForXieLv(i, 0)) / (5 * N)
Next
fyf1_Control.fyfWenDuXieLv = XieLv(1)
fyf2_Control.fyfWenDuXieLv = XieLv(2)
fyf3_Control.fyfWenDuXieLv = XieLv(3)
'********************************
'为dataviewfrm赋属性值
'********************************
For i = 1 To 3
With dataviewfrm
.Index = i
.fyfWenDu = gfyfWenDu(i)
.tlfaKaiDu = gtlfaKaiDu(i)
.jlgYeWei = gjlgYeWei(i)
.yjaLiuLiang = gyjaLiuLiang(i)
Select Case i
Case 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -