⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 deskwinnccontroller.bas

📁 单片机开放式数控系统 使用vb编写
💻 BAS
字号:
Attribute VB_Name = "Module1"
''  Copyright Carken Co. 2001 - 2004 All rights reserved.
Option Explicit

Public Const COMMANDFAILED = 0
Public Const COMMANDACCEPTED = 1
Public Const BUFFERFULL = 2

Const TC = 27
Const NumAxis = 4
Const Inverted = 0
Const TagAlongAxis = 0

Global ControllerFound As Boolean
Global Port As Long
Global Mode2ndGen As Boolean
Global InPosition As Boolean
Global FirmVer As Double
Global EmStop As Boolean
Global Paused As Boolean


Public Function SendAPICommandToController(com As TDeskWinAPICommand) As Long

  Dim X As Long
  Dim Y As Long
  Dim Z As Long
  Dim A As Long
  Dim Ack As Byte
  Dim Inputs As Byte
  
  If Mode2ndGen = True Then
    SendAPICommandToController = SendAPICommandToController2ndGen(com)
    Exit Function
  End If
  
  SendAPICommandToController = COMMANDFAILED
  If Not ControllerFound Then Exit Function
  Ack = 0
  A = 0
  Select Case com.CommandType
   Case ARCDIRECTION
        Ack = DeskWinSetArcDirection(com.Dir)
   Case ACCELCOM
        ' usually sent directly
   Case GETVERSION
        FirmVer = DeskWinGetFirmwareVersion()
   Case RESETCONTROL
        Ack = DeskWinReset(Port, TC, 0)
   Case GETPOS
        Ack = DeskWinGetPosition(X, Y, Z, A)
        If Ack = DESKWIN_IN_POSITION Then
          InPosition = True
        Else
          Main.UpdateCoords X, Y, Z, A
        End If
   Case PAUSECONTROL
        Ack = DeskWinPause
        If Ack = DESKWIN_OK Then Paused = True
   Case CONTINUECONTROL
        If EmStop Then
          Ack = DESKWIN_IN_EMSTOP
        Else
          Ack = DeskWinContinue
        End If
        If Ack = DESKWIN_OK Then Paused = False
   Case ENDMOVE
        Ack = DeskWinEndCurrentMove
   Case EMERGENCYSTOP
        Ack = DeskWinEmStop
   Case SETPOS
        Ack = DeskWinSetPosition(com.X, com.Y, com.Z, com.A, com.Axis)
   Case OUTPUT
        If EmStop Then
          Ack = DESKWIN_IN_EMSTOP
        Else
          Ack = DeskWinSetOutput(com.Axis, com.Dir, X, Y, Z, A)
        End If
   Case CONTROLDELAY
        If EmStop Then
          Ack = DESKWIN_IN_EMSTOP
        Else
          Ack = DeskWinDelay(com.Secs, X, Y, Z, A)
        End If
   Case LINEARFEED
        If EmStop Then
          Ack = DESKWIN_IN_EMSTOP
        Else
          Ack = DeskWinLinearMove(com.X, com.Y, com.Z, com.A, com.SlewSPS, com.EndSPS, X, Y, Z, A)
        End If
   Case INDEXFEED
        If EmStop Then
          Ack = DESKWIN_IN_EMSTOP
        Else
          Ack = DeskWinIndexMove(com.X, com.Y, com.Z, com.A, com.SlewSPS, com.Axis, X, Y, Z, A)
        End If
   Case RAPIDFEED
        If EmStop Then
          Ack = DESKWIN_IN_EMSTOP
        Else
          Ack = DeskWinRapidMove(com.X, com.Y, com.Z, com.A, com.SlewSPS, com.EndSPS, X, Y, Z, A)
        End If
   Case CW
        If EmStop Then
          Ack = DESKWIN_IN_EMSTOP
        Else
          Ack = DeskWinQuadrantArcMoveCW(com.rad, com.X, com.Y, com.Ex, com.Ey, com.SlewSPS, com.EndSPS, com.Quad, X, Y, Z, A)
        End If
   Case CCW
        If EmStop Then
          Ack = DESKWIN_IN_EMSTOP
        End
          Ack = DeskWinQuadrantArcMoveCCW(com.rad, com.X, com.Y, com.Ex, com.Ey, com.SlewSPS, com.EndSPS, com.Quad, X, Y, Z, A)
        End If
   Case HOMECONTROL
        If EmStop Then
          Ack = DESKWIN_IN_EMSTOP
        Else
          Ack = DeskWinHome(com.Axis, com.Dir, com.SlewSPS)
        End If
   Case SETOVERRIDE
        Ack = DeskWinSetFeedOverride(com.SlewSPS)
   Case SETOVERRIDEMAX
        Ack = DeskWinSetMaxSPS(com.SlewSPS, NumAxis, Inverted, TagAlongAxis, com.NumSteps)
   Case READINPUTS
        Inputs = DeskWinReadInputs()
        Ack = DESKWIN_OK
  End Select
  Select Case Ack
    Case 0 To 52
        SendAPICommandToController = COMMANDACCEPTED
    Case DESKWIN_OK
        SendAPICommandToController = COMMANDACCEPTED
    Case DESKWIN_BUFFERFULL
        Main.UpdateCoords X, Y, Z, A
        SendAPICommandToController = BUFFERFULL
    Case DESKWIN_IN_POSITION
        Main.UpdateCoords X, Y, Z, A
        InPosition = True
        SendAPICommandToController = COMMANDACCEPTED
    Case DESKWIN_SYNTAXERROR
        Main.sbrBar.Caption = "Command Syntax Error..."
        SendAPICommandToController = COMMANDFAILED
    Case DESKWIN_LIMITHIT
        If Not EmStop Then Main.DoEmStop (True)
        InPosition = True
        Main.sbrBar.Caption = "Limit Switch Hit..."
        SendAPICommandToController = COMMANDFAILED
    Case DESKWIN_INVALID_CHECKSUM
        Main.sbrBar.Caption = "Invalid Checksum..."
        SendAPICommandToController = COMMANDFAILED
    Case DESKWIN_UNKNOWN_COMMAND
        Main.sbrBar.Caption = "Unknown Command..."
        SendAPICommandToController = COMMANDFAILED
    Case DESKWIN_INVALIDSTART
        Main.sbrBar.Caption = "Command Syntax Error..."
        SendAPICommandToController = COMMANDFAILED
    Case DESKWIN_PROBEHIT
        Main.sbrBar.Caption = "Probe (Home) Switch Hit..."
        InPosition = True
        SendAPICommandToController = COMMANDACCEPTED
    Case DESKWIN_COMMAND_IS_IN_PROGRESS
        Main.sbrBar.Caption = "Command is already in progress..."
        SendAPICommandToController = COMMANDFAILED
    Case DESKWIN_PORT_DOES_NOT_EXIST
        Main.sbrBar.Caption = "Port Does Not Exist..."
        SendAPICommandToController = COMMANDFAILED
    Case DESKWIN_PORT_IS_ALREADY_OPEN
        Main.sbrBar.Caption = "Port is already open..."
        SendAPICommandToController = COMMANDFAILED
    Case DESKWIN_TIMEDOUT
        Main.sbrBar.Caption = "Command Timed Out..."
        SendAPICommandToController = COMMANDFAILED
    Case DESKWIN_FAILED_TO_RESET
        Main.sbrBar.Caption = "Controller Failed to Reset..."
        SendAPICommandToController = COMMANDFAILED
    Case DESKWIN_NOTINITED
        Main.sbrBar.Caption = "Controller not Inited..."
        SendAPICommandToController = COMMANDFAILED
    Case DESKWIN_IN_EMSTOP
        Main.sbrBar.Caption = "Controller in EMSTOP..."
        SendAPICommandToController = COMMANDACCEPTED
  End Select
