我正在尝试将这个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 ()
答案 0 :(得分:10)
在VB6中,可以添加某些后缀以指定变量类型。例如:
Dim x%
与:
相同Dim x As Integer
VB.NET仍支持后缀,但广泛不鼓励。以下是可能的后缀列表:
$
是String
%
是Integer
&
是Long
!
是Single
#
是Double
@
是Currency
的后缀(现在是.NET中的Decimal
) VB6没有为所有核心数据类型提供后缀字符。例如,Boolean
,Date
或Short
没有有效的后缀字符。即使在VB6中,许多人也建议在所有变量声明中始终使用As
,但仍有许多人建议使用后缀(如果可用),因为它们提供了一些额外的预编译类型检查,这通常是有益的。
因此,要将该代码转换为.NET,您需要使用As ...
子句替换任何变量声明行中的后缀符号,为istance指定等效类型,而不是:
Dim Er!, Derivative!, Proportional!
Static Olderror!, Cont!, Integral!
Static Limiter_Switch%
你将其转换为:
Dim Er, Derivative, Proportional As Single
Static OldError, Cont, Integral As Single
Static Limiter_Switch As Integer
然后,在使用变量时出现后缀符号,在声明行之外,您只需删除该符号即可。例如,而不是:
Limiter_Switch% = 1
你将其转换为:
Limiter_Switch = 1
请记住,在将类型从VB6转换为VB.NET时,VB.NET中的数字类型会更大。例如,VB6中的Integer
是16位,但在VB.NET中,Integer
是32位。因此,从技术上讲,VB.NET中的等价物对于VB6 Integer
是Short
。通常情况下,这并不重要,您只想对Integer
使用Integer
,但如果位数很重要,则需要小心。
答案 1 :(得分:0)
这些符号在旧版本的MS Basic中指定了变量类型,最多为VB6。 %=整数,&amp; =长,!=单,#=双,@ =货币,$ =字符串