|
|
发表于 2019-9-16 19:00:35
来自手机
|
显示全部楼层
laomaotao 发表于 2019-01-28 09:45
, U2 K, k8 X/ C9 L7 q; _本帖最后由 laomaotao 于 2019-1-28 10:27 编辑
) b/ V7 S- M: k$ W) ]6 Z% E) r% b9 h R
7 L) |+ g$ b9 z' r+ T$ V# [这是一个mach3的空白插件工程。有了这个你可以自己开发自己的mach3 接口板。其实并口是最稳定的。操作系统可以把并口当做GPIO来操作。现在淘宝上卖的卡都是大部分通过开发插件来实现USB接口的。大部分都是ARM+FPGA架构的或是你这种板架构的。这个贴在别的站发过现在搬来这里给你研究。& } @# `5 H% h0 a& z
有了这个插件可以做二次开发。开发自己的控制板自己的modbus控制卡总之mach3的所以变量都可以引用,然后通过串口,usb等输出给控制卡。在控制卡上可以做自己的控制算法。或是把mach3电脑端运算的数据给下位机,下位机只负责输出脉冲。把产生的.dll文件放在MACH3的plugs文件夹里激活它。就可以了。- m3 ]# }& j" X0 Z. n
下面是mach3手轮的设计思想,给你研究。我去年研究后还做了个手轮的usb接口板手轮的编码器用最便宜点的2块钱的都没问题。你如果掌握了控制这个技术可以给你节约很多成本。而且可以灵活开发,也可以买板子优惠大家。现在本人主要是做脱机控制器现在精力都在这里。本来可以上传所以制作资料无奈老电脑打不开。更多资料到MACH3官网下载和参考。# r5 W* P3 Q3 u* h! ~& y M; p: i
6 S! @2 ^0 ]4 P3 V* G" b; _9 f) F8 _
2 Z1 q4 F# k6 `" ^3 [
关于Mach3 modbus有两种方式一种是通过Plug-in方式,这种方式要开发插件读取Modbus设备的数据,这种方式可以掌控整个Mach3的所有变量。这里不做说明。现在要说的是另外的一种方式——即非插件方式的自动查询方式(Autopoller)。这种方式会定时发送数据请求报文。Modbus设备把数据准备好给mach3读取。下图就是mach3 modbus 非插件方式的设设置。这种设置下地址进行了从映射
* b# f2 ^& A' i) {: f' c% p2 G5 B" ^9 ?
' Y2 S0 B& R1 d3 m; u! E上图就是这种映射只要和modbus设备通信正常后就能轻松的通过TEST MODBUS得到modbus设备的数据。或是用vb来调试, x( S; S$ m m {; i5 e) K; I
列如:A=GetInput(64) MsgBox"A="&A就能得到数据。
9 U3 `( o* a! k: [ q( u2 x这里是一个modbus手轮的宏程序。
. b) a. s7 \* @, M( B) m# P1 ?' Macropump developed for Peach Hill MPG Set
$ y1 w% ]2 U. p# O/ P" ~( W' Based on Hofmann MODIO Panel
$ i4 K( o6 l4 `( H' Objective to give Remote Pendant based, Axis, Step, Feed Over ride, Via Analogue inputs 1,2 &3" ?+ v1 A4 ?& E" o
' Step and Direction from Mechanical MPG Using I/P 6 &73 F; a0 x! I& F( R) {, p" z7 ~6 c
' In addition Digital I/Ps for E-Stop,Digital Dig 0 normally closed push button$ E8 x7 b/ q6 A9 K- y5 j
' Digital 1 & 2 via center off 3 pos switch Jog On/Off, and Shuttle Off/On
! g: t2 x$ z$ i3 O) U% z# w' Jog mode thru Analog In 1% W6 y/ Y' K# j' F* Y9 D. V
' Jog step val thru Analog In 2
" Y3 u4 m: O' m0 q u' Jog speed over ride thru Analog In 32 n5 s# P3 n! R9 Q! L- K
' E-Stop via Port 0 Pin 0 no Software required: t: F+ J$ W3 X6 g
+ J% i: X! ], U! Q7 W
MPGAxis = Getinput ( 64 ) 'analog input 1 on ModIO! `" r& ]: P, z$ o A( Q3 v
Select Case MPGAxis
; I+ l6 W/ g) @" W( ?! NCase <85
% c* I% t9 o# R5 p( b9 N' ~! D 'do nothing
. J% N- i1 M# Q. g State = 09 w: p9 _/ H5 T# p
Case < 277 3 \ u2 Z* S7 `6 E* A. a
If GetOEMLED ( 14 ) = 0 Then 'If not set to continuous Jog Mode3 O6 F/ T) h( H" E" w- O: |
DoOEMButton ( 276 ) 'Set jog to Continuous
H6 J3 l3 i2 D. k8 m/ ?8 w8 G0 |; ? End If
- k8 W6 |6 r& Z6 d @* k: ~ ^ State = 1
( B; z/ T/ q9 [7 ]Case <490. i n0 j' W* \4 }8 ~
If GetOEMLED ( 15 ) = 0 Then 'If not set to Step Jog Mode [! }; p: N0 Y) @9 N/ l' u
DoOEMButton ( 275 ) 'Set jog to Continuous1 j; R# W# `4 } N. X& L
End If
/ q# D2 A8 Q3 Y' f% [ State = 2 ( f% b* F" t. ~! _
Case <707- X, ^4 S+ u0 b2 ^
If GetOEMLED ( 57 ) = 0 Then 'If not set to MPG Jog Mode2 m! O2 t( o/ c0 z
DoOEMButton ( 306 ) 'Set jog to MPG0 T; T' m$ w+ M, ^5 ?
End If; s9 m C$ b+ j5 D" a9 w: Z) u7 ?$ C
If GetOEMLED ( 59 ) = 0 Then
0 E9 T( {' |' R: r; J2 v+ a, ^! o DoOEMButton ( 185 ) 'Set MPG to Jog X
$ I) H' Y6 Q9 K6 a D& X, k End If
2 B# g6 p# }, ] State = 3 2 }! E% N s6 Y3 K. [
Case <919! O& f. i1 G' j( O( p
If GetOEMLED ( 57 ) = 0 Then 'If not set to MPG Jog Mode
4 B; t5 R* T4 g0 @% X+ m! M DoOEMButton ( 306 ) 'Set jog to MPG# w6 J$ k9 C4 s9 L% f
End If
/ C$ W6 }# T/ e If GetOEMLED ( 60 ) = 0 Then
9 e8 A9 D/ r( N7 r ? DoOEMButton ( 186 ) 'Set MPG to Jog Y0 V ]6 |) y( ^
End If
/ t& O& s3 t, d- a- y State = 4
. w `; @. u/ e$ R% I- v6 N9 }3 GCase >919
" T4 b0 l3 }1 s1 G \$ y If GetOEMLED ( 57 ) = 0 Then 'If not set to MPG Jog Mode
* G$ j( v0 L( g2 L% F1 W DoOEMButton ( 306 ) 'Set jog to MPG c7 B" S& x( a" w
End If! \0 G" I% W/ F
If GetOEMLED ( 61 ) = 0 Then8 T; A) k$ B: n0 r9 k4 w$ m8 C
DoOEMButton ( 187 ) 'Set MPG to Jog Z
& o* a* F. W0 L& \0 Q# R* x8 E" l7 V End If
3 Z5 G6 z$ u: |8 ?5 G& } State = 5( t2 H5 @: Z1 e' X# `! Q/ P* w
End Select % R/ r V$ b+ n! z
# x7 j7 x* g4 s7 ^8 I
' Logic for setting Jog Ammounts thru Analog In 2+ D, A0 ?1 I- u! _
JOGInc = Getinput ( 65 ) 'analog input 2 on ModIO) r$ `7 e* y0 _
Select Case JOGInc
3 ~5 z3 T3 f% ^7 ^' ACase <2567 P: o, l4 u* u$ m
If GetOEMLED ( 57 ) <> 0 Then 'If is set Jog Step
* a) A2 R* m$ Y' }" C3 x DoOEMButton ( 265 ) 'Set Step to 1mm; K& k# D$ B0 B: S& C
End If, O6 B0 T; Q \+ F: E8 r, u- v; S
Case <714* g7 L1 K' m6 Q# |. Z/ Q; j
If GetOEMLED ( 57 ) <> 0 Then 'If is set Jog Step
8 B: M+ q9 i/ E* }2 P9 K' F DoOEMButton ( 266 ) 'Set Step to 0.1mm: W1 I& W8 k/ u5 n# e. _2 O: u
End If% [; N7 g0 r0 j4 r1 p
Case >714
: p% b. B0 U: i3 u If GetOEMLED ( 57 ) <> 0 Then 'If is set Jog Step
# ]8 d4 |0 V, D. U DoOEMButton ( 267 ) 'Set Step to 0.01mm
" R% w" a t) o End If5 Y4 U, v3 o2 t7 _
End Select . `# w( u5 ~6 n! V- W
' Setting Feedrate Over rate from Analogue 3
8 Y; l2 V/ _3 b4 F; V3 L! DOption Explicit
; |9 u4 i5 p9 {Dim fro As Integer9 j: j+ A: S3 N" L
4 G. w" y5 ?1 O5 {# v# \% I7 @. }Const Input3Sig = 18& u# ^; K# t H+ J8 S/ k4 f
; ?8 ^% }+ }& O- [
fro = GetInput ( 66 ) Z9 [, x6 c3 W( Z% T
fro = (fro * 195.0)/1024.07 t& v, l. z) Q; W9 H& M n3 h
SetDRO 21, FRO+58 c& [7 v3 {4 N0 c" o1 J2 t
'3 a& ^& D- W$ C. x# d V
Rem DRO display On ModIO
' g8 R% r9 I4 l( p; B- I( m' B, j$ X'0 K$ f+ a# ]' y$ F
Option Explicit, l0 d s4 t" |: L1 r1 O1 t
Dim Display As String
8 r( W' _ m9 Q& c% GDim SVal As String5 X" Z* \& J7 B2 ]
Dim iCount As Integer
9 E+ G, d, z Y/ g/ F! DDim iBase As Integer
0 U) Z. p) ]* X8 W7 ]Dim strMode (6) As String+ O* Q/ }) h( G# ~! ?0 s9 l
' S0 ], d8 i5 y0 v5 r. d
Const slave = 6 ' Default config
1 N# T( p4 d* Y4 q6 I, MConst NoAxesToDisplay = 4
! ? t" U# C" `; I2 AIf GetLED (1) Then strMode (0) = " inch" Else strMode (0) = " mm"'Added extra space 3 x$ | b# j% e8 a; Z% J
If getOEMLED (16) Then strMode (1) ="<m/c>" Else strMode (1) =" "'coord sys Extra Space' @- h2 r/ c, I* W; I
If GetOEMLED (83) Then strMode (2) =" " Else strMode (2) = " NoJog"3 v9 w, L$ {% v% K
If GetLED (0) Then strMode (3) = " EStop" Else strMode (3) = " "
2 c J9 n+ k5 w) q, UstrMode (4) = " "
. j: D% F0 a) ostrMode (5) = " "
1 P6 V$ s5 P @7 v8 LDisplay =""
& a+ X7 a0 j/ z6 o1 V GFor iCount = 0 To NoAxesToDisplay - 1
: P0 `; g9 ]* M1 N SVal = Right (" " & Format (GetDro (iCount), "+0.0000;-0.0000"), 11)
- k- K8 v1 _9 a6 e) [ If iCount < 3 Then 'X, Y, Z5 v4 |' J& L- f# M
iBase = Asc ("X")2 G1 z' B. F' J
Else 'A, B, C' f3 o" L- D3 R) m, M3 x
iBase = Asc ("A") - 3
- u5 b" s/ w4 p1 F! k End If- A$ g. d7 m. B* w( C( b
Display = Display & " " & Chr (iBase + iCount) & SVal & " " & StrMode (iCount)
2 A8 g0 e7 ]% _* ZNext iCount) F# Q( ~$ H" p0 L$ G% C! K
SetModIOString (slave, 0, 0, Display)& j: s1 f9 B E/ t% m
5 l" S! ^$ j- a* C* B/ F这个程序接收来自MODBUS的三个寄存器的输入用来改变(Jog mode thru Analog In 17 ]4 \; v Q1 u* R8 ~0 Z
' Jog step val thru Analog In 2 ' Jog speed over ride thru Analog In 3)。和DRO的输出给MODBUS手轮显示坐标值。
9 V9 @8 x+ z$ s% I4 S6 @! Q这个和数控的宏程序不一样呀,是c语言的吧 |
|