急!急!急!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啊,呵呵
楼主这个要求恐怕没人能帮你,关键是通讯的指令,至于这些指令怎么发送的自己写通讯程序,很简单的啊