读书人

急VB转C#一个串口程序!该怎么处理

发布时间: 2012-01-28 22:06:13 作者: rapoo

急!急!急!VB转C#!一个串口程序!
VB写的一个串口程序,现在要转成C#。
我又不会VB,请各位帮帮忙,分不够再加!
代码如下:


Option Explicit
Dim COUNTER As Integer
Dim crc0 As Integer
Dim BO As Boolean
Dim CRC As Integer
Dim k As Integer
Dim out(0) As Byte
Dim data(400) As Byte
Dim RxBuff(1000) As Byte
Dim RxPoint As Integer
Dim Filenum As Integer
Dim Filenum_zo As Integer
Dim Filenum_fu As Integer

Dim Fun As Byte
Dim Cnt2 As Integer

Dim Fang_Lmm(3120) As Single
Dim Fu_Lmm(1120) As Single
Dim Zo_Lmm(1120) As Single

Dim Fang_str(3120) As String * 6
Dim Fu_str(1120) As String * 6
Dim Zo_str(1120) As String * 6


Private Sub Command1_Click()
Dim str As String * 36
Text1.Text = " "
Text2.Text = " "
Text4.Text = " "
Label2.Caption = " "
Label1.Caption = " "
Fun = 3
Cnt2 = 0
Filenum = 0
Filenum_fu = 0
Filenum_zo = 0



Call Fun_3_fuchong
End Sub

Private Sub Command2_Click()
Dim str As String * 36
Text1.Text = " "
Text3.Text = " "
Label2.Caption = " "
'Label1.Caption = " "
Fun = 4
Cnt2 = 0
Filenum = 0
Filenum_fu = 0
Filenum_zo = 0



Call Fun_4_fangdian
End Sub



Timer1.Enabled = True
End Sub


Private Sub Timer1_Timer()
Dim i As Integer
Dim J As Integer
Dim meter As Integer
Dim m As Byte

Dim MFILE As Byte

Dim Mydata(10) As Byte
Dim str As String * 36


Dim str1 As String * 21
Dim mj As String
Dim drr As String
Dim Datae(6) As Byte
Dim Cnt1 As Integer
Dim Total As Integer
Dim Cnt6 As Integer
Dim Tvv As Integer
Dim modd As Byte
Dim Lmm As Single
Dim sstr As String


Timer1.Enabled = False


If RxBuff(0) = &HEE And RxBuff(1) = &HEE Then
If Fun = 3 Then
'Text2.Text = " "
ElseIf Fun = 4 Then
'Text3.Text = " "
Else
End If

MFILE = FreeFile
If Fun = 3 Then
' Open "D:\浮充电压记录.txt " For Random Access Write As #MFILE Len = Len(str)
Else
' Open "D:\放电记录.txt " For Random Access Write As #MFILE Len = Len(str)
End If


For J = 0 To 15
'Text2.Text = " "
For m = 0 To 2
Datae(m) = RxBuff(J * 8 + 8 + m)
'Text2.Text = Text2.Text + ", " + CStr(Hex(RxBuff(J * 8 + 8 + m)))


Next

Cnt1 = Datae(0) And 15
Cnt1 = Cnt1 * 256 + Datae(1)

If (Datae(2) And 15) = 1 Then
If Cnt1 < 264 Then
Lmm = (Cnt1 * 1.2011 + 1.5176) / 100
ElseIf Cnt1 < 264 Then
Lmm = (Cnt1 * 1.2052 + 0.4145) / 100
Else
Lmm = (Cnt1 * 1.2026 + 2.0234) / 100
End If
ElseIf (Datae(2) And 15) = 2 Then
If Cnt1 < 591 Then
Lmm = (Cnt1 * 2.9462 + 5.7479) / 100
ElseIf Cnt1 < 831 Then
Lmm = (Cnt1 * 2.9583 - 1.3748) / 100
Else
Lmm = (Cnt1 * 2.9483 + 6.9827) / 100
End If
ElseIf (Datae(2) And 15) = 3 Then
Lmm = (Cnt1 * 9.5099 + 12.2523) / 100


ElseIf (Datae(2) And 15) = 4 Then
Lmm = (Cnt1 * 30.0434 + 2.2517) / 100
Else

End If

Datae(0) = RxBuff(4)
Cnt1 = Datae(0)
Datae(1) = RxBuff(5)
Cnt1 = Cnt1 * 256 + Datae(1)
Total = Cnt1
Cnt6 = Cnt1 Mod 16
Datae(3) = Cnt6
On Error GoTo ch000
Cnt1 = (Cnt1 - Cnt6) / 16