End Function



Public Function SendAPICommandToController2ndGen(com As TDeskWinAPICommand) As Long

  Dim X As Long
  Dim Y As Long
  Dim Z As Long
  Dim A As Long
  Dim Ack As Byte
  Dim Inputs As Byte
  Dim RPM As Long
  
 
  SendAPICommandToController2ndGen = COMMANDFAILED
  If Not ControllerFound Then Exit Function
  Ack = 0
  A = 0
  Select Case com.CommandType
   Case ARCDIRECTION
        Ack = DeskWinSetArcDirection(com.Dir)
   Case ACCELCOM
        ' usually sent directly
   Case GETVERSION
        FirmVer = DeskWinGetFirmwareVersion()
   Case RESETCONTROL
        Ack = DeskWinReset(Port, TC, 1)
   Case GETPOS
        Ack = DeskWinGetPosition(X, Y, Z, A)
        If Ack = DESKWIN_2nd_IN_POSITION Then
          InPosition = True
        Else
          Main.UpdateCoords X, Y, Z, A
        End If
   Case PAUSECONTROL
        Ack = DeskWinPause
        If Ack = DESKWIN_2nd_OK Then Paused = True
   Case CONTINUECONTROL
        If EmStop Then
          Ack = DESKWIN_2nd_IN_EMSTOP
        Else
          Ack = DeskWinContinue
        End If
        If Ack = DESKWIN_2nd_OK Then Paused = False
   Case ENDMOVE
        Ack = DeskWinEndCurrentMove
   Case EMERGENCYSTOP
        Ack = DeskWinEmStop
   Case SETPOS
        Ack = DeskWinSetPosition(com.X, com.Y, com.Z, com.A, com.Axis)
   Case OUTPUT
        If EmStop Then
          Ack = DESKWIN_2nd_IN_EMSTOP
        Else
          Ack = DeskWinSetOutput(com.Axis, com.Dir, X, Y, Z, A)
        End If
   Case CONTROLDELAY
        If EmStop Then
          Ack = DESKWIN_2nd_IN_EMSTOP
        Else
          Ack = DeskWinDelay(com.Secs, X, Y, Z, A)
        End If
   Case LINEARFEED
        If EmStop Then
          Ack = DESKWIN_2nd_IN_EMSTOP
        Else
          Ack = DeskWinLinearMove(com.X, com.Y, com.Z, com.A, com.SlewSPS, com.EndSPS, X, Y, Z, A)
        End If
   Case INDEXFEED
        If EmStop Then
          Ack = DESKWIN_2nd_IN_EMSTOP
        Else
          Ack = DeskWinIndexMove(com.X, com.Y, com.Z, com.A, com.SlewSPS, com.Axis, X, Y, Z, A)
        End If
   Case RAPIDFEED
        If EmStop Then
          Ack = DESKWIN_2nd_IN_EMSTOP
        Else
          Ack = DeskWinRapidMove(com.X, com.Y, com.Z, com.A, com.SlewSPS, com.EndSPS, X, Y, Z, A)
        End If
   Case CW
        If EmStop Then
          Ack = DESKWIN_2nd_IN_EMSTOP
        Else
          Ack = DeskWinQuadrantArcMoveCW(com.rad, com.X, com.Y, com.Ex, com.Ey, com.SlewSPS, com.EndSPS, com.Quad, X, Y, Z, A)
        End If
   Case CCW
        If EmStop Then
          Ack = DESKWIN_2nd_IN_EMSTOP
        End
          Ack = DeskWinQuadrantArcMoveCCW(com.rad, com.X, com.Y, com.Ex, com.Ey, com.SlewSPS, com.EndSPS, com.Quad, X, Y, Z, A)
        End If
   Case HOMECONTROL
        If EmStop Then
          Ack = DESKWIN_2nd_IN_EMSTOP
        Else
          Ack = DeskWinHome(com.Axis, com.Dir, com.SlewSPS)
        End If
   Case SETOVERRIDE
        Ack = DeskWinSetFeedOverride(com.SlewSPS)
   Case SETOVERRIDEMAX
        Ack = DeskWinSetMaxSPS(com.SlewSPS, NumAxis, Inverted, TagAlongAxis, com.NumSteps)
   Case READINPUTS
        Inputs = DeskWinReadInputs()
        Ack = DESKWIN_2nd_OK
   Case CHASEENCODER
          If com.Quad = 1 Then
            Ack = DeskWinChaseEncoder(com.Axis, com.Dir, com.X, com.Y, com.Z, com.A)
          Else
            Ack = DeskWinEndChaseEncoder()
          End If
   Case READRPM
          RPM = DeskWinReadRPM()
          Main.UpdateRPM RPM
          Ack = DESKWIN_2nd_OK
    Case OUTPUTIMEDIATE
        If EmStop Then
          Ack = DESKWIN_2nd_IN_EMSTOP
        Else
          Ack = DeskWinSetOutputImediate(com.Dir)
        End If
 End Select
  Select Case Ack
    Case 0 To 232
        SendAPICommandToController2ndGen = COMMANDACCEPTED
    Case DESKWIN_2nd_OK
        SendAPICommandToController2ndGen = COMMANDACCEPTED
    Case DESKWIN_2nd_BUFFERFULL
        Main.UpdateCoords X, Y, Z, A
        SendAPICommandToController2ndGen = BUFFERFULL
    Case DESKWIN_2nd_IN_POSITION
        Main.UpdateCoords X, Y, Z, A
        InPosition = True
        SendAPICommandToController2ndGen = COMMANDACCEPTED
    Case DESKWIN_2nd_SYNTAXERROR
        Main.sbrBar.Caption = "Command Syntax Error..."
        SendAPICommandToController2ndGen = COMMANDFAILED
    Case DESKWIN_2nd_LIMITHIT
        If Not EmStop Then Main.DoEmStop (True)
        InPosition = True
        Main.sbrBar.Caption = "Limit Switch Hit..."
        SendAPICommandToController2ndGen = COMMANDFAILED
    Case DESKWIN_2nd_INVALID_CHECKSUM
        Main.sbrBar.Caption = "Invalid Checksum..."
        SendAPICommandToController2ndGen = COMMANDFAILED
    Case DESKWIN_2nd_UNKNOWN_COMMAND
        Main.sbrBar.Caption = "Unknown Command..."
        SendAPICommandToController2ndGen = COMMANDFAILED
    Case DESKWIN_2nd_INVALIDSTART
        Main.sbrBar.Caption = "Command Syntax Error..."
        SendAPICommandToController2ndGen = COMMANDFAILED
    Case DESKWIN_2nd_PROBEHIT
        Main.sbrBar.Caption = "Probe (Home) Switch Hit..."
        InPosition = True
        SendAPICommandToController2ndGen = COMMANDACCEPTED
    Case DESKWIN_2nd_COMMAND_IS_IN_PROGRESS
        Main.sbrBar.Caption = "Command is already in progress..."
        SendAPICommandToController2ndGen = COMMANDFAILED
    Case DESKWIN_2nd_PORT_DOES_NOT_EXIST
        Main.sbrBar.Caption = "Port Does Not Exist..."
        SendAPICommandToController2ndGen = COMMANDFAILED
    Case DESKWIN_2nd_PORT_IS_ALREADY_OPEN
        Main.sbrBar.Caption = "Port is already open..."
        SendAPICommandToController2ndGen = COMMANDFAILED
    Case DESKWIN_2nd_TIMEDOUT
        Main.sbrBar.Caption = "Command Timed Out..."
        SendAPICommandToController2ndGen = COMMANDFAILED
    Case DESKWIN_2nd_FAILED_TO_RESET
        Main.sbrBar.Caption = "Controller Failed to Reset..."
        SendAPICommandToController2ndGen = COMMANDFAILED
    Case DESKWIN_2nd_NOTINITED
        Main.sbrBar.Caption = "Controller not Inited..."
        SendAPICommandToController2ndGen = COMMANDFAILED
  End Select
End Function




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -