直线扫描架控制系统设计
End Sub
Private Sub Timer6_Timer()
MSComm1.InBufferCount = 0 '清空缓存区 MSComm1.OutBufferCount = 0 Select Case zdds Case 0
Call zidongxie(&H1, &H5, &HE, &H0, &H1) '设置P5-07为1 Case 1
Call zidongxie(&H1, &H2, &H22, &H0, &H21) '停止设置P2-17为21 Case 2
Call zidongxie(&H1, &H2, &H22, &H1, &H21) '启动设置P2-17为121 Case 3
Call maichongxie(&H1, &H6, &H6, wyH, wyL, wyH1, wyL1) '设置脉冲数 Case 4
Call zidongxie(&H1, &H5, &H78, sdH, sdl) '设置速度 Case 5
Call zidongxie(&H1, &H1, &H2, &H1, &H1) '设定反传 Case 6
Call zidongxie(&H1, &H1, &H2, &H0, &H1) '设定正转 End Select
Timer6.Enabled = False Timer7.Enabled = True End Sub
Private Sub Timer7_Timer() '帧后静止 Timer7.Enabled = False Call du End Sub
Private Sub zidongxie(zhanhao1 As Byte, dizhiH1 As Byte, dizhiL1 As Byte, shuzhiH1 As Byte, shuzhiL1 As Byte) '写操作子程序
On Error Resume Next Dim e As Integer Dim zdfs() As Byte ReDim zdfs(5)
zdfs(0) = zhanhao1 zdfs(1) = &H6 zdfs(2) = dizhiH1 zdfs(3) = dizhiL1 zdfs(4) = shuzhiH1 zdfs(5) = shuzhiL1 Call CRC(zdfs, 5)
ReDim Preserve zdfs(7) zdfs(6) = RcrcL
25
华侨大学毕业设计(论文)
zdfs(7) = RcrcH RcrcH = 0 RcrcL = 0
MSComm1.Output = zdfs() End Sub
Private Sub maichongxie(zhanhao1 As Byte, dizhiH1 As Byte, dizhiL1 As Byte, shuzhiH1 As Byte, shuzhiL1 As Byte, shuzhiH12 As Byte, shuzhiL12 As Byte) '写操作子程序
On Error Resume Next Dim e As Integer Dim zdfs() As Byte ReDim zdfs(10) zdfs(0) = zhanhao1 zdfs(1) = &H10 zdfs(2) = dizhiH1 zdfs(3) = dizhiL1 zdfs(4) = &H0 zdfs(5) = &H2 zdfs(6) = &H4 zdfs(7) = shuzhiH1 zdfs(8) = shuzhiL1 zdfs(9) = shuzhiH12 zdfs(10) = shuzhiL12
Call CRC(zdfs, 10)
ReDim Preserve zdfs(12) zdfs(11) = RcrcL zdfs(12) = RcrcH RcrcH = 0 RcrcL = 0
MSComm1.Output = zdfs() End Sub
Private Sub duoweixie(zhanhao1 As Byte, dizhiH1 As Byte, dizhiL1 As Byte, shumu1H As Byte, shumu1L As Byte, shumu2 As Byte, shuzhiH1 As Byte, shuzhiL1 As Byte, shuzhiH2 As Byte, shuzhiL2 As Byte) '多位操作子程序
On Error Resume Next Dim e As Integer Dim zdfs() As Byte ReDim zdfs(10) zdfs(0) = zhanhao1 zdfs(1) = &H10 zdfs(2) = dizhiH1 zdfs(3) = dizhiL1
26
直线扫描架控制系统设计
zdfs(4) = shumu1H zdfs(5) = shumu1L zdfs(6) = shumu2 zdfs(7) = shuzhiH1 zdfs(8) = shuzhiL1 zdfs(9) = shuzhiH2 zdfs(10) = shuzhiL2 Call CRC(zdfs, 10)
ReDim Preserve zdfs(12) zdfs(11) = RcrcL zdfs(12) = RcrcH RcrcH = 0 RcrcL = 0
MSComm1.Output = zdfs() End Sub
Private Sub zidongdu(zhanhao As Byte, dizhiH As Byte, dizhiL As Byte, geshuH As Byte, geshuL As Byte) '读操作子程序
On Error Resume Next Dim e As Integer Dim zdfs() As Byte ReDim zdfs(5) zdfs(0) = zhanhao zdfs(1) = &H3 zdfs(2) = dizhiH zdfs(3) = dizhiL zdfs(4) = geshuH zdfs(5) = geshuL Call CRC(zdfs, 5)
ReDim Preserve zdfs(7) zdfs(6) = RcrcL zdfs(7) = RcrcH RcrcH = 0 RcrcL = 0
MSComm1.Output = zdfs() End Sub
Private Sub CRC(fssz() As Byte, geshu As Integer) 'CRC校验子程序 On Error Resume Next
Dim crcH As Byte, crcL As Byte Dim ScrcH As Byte, ScrcL As Byte Dim crcAH As Byte, crcAL As Byte Dim a As Integer Dim b As Integer
27
华侨大学毕业设计(论文)
crcAH = &HA0 crcAL = &H1
Dim gs1 As Integer Dim gs2 As Integer
crcH = &HFF '1.设置CRC寄存器,并给其赋值FFFF(hex)。 crcL = &HFF
For gs1 = 0 To geshu
crcL = fssz(gs1) Xor crcL '2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。
For gs2 = 0 To 7 '5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。
ScrcH = crcH ScrcL = crcL crcH = crcH \\ 2 '右移相除左移相乘 crcL = crcL \\ 2
If ((ScrcH And &H1) = &H1) Then '注意((ScrcH And &H1) = &H1)与ScrcH And &H1 = &H1区别
crcL = crcL Or &H80 End If
If ((ScrcL And &H1) = &H1) Then '4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。多项式码&HA001
crcL = crcL Xor crcAL crcH = crcH Xor crcAH End If Next gs2 Next gs1 RcrcH = crcH RcrcL = crcL End Sub Private Sub du() '读位操作1
MSComm1.InBufferCount = 0 '清空缓存区 MSComm1.OutBufferCount = 0 MSComm1.RThreshold = 15 '15
Call zidongdu(&H1, &H0, &H4, &H0, &H1) '站号+地址高+地址低+个数高+个数低,读P0-02
Timer2.Enabled = True '读超时
End Sub
Private Sub Timer2_Timer() '读超时1
28
直线扫描架控制系统设计
Timer2.Enabled = False Call du
End Sub
Private Sub mscomm1_oncomm() On Error Resume Next Dim cs As Integer
Select Case MSComm1.CommEvent Case comEvReceive '
ReDim jieshou(6)
jieshou() = MSComm1.Input Call CRC(jieshou(), 4)
If (RcrcL = jieshou(5)) And (RcrcH = jieshou(6)) And (jieshou(2) = 0) Then Timer2.Enabled = False txsb1 = 0
If Len(Hex(jieshou(4))) < 2 Then
Text4.Text = Val(\ Else
Text4.Text = Val(\ End If
Timer4.Enabled = True '读连续间隔计时2 Else
Text4.Text = \ End If End Select
End Sub
Private Sub Timer4_Timer() '连续读1 Call du
Timer4.Enabled = False End Sub
29
华侨大学毕业设计(论文)
30