Datae(0) = RxBuff(6)
Cnt6 = Datae(0)
Datae(1) = RxBuff(7)
Cnt6 = Cnt6 * 256 + Datae(1)

Datae(5) = Datae(2) And &H80
If (Datae(5)) = 0 Then
sstr = "OK "
Else
sstr = "NO "
End If

Cnt2 = Cnt2 + 1


str = "第 " + CStr(Cnt2) + "条 " + sstr + "记录: " + "电压 " + CStr(Lmm) + "V " + " "

If Cnt6 > Cnt1 Then
If (J + 1) > Datae(3) Then
str = " "
J = 20 '退出
End If
End If
On Error GoTo ch000
Tvv = (Cnt6 - 1) / Cnt1 * 100
drr = Left$(CStr(Tvv), 6)
Label2.Caption = "已完成 " + CStr(Tvv) + "% "
'Label1.Caption = " " ' "提取数据不完整,请重新试一次! "
If Cnt6 > Cnt1 Then
'Label1.Caption = "所有 " + CStr(Total) + "条记录已成功提取! "
Label2.Caption = "已完成 " + "100 " + "% "
If Fun = 3 Then
Timer2.Enabled = True
End If

End If





'str = CStr(Lmm) gg
Filenum = Filenum + 1
If Fun = 3 Then '浮充电压
str1 = str
Text2.Text = Text2.Text + str1
If (Lmm > 10) Then '总电压 '总电压调整
Filenum_zo = Filenum_zo + 1
Zo_Lmm(Filenum_zo) = Lmm
Zo_str(Filenum_zo) = sstr


Else '浮充电压
Filenum_fu = Filenum_fu + 1
Fu_Lmm(Filenum_fu) = Lmm
Fu_str(Filenum_fu) = sstr


End If

ElseIf Fun = 4 Then 'fang电压


str1 = str
Text3.Text = Text3.Text + str1
Fang_Lmm(Filenum) = Lmm
Fang_str(Filenum) = sstr
Else
Text2.Text = "功能码出错! "
End If
m = Len(str)

str = CStr(Lmm)
'Put #MFILE, Filenum, str
Next
'Close #MFILE
If Cnt6 < Cnt1 + 1 Then
If Fun = 3 Then
Call Fun_3_fuchong
Else
Call Fun_4_fangdian
End If
End If
End If



RxPoint = 0
Exit Sub

ch000:
Resume Next


End Sub


Private Sub Fun_3_fuchong()
Dim Mint As Integer
Dim meter As Byte



Fun = 3

data(0) = &HEE
data(1) = &HEE
data(2) = 3 '功能码
data(3) = 1
data(4) = 3


Mint = data(2) + data(3) + data(4)
data(5) = Mint Mod 256 'cs
data(6) = &HAB

For meter = 0 To 6
out(0) = data(meter)
MSComm1.Output = out
'Text1.Text = Text1.Text + ", " + CStr(Hex(data(meter)))
Next
End Sub


Private Sub Fun_4_fangdian()
Dim Mint As Integer
Dim meter As Byte




Fun = 4
data(0) = &HEE
data(1) = &HEE
data(2) = 4 '功能码
data(3) = 1
data(4) = 4
Mint = data(2) + data(3) + data(4)
data(5) = Mint Mod 256 'cs
data(6) = &HAB

For meter = 0 To 6
out(0) = data(meter)
MSComm1.Output = out
'Text1.Text = Text1.Text + ", " + CStr(Hex(data(meter)))
Next
End Sub


[解决办法]
mark
[解决办法]
Fun = 4
data(0) = &HEE
data(1) = &HEE
data(2) = 4 '功能码
data(3) = 1
data(4) = 4
Mint = data(2) + data(3) + data(4)
data(5) = Mint Mod 256 'cs
data(6) = &HAB

这些都是赋值啊
For meter = 0 To 6
out(0) = data(meter)
MSComm1.Output = out
'Text1.Text = Text1.Text + ", " + CStr(Hex(data(meter)))
Next

这是一个for 循环
(for int i = 0; i <= 6 ;i++ )

out(0) = data(meter)

[解决办法]
0xEE 0xAB

你把整个程序帖出来,这样谁有时间帮你改呀,必须先自已吃透,有关键东西不懂的再问
------解决方案--------------------


楼主呀,这么长,光看懂这些代码都可以写一个全新的了
[解决办法]
&HEE
&HAB
表示16进制数,EE和AB
[解决办法]
貌似这里很多人都没用过VB啊,呵呵
楼主这个要求恐怕没人能帮你,关键是通讯的指令,至于这些指令怎么发送的自己写通讯程序,很简单的啊

读书人网 >C#

热点推荐