个人计算机(PC)与可编程控制器通信
weishu = 1 End If
awe1 = setad Mod 10 '用ListInAddr的末尾数与输入信号的末尾数进行比较计算 If Oct(Val(\ '判断是不是八进制。 Exit Sub End If
setad1 = Val(Str(setad \\ 10))
devadd = \ MSComm1.InBufferCount = 0 MSComm1.OutBufferCount = 0
MSComm1.Output = Chr(2) + devadd + SumChk(devadd) Tim = Timer Do
If Timer > Tim + 1 Then: Exit Do Loop Until MSComm1.InBufferCount = 20 setin = MSComm1.Input
weishu1 = Val(\ awe = dec2bin(weishu1) BN8 = Mid(awe, 1, 1) BN7 = Mid(awe, 2, 1) BN6 = Mid(awe, 3, 1) BN5 = Mid(awe, 4, 1) BN4 = Mid(awe, 5, 1) BN3 = Mid(awe, 6, 1) BN2 = Mid(awe, 7, 1) BN1 = Mid(awe, 8, 1) Select Case awe1
Case 0 'awe1断定元件号的位数,如是0位或4位 If BN1 = 1 Then biaozi = True Else
biaozi = False End If Case 1
If BN2 = 1 Then
6
上海理工大学本科生毕业设计(论文)
biaozi = True Else
biaozi = False End If Case 2
If BN3 = 1 Then biaozi = True Else
biaozi = False End If Case 3
If BN4 = 1 Then biaozi = True Else
biaozi = False End If
Case 4 If BN5 = 1 Then biaozi = True Else
biaozi = False End If Case 5
If BN6 = 1 Then biaozi = True Else
biaozi = False End If Case 6
If BN7 = 1 Then biaozi = True Else
biaozi = False End If Case 7
'awe1断定元件号的位数,如是0位或4位7
个人计算机(PC)与可编程控制器通信
If BN8 = 1 Then biaozi = True Else
biaozi = False End If End Select If biaozi = True Then
InAlarm.FillColor = QBColor(12) Else
InAlarm.FillColor = QBColor(10) End If End Sub
'以下dce2bin()函数是将Dats转换成二进制数 Private Function dec2bin(Dats$) As String
Dim bin8, bin4, bin2, bin1, bin16, bin32, bin64, bin128 If Dats \\ 128 >= 1 Then bin128 = 1 Else
bin128 = 0 End If
If (Dats Mod 128) \\ 64 >= 1 Then bin64 = 1 Else bin64 = 0 End If
If (Dats Mod 64) \\ 32 >= 1 Then 'Mod用来对两个数作除法并且只返回余数
bin32 = 1 Else bin32 = 0 End If
If (Dats Mod 32) \\ 16 >= 1 Then bin16 = 1 Else bin16 = 0
8
上海理工大学本科生毕业设计(论文)
End If
If (Dats Mod 16) \\ 8 >= 1 Then '\\ 运算符用来对两个数作除法并返回一个整数
bin8 = 1 Else bin8 = 0 End If
If (Dats Mod 8) \\ 4 >= 1 Then 'Mod用来对两个数作除法并且只返回余数
bin4 = 1 Else bin4 = 0 End If
If (Dats Mod 4) \\ 2 >= 1 Then bin2 = 1 Else bin2 = 0 End If
If Dats Mod 2 = 0 Then bin1 = 0 Else bin1 = 1 End If
bin128 = CStr(bin128) 'CStr 函数将一数值转换为 String bin64 = CStr(bin64) bin32 = CStr(bin32) bin16 = CStr(bin16)
bin8 = CStr(bin8) 'CStr 函数将一数值转换为 String bin4 = CStr(bin4) bin2 = CStr(bin2) bin1 = CStr(bin1)
dec2bin = bin128 + bin64 + bin32 + bin16 + bin8 + bin4 + bin2 + bin1 End Function
9
个人计算机(PC)与可编程控制器通信
'地址计算
Public Sub diziq() '将combox中的数据传至输出缓冲区,并判断 Dim setaddr As String setadOut = ListOutAddr.Text If setadOut = \
MsgBox (\请输入元件地址!\ Exit Sub End If
If CStr(Val(setadOut)) <> setadOut Then Exit Sub '数字区包括了字母
If Oct(Val(\ '判断是不是八进制。 Oct()可将数值转换为八进制
Exit Sub End If
DevDatOut = ydizi(setadOut) End Sub
'地址范围是0500__057F,方式是1032 Private Function ydizi(Dats$) As String Dim devadd As String Dim station1
devadd = Hex(\ 'Hex()数据转换为十六进制 station1 = \
devadd = Right(station1, 2) '取末两位 ydizi = devadd + \ End Function
Private Function SumChk(Dats$) As String Dim I& Dim CHK&
For I = 1 To Len(Dats) '求数据长度
CHK = CHK + Asc(Mid(Dats, I, 1)) '求Dats每一位数据的ASCII码的和 Next I
10