The Shop > Software Tools
CnC Mach3 serial cards, I/O
(1/1)
Dawai:
I ended up writing a vbscript file, you load it into Mach3 gcode by calling it's M-code name, this one M995, initiates the opto22 422 link, sets up modules, and writes (0) position bit on.
I can use it like this, but.. the commands are so close to Modbus transactions of data that mach3 uses there has to be a way>?>
command string = ">" start of transmission, "FF" Hex address 255, A-Z command register, between 4 bytes and sixteen 4 byte transactions of data per unit.
Anyways.. here is a script that opens up the serial and is working right now.. I have 32 commands related to a 16 I/O board thou.. gets confusing.. and typos kill a gcode program faster than a bullet.
I commented the "other modules commands and do one command per Mcode"
M995-M980
'******************* vbscript code
'*************** Mach 3 serial opto22 write *********
'*** Authored Cofer 12-26-2013 NORF Gawgia
' Utilizing 16 bit opto22 Pb16hc card & B1 422 serial card. usb-422 adapter on com port 3
Private Declare Function timeGetTime Lib "WINMM.dll" () As Long
Dim M_flag As Boolean
Dim TimeToEnd As Boolean
Dim m_value As Double
Dim i, t As Integer
Dim not_complete As Boolean
Dim Add$, Cmd$, Pl$, Modi$, RetData$, Opto22Err$
Dim modules As Integer
Dim Byte_pick$
Dim pausetime As Long
Dim control_word$(25) 'array for all control g,M,n codes
Dim control_flag(25) As Boolean
Sub MyFunction()
Dim pwrup As Integer
Set MSComm1=CreateObject("MSCOMMLib.MSComm")
Dim t
MSComm1.Settings = "19200,n,8,1"
MSComm1.CommPort = 3
MSComm1.InBufferCount = 0
MSComm1.PortOpen = True
If Err Then
MsgBox "COM" & MSComm1.CommPort & ": not opened, Sorry!"
Exit Sub
End If
'****************************************************************
MSComm1.output=">FFACD" & Chr(13) 'opto22 power up clear at address FF
Call delay_MS_time(10)
'MsgBox " reply was " & MScomm1.input
MSComm1.output=">FFI000FAB" & Chr(13) 'configure the first four as outputs
Call delay_MS_time(10)
'MsgBox " reply was " & MScomm1.input
MSComm1.output=">FFK000198" & Chr(13) 'TURN on bit one, opto22 address FF
Call delay_MS_time(10)
'MsgBox " reply was " & MScomm1.input
' MSComm1.output=">FFK000299" & Chr(13) 'TURN on bit two, opto22 address FF
' Call delay_MS_time(10)
' 'MsgBox " reply was " & MScomm1.input
' MSComm1.output=">FFK00049B" & Chr(13) 'TURN on bit three, opto22 address FF
' Call delay_MS_time(10)
' 'MsgBox " reply was " & MScomm1.input
'
' MSComm1.output=">FFK00089F" & Chr(13) 'TURN on bit four, opto22 address FF
' Call delay_MS_time(10)
' 'MsgBox " reply was " & MScomm1.input
'
' MSComm1.output=">FFL000199" & Chr(13) 'TURN OFF bit one, opto22 address FF
' Call delay_MS_time(10)
' 'MsgBox " reply was " & MScomm1.input
'
' MSComm1.output=">FFL00029A" & Chr(13) 'TURN off bit two, opto22 address FF
' Call delay_MS_time(10)
' 'MsgBox " reply was " & MScomm1.input
' MSComm1.output=">FFL00049C" & Chr(13) 'TURN off bit three, opto22 address FF
' Call delay_MS_time(10)
' 'MsgBox " reply was " & MScomm1.input
'
' MSComm1.output=">FFL0008A0" & Chr(13) 'TURN off bit four, opto22 address FF
' Call delay_MS_time(10)
' 'MsgBox " reply was " & MScomm1.input
MSComm1.PortOpen = False
Set MSComm1 = Nothing
End Sub
Private Sub delay_MS_time(MsDelay)
Dim time_out As Double
time_out = MsDelay + timeGetTime()
Do Until time_out <= timeGetTime()
' the delay for the steppers accel/decell
Loop
End Sub
Navigation
[0] Message Index
Go to full version