我想把这个PID控制代码放到我的VB.net项目中,但对所有感叹号都有点无能为力.有人可以向我解释如何在VB.NET中实现这段代码吗?
Dim Er!, Derivative!, Proportional!
Static Olderror!, Cont!, Integral!
Static Limiter_Switch%
Limiter_Switch% = 1
Er = setpoint - process
If ((Cont >= 1 And Er > 0) Or (Cont <= 0 And Er < 0) Or (Integ >= 9999)) Then
Limiter_Switch = 0
Else
Limiter_Switch = 1
End If
Integral = Integral + Gain / Integ * Er * deltaT * Limiter_Switch
Derivative = Gain * deriv * (Er - Olderror) / deltaT
Proportional = Gain * Er
Cont = Proportional + Integral + Derivative
Olderror = Er
If (Cont > 1) Then
Cont = 1
End If
If (Cont < 0) Then
Cont = 0
End If
Return ()
Run Code Online (Sandbox Code Playgroud)
Ste*_*art 10
在VB6中,可以添加某些后缀以指定变量类型.例如:
Dim x%
Run Code Online (Sandbox Code Playgroud)
是相同的:
Dim x As Integer
Run Code Online (Sandbox Code Playgroud)
VB.NET仍然支持后缀,但是它们被广泛劝阻.以下是可能的后缀列表:
$ 是后缀 String% 是后缀 Integer& 是后缀 Long! 是后缀 Single# 是后缀 Double@是Currency(现在Decimal在.NET中)的后缀VB6没有为所有核心数据类型提供后缀字符.例如,或Boolean,没有有效的后缀字符.即使在VB6中,许多人也建议总是在所有变量声明中使用,但仍有许多人建议使用后缀,如果可用的话,因为它们提供了一些额外的预编译类型检查,这通常是有益的.DateShortAs
因此,要将该代码转换为.NET,您需要使用As ...子句替换任何变量声明行中的后缀符号,为istance指定等效类型,而不是:
Dim Er!, Derivative!, Proportional!
Static Olderror!, Cont!, Integral!
Static Limiter_Switch%
Run Code Online (Sandbox Code Playgroud)
你将其转换为:
Dim Er, Derivative, Proportional As Single
Static OldError, Cont, Integral As Single
Static Limiter_Switch As Integer
Run Code Online (Sandbox Code Playgroud)
然后,在使用变量时出现后缀符号,在声明行之外,您只需删除该符号即可.例如,而不是:
Limiter_Switch% = 1
Run Code Online (Sandbox Code Playgroud)
你将其转换为:
Limiter_Switch = 1
Run Code Online (Sandbox Code Playgroud)
请记住,在将类型从VB6转换为VB.NET时,VB.NET中的数字类型会更大.因此,例如,Integer在VB6中是16位,但在VB.NET中,Integer是32位.因此,从技术上讲,相当于VB.NET,对于VB6来说Integer就是如此Short.通常情况下,不要紧,你只是想用Integer的Integer,但如果位的数量重要,你必须要小心.