3 Star 3 Fork 2

RedGuy / PIMTest

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
SignalManager.bas 6.77 KB
一键复制 编辑 原始数据 按行查看 历史
RedGuy 提交于 2014-08-07 11:49 . first commit
Attribute VB_Name = "SignalManager"
'信号源公共函数
Public Flag As Boolean
Dim Sig1 As New E4438C '信号源1
Dim Sig2 As New E4438C '信号源2
Dim PowSnr As New U2002A '功率计
Dim Nrtz As New Z44 '功率计
Function OpenSig(ByVal Name1 As String, ByVal Name2 As String) As Boolean
If Sig1.OpenFlag(Name1) = False Then OpenSig = Sig1.OpenSource(Name1) '打开信号源1,2
If Sig1.OpenFlag(Name1) = False Then Exit Function '信号源1没打开则退出
If Sig2.OpenFlag(Name2) = False Then OpenSig = Sig2.OpenSource(Name2)
OpenSig = Sig2.OpenFlag(Name2)
End Function
Function Sig1_SN() As String
Sig1_SN = Sig1.GetSigSN
End Function
Function Sig2_SN() As String
Sig2_SN = Sig2.GetSigSN
End Function
Sub SetSigPowStep(ByVal Step1 As Double, ByVal Step2 As Double)
Sig1.SetStep Step1 '设置功率步径
Sig2.SetStep Step2
End Sub
Function OpenPS(ByVal Name As String) As Boolean
If UCase$(Name) = "Z44" Then
If Nrtz.OpenFlag = False Then OpenPS = Nrtz.OpenZ44
OpenPS = Nrtz.OpenFlag
Else
If PowSnr.OpenFlag(Name) = False Then OpenPS = PowSnr.OpenSource(Name) '打开功率探头
OpenPS = PowSnr.OpenFlag(Name)
End If
End Function
Sub SetSig(ByVal SigOn As String)
Select Case SigOn
Case "10" '打开RF1,关闭RF2
Sig1.RFON
Sig2.RFOFF
Case "01" '打开RF2,关闭RF1
Sig1.RFOFF
Sig2.RFON
Case "11"
Sig1.RFON
Sig2.RFON
Case "00"
Sig1.RFOFF
Sig2.RFOFF
End Select
End Sub
Sub OutPutSig1(ByVal Fre As Double, ByVal Pow As Double)
Sig1.SignalInit Fre, Pow
End Sub
Sub OutPutSig2(ByVal Fre As Double, ByVal Pow As Double)
Sig2.SignalInit Fre, Pow
End Sub
Function Connect_Done(ByVal i As Integer) As Boolean '连接标识,返回连接应答
Dim Ans As Boolean
Select Case i
Case 1
Ans = TestForm.ShowMessage(1, "请连接好仪器:" & Chr(13) & Chr(13) & "功率计" & IIf(UCase$(MyInstrConf.PS_Alias) = "Z44", "(RSZ44)", "(Agilent)") & "和负载", "仪器校准")
Case 2
Ans = TestForm.ShowMessage(1, "请连接好产品", "开始测试")
End Select
Connect_Done = Ans
End Function
Sub CalSig1() '校准信号源1
On Error GoTo Err
SetSig "10" '打开RF1,关闭RF2
For i = LBound(MyItemConf()) To UBound(MyItemConf()) '校准频率数目为myItemConf()数组大小
Sig1.SignalInit (MyItemConf(i).Sig1Frequency) * 1000000, MyItemConf(i).Sig1Power '设置信号源功率,频率值
SetSig "10" '打开RF1,关闭RF2
WriterOffset i, "Sig1Offset", Sig1PowOffset(i) '写校准值到Ini文件
SetSig "00" '关闭RF1,关闭RF2
Next i
Err:
End Sub
Function Sig1PowOffset(ByVal i As Integer) As Double '测量Sig1Offset
On Error GoTo Err
If i >= 2 Then '对于频率相同的点不需要重复校准
For j = i - 1 To 1 Step -1
If MyItemConf(i).Sig1Frequency = MyItemConf(j).Sig1Frequency And _
MyItemConf(i).Sig1Power = MyItemConf(j).Sig1Power And _
MyItemConf(i).Sig1Target = MyItemConf(j).Sig1Target Then
'Sig1PowOffset = myItemConf(j).sig1Offset
Sig1PowOffset = ReadOffset(j, "Sig1Offset")
Exit Function
End If
Next j
End If
Dim deta As Double
'调整信号源输入功率,使之达到目标值
If Nrtz.GetVal = False Then Exit Function
Do
s1 = Sig1.PowerGet
If s1 - MyItemConf(i).Sig1Power > 10 Or s1 > 5 Then
TestForm.ShowMessage 2, "信号源1功率超出范围!", "校准仪器"
Exit Function
End If
If UCase$(MyInstrConf.PS_Alias) = "Z44" Then
deta = Nrtz.GetVal - MyItemConf(i).Sig1Target
ElseIf UCase$(MyInstrConf.PS_Alias) = "PS" Then
deta = PowSnr.FetchData - MyItemConf(i).Sig1Target + MyInstrConf.Coupler_Value '功率探测值-指定目标值
Else
TestForm.ShowMessage 2, "功率计设置错误!", "校准仪器"
Exit Function
End If
Select Case deta
Case Is > 0
Sig1.PowerUpOrDown False '减小信号源功率
Case Is < 0
Sig1.PowerUpOrDown True '增加
Case Is = 0
Exit Do '退出调整
End Select
Loop While Abs(deta) > 0.1 '调整条件
Sig1PowOffset = Format(Sig1.PowerGet - MyItemConf(i).Sig1Power, "#0.00") 'PowOffset=信号源输出功率值-信号源预置值
Err:
End Function
Sub CalSig2() '校准信号源2
On Error GoTo Err
'If ReadyCal = False Then Exit Sub
SetSig "01"
For i = LBound(MyItemConf()) To UBound(MyItemConf())
Sig2.SignalInit (MyItemConf(i).Sig2Frequency) * 1000000, MyItemConf(i).Sig2Power
SetSig "01" '打开RF1,关闭RF2
WriterOffset i, "Sig2Offset", Sig2PowOffset(i)
SetSig "00" '关闭RF1,关闭RF2
Next i
SetSig "00"
Err:
End Sub
Function Sig2PowOffset(ByVal i As Integer) As Double '测量Sig2Offset
On Error GoTo Err
If i >= 2 Then
For j = i - 1 To 1 Step -1
If MyItemConf(i).Sig2Frequency = MyItemConf(j).Sig2Frequency And _
MyItemConf(i).Sig2Power = MyItemConf(j).Sig2Power And _
MyItemConf(i).Sig2Target = MyItemConf(j).Sig2Target Then
'Sig2PowOffset = myItemConf(j).sig2Offset
Sig2PowOffset = ReadOffset(j, "Sig2Offset")
Exit Function
End If
Next j
End If
Dim deta As Double
If Nrtz.GetVal = False Then Exit Function
Do
s2 = Sig2.PowerGet
If s2 - MyItemConf(i).Sig2Power > 10 Or s2 > 5 Then
TestForm.ShowMessage 2, "信号源2功率超出范围!", "校准仪器"
Exit Function
End If
If UCase$(MyInstrConf.PS_Alias) = "Z44" Then
deta = Nrtz.GetVal - MyItemConf(i).Sig2Target
ElseIf UCase$(MyInstrConf.PS_Alias) = "PS" Then
deta = PowSnr.FetchData - MyItemConf(i).Sig2Target + MyInstrConf.Coupler_Value '功率探测值-指定目标值
Else
TestForm.ShowMessage 2, "功率计设置错误!", "校准仪器"
Exit Function
End If
Select Case deta
Case Is > 0
Sig2.PowerUpOrDown False
Case Is < 0
Sig2.PowerUpOrDown True
Case Is = 0
Exit Do
End Select
Loop While Abs(deta) > 0.1
Sig2PowOffset = Format(Sig2.PowerGet - MyItemConf(i).Sig2Power, "#0.00")
Err:
End Function
Visual Basic
1
https://gitee.com/fangguanlin/PIMTest.git
git@gitee.com:fangguanlin/PIMTest.git
fangguanlin
PIMTest
PIMTest
master

搜索帮助