2

我正在尝试将此 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 ()
4

2 回答 2

10

在 VB6 中,可以添加某些后缀来指定变量类型。例如:

Dim x%

是相同的:

Dim x As Integer

后缀在 VB.NET 中仍受支持,但普遍不鼓励使用. 以下是可能的后缀列表:

  • $是后缀String
  • %是后缀Integer
  • &是后缀Long
  • !是后缀Single
  • #是后缀Double
  • @Currency(现在Decimal在 .NET 中)的后缀

VB6 没有为所有核心数据类型提供后缀字符。例如,BooleanDate或没有有效的后缀字符Short。即使在 VB6 中,许多人建议始终As在所有变量声明中使用,但仍有许多人建议在可用的情况下使用后缀,因为它们提供了一些额外的预编译类型检查,这通常是有益的。

因此,要将代码转换为 .NET,您需要用一个As ...子句替换任何变量声明行中的后缀符号,例如指定等效类型,而不是这样:

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 中的数字类型更大。例如,Integer在 VB6 中是 16 位,但在 VB.NET 中Integer是 32 位。因此,从技术上讲,VB.NET 中对于 VB6 的等价物IntegerShort. 通常,这并不重要,您只想使用Integerfor Integer,但如果位数很重要,则需要小心。

于 2013-09-18T11:56:41.230 回答
0

这些符号指定了旧版本 MS Basic 中的变量类型,直到 VB6。% = 整数,&=Long,!=Single,#=Double,@=Currency,$=string

于 2013-09-18T11:54:42.343 回答