将vb6代码转换为vb.net?

use*_*188 2 vb.net vb6

我想把这个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.通常情况下,不要紧,你只是想用IntegerInteger,但如果位的数量重要,你必须要小心.