Import LinuxCNC source tree
This commit is contained in:
284
configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial
Executable file
284
configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial
Executable file
@@ -0,0 +1,284 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Rolf Redford, Nov 2018
|
||||
|
||||
#import libraries
|
||||
from vismach import *
|
||||
import hal
|
||||
import math
|
||||
import sys
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------------------------
|
||||
# Starting and defining
|
||||
|
||||
# used for diameter for versions less than 2.8.
|
||||
# it gives us way to access variable values from vismach script.
|
||||
import linuxcnc
|
||||
s = linuxcnc.stat()
|
||||
s.poll()
|
||||
|
||||
# Here is where we define pins that linuxcnc will send
|
||||
# data to, in order to make movements.
|
||||
# We will need 5 pins, 3 for motion and 2 for tool stats.
|
||||
# tooldiameter isn't really used but if you are using 2.8 you can make couple changes
|
||||
# in this file, and uncomment last line in HAL file.
|
||||
# add joints. Mill has 3.
|
||||
c = hal.component("3axis-tutorial")
|
||||
c.newpin("jointX", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("jointY", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("jointZ", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
|
||||
# tool length and diameter pins?
|
||||
c.newpin("toollength", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("tooldiameter", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
|
||||
# tells loadusr pins is ready
|
||||
c.ready()
|
||||
|
||||
# Used for tool cylinder
|
||||
# it will be updated in shape and length by function below.
|
||||
toolshape = CylinderZ(0)
|
||||
toolshape = Color([1, .5, .5, .5],[toolshape])
|
||||
|
||||
# updates tool cylinder shape.
|
||||
class HalToolCylinder(CylinderZ):
|
||||
def __init__(self, comp, *args):
|
||||
# get machine access so it can
|
||||
# change itself as it runs
|
||||
# specifically tool cylinder in this case.
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
def coords(self):
|
||||
# update data - not needed if using 2.8 and self.comp["tooldiameter"]
|
||||
# 2.7 does not have direct pin for diameter so this is workaround. commented out code is direct way to do it.
|
||||
# s.poll() # 2.8 don't need this, comment out if using 2.8.
|
||||
# get diameter and divide by 2 to get radius.
|
||||
# rad = ( s.tool_table[s.tool_in_spindle].diameter ) # 2.7 workaround
|
||||
rad = ( self.comp["tooldiameter"] ) # 2.8 only
|
||||
rad = rad / 2 # change to rad
|
||||
# this instantly updates tool model but tooltip doesn't move till -
|
||||
# tooltip, the drawing point will NOT move till g43h(tool number) is called, however.
|
||||
# Tool will "crash" if h and tool length does not match.
|
||||
leng = s.tool_table[s.tool_in_spindle].zoffset
|
||||
# Update tool length when g43h(toolnumber) is called, otherwise stays at 0 or previous size.
|
||||
# commented out as I prefer machine to show actual tool size right away.
|
||||
#leng = self.comp["toollength"]
|
||||
return (-leng, rad, 0, rad)
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------------------------
|
||||
# Concept of machine design
|
||||
|
||||
# The model follows logical tree design - picture the tree, with branch and smaller branches off it
|
||||
# if you move the larger branch, smaller branches will move with it, but if you move smaller branch larger will not.
|
||||
#
|
||||
# Machine design follows that conceptal design, so for example if you move X, it can move on its own, but if you move Y,
|
||||
# it will also move X assembly, as it is attached to Y assembly.
|
||||
# so for this machine, tree looks like this:
|
||||
|
||||
# model
|
||||
# |
|
||||
# |---frame
|
||||
# | |
|
||||
# | |---base
|
||||
# | |
|
||||
# | |---column
|
||||
# | |
|
||||
# | |---top
|
||||
# |
|
||||
# |
|
||||
# |---yassembly
|
||||
# | |
|
||||
# | |
|
||||
# | |---xassembly
|
||||
# | | |
|
||||
# | | |
|
||||
# | | |---xbase
|
||||
# | | |
|
||||
# | | |---work
|
||||
# | |
|
||||
# | |
|
||||
# | |---ybase
|
||||
# |
|
||||
# |
|
||||
# |---zassembly
|
||||
# |
|
||||
# |
|
||||
# |---zframe
|
||||
# | |
|
||||
# | |---zbody
|
||||
# | |
|
||||
# | |---spindle
|
||||
# |
|
||||
# |
|
||||
# |---toolassembly
|
||||
# |
|
||||
# |---cat30
|
||||
# |
|
||||
# |---tool
|
||||
# |
|
||||
# |---tooltip
|
||||
# |
|
||||
# |---(tool cylinder function)
|
||||
|
||||
# As you can see, lowest parts must exist first before it can be grouped with others into assembly.
|
||||
# So you build upwards from lowest point in tree and assembly them together.
|
||||
# Same is applicable for any design of machine. Look at machine arm example and you will see that it starts
|
||||
# with tip and adds to larger part of arm then it finally groups with base.
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------------------------
|
||||
# Starting with fixed frame
|
||||
|
||||
# start creating base itself, floor and column for z. box is centered on 0,0,0
|
||||
base = BoxCentered(200, 560, 20)
|
||||
# translate it so top of base is at zero
|
||||
base = Translate([base], 0,0,-10)
|
||||
|
||||
# column, attached to base on side.
|
||||
# Box() accepts extents
|
||||
# ie -100 to 100 is 200 wide, and rightmost is at -100 on coord.
|
||||
# Box(x rightmost, y futherest, z lowest, x leftmost, y nearest, z highest)
|
||||
column = Box( -60, -260, 0, 60, -200, 400)
|
||||
|
||||
# add block on top
|
||||
# not really needed, but I like how it looks with it.
|
||||
# bare column looks little bit strange for some reason.
|
||||
top = Box(-80,-280,400, 80,-160,440)
|
||||
|
||||
# now fuse it into "frame"
|
||||
frame = Collection([base, column, top])
|
||||
# color it grayish
|
||||
frame = Color([.8,.8,.8,1],[frame])
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------------------------
|
||||
# Moving parts section
|
||||
|
||||
# Start with X, Y then finally Z with tool and spindle.
|
||||
|
||||
# X table addition
|
||||
xbase = BoxCentered(1000,200,30)
|
||||
# let's color it blue
|
||||
xbase = Color([0,0,1,1], [xbase])
|
||||
# Move table so top is at zero for now,
|
||||
# so work (default 0,0,0) is on top of table.
|
||||
xbase = Translate([xbase], 0,0, -15)
|
||||
|
||||
# now create work which would be defined by Linuxcnc.
|
||||
# I suspect we would need to define shape but not enough is known.
|
||||
# for now just create an point that would be bottom center of stock.
|
||||
work = Capture()
|
||||
|
||||
# group work and xbase together so they move together.
|
||||
xassembly = Collection([xbase, work])
|
||||
# work is now defined and grouped, and default at 0,0,0, or
|
||||
# currently on top of x part table.
|
||||
# so we move table group upwards, taking work with it.
|
||||
xassembly = Translate([xassembly], 0,0, 35)
|
||||
|
||||
# Must define part motion before it becomes part of collection.
|
||||
# Must have arguments, object itself, c (defined above), then finally scale from the pin to x y z.
|
||||
# since this moves solely on X axis, only x is 1, rest is zero.
|
||||
# you could use fractions for say axis that moves in compound like arm for example
|
||||
# but this machine is very simple, so all axis will be purely full on axis and zero on other axis.
|
||||
xassembly = HalTranslate([xassembly], c, "jointX", 1, 0, 0)
|
||||
|
||||
# Y assembly creation
|
||||
ybase = BoxCentered(200, 200, 10)
|
||||
# colorize it green so we can see it separate from frame.
|
||||
ybase = Color([0,1,0,1], [ybase])
|
||||
# don't define translation for this one, as y also moves X table.
|
||||
# translating this would move itself alone. You want it to move X parts also.
|
||||
|
||||
# X table is moved by Y base, so we have to make X child of Y.
|
||||
# now define collection of ybase and xassembly.
|
||||
yassembly = Collection([ybase, xassembly])
|
||||
# define its motion first before translate.
|
||||
yassembly = HalTranslate([yassembly], c, "jointY", 0, 1, 0)
|
||||
# Now that translate is locked with part,
|
||||
# move it upwards so its on frame base.
|
||||
yassembly = Translate([yassembly], 0,0,5)
|
||||
|
||||
# spindle head
|
||||
# define small cylinder where tool will be attached to.
|
||||
# It is shallow, basically exposed end of "cat30" toolholder.
|
||||
# let's pretend machine uses cat30.
|
||||
cat30 = CylinderZ(0, 30, 20, 40) # cone wider top smaller bottom
|
||||
# color it red, as in danger, tool!
|
||||
cat30 = Color([1,0,0,1], [cat30])
|
||||
|
||||
# Define tool and grab such model information from linuxcnc
|
||||
# tooltip is initially in vismach "world" 0,0,0.
|
||||
# what it does is place where line drawing is in world, so
|
||||
# you can see where machine think tip of tool is.
|
||||
# first capture it, so we can use it and move it to where
|
||||
# defined end of tool is.
|
||||
tooltip = Capture()
|
||||
|
||||
# Now that we have tooltip, let's attach it to cylinder function (see above)
|
||||
# it creates cylinder then translates tooltip to end of it.
|
||||
tool = Collection([
|
||||
Translate([HalTranslate([tooltip], c, "toollength", 0, 0, -1)], 0, 0, 0),
|
||||
HalToolCylinder(toolshape)
|
||||
])
|
||||
|
||||
# Since tool is defined, lets attach it to cat30
|
||||
# Group cat30 and tooltip
|
||||
toolassembly = Collection([cat30, tool])
|
||||
# now that tool is properly attached, we can move it
|
||||
# and tool will "move" with it now.
|
||||
# BUT we need to build rest of head in such way that TOP of head is defined as Z zero.
|
||||
# Move it so it attaches to bottom of spindle body.
|
||||
toolassembly = Translate([toolassembly],0,0,-120)
|
||||
|
||||
# Start building Z assembly head, including spindle and support
|
||||
# top is at zero as I want top to be defined as Z home top.
|
||||
spindle = CylinderZ(-100, 60, 0, 60) # top is at zero
|
||||
# define rest of head using Box
|
||||
zbody = Box(-30, -200, 0, 30, 0, -100)
|
||||
|
||||
# fuse into z assembly
|
||||
zframe = Collection([zbody, spindle])
|
||||
# color it yellow
|
||||
zframe = Color([1,1,0,1], [zframe])
|
||||
|
||||
# Now that all parts are created, let's group it and finally make Z motion
|
||||
zassembly = Collection([zframe, toolassembly])
|
||||
# define Z motion
|
||||
zassembly = HalTranslate([zassembly], c, "jointZ", 0, 0, 1)
|
||||
# Now that motion is defined,
|
||||
# we can now move it to Z home position.
|
||||
zassembly = Translate([zassembly], 0,0, 400)
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------------------------
|
||||
# Getting it all together and finishing model
|
||||
|
||||
# Assembly everything into single model.
|
||||
# xassembly is already included into yassembly so don't need to include it.
|
||||
model = Collection([frame, yassembly, zassembly])
|
||||
|
||||
# Finally, call main() with parameter to let linuxcnc know.
|
||||
# parameter list:
|
||||
# final model name must include all parts you want to use
|
||||
# tooltip (special for tool tip inclusuion)
|
||||
# work (special for work part inclusion)
|
||||
# size of screen (bigger means more zoomed out to show more of machine)
|
||||
# last 2 is where view point source is.
|
||||
main(model, tooltip, work, 600, lat=-75, lon=215)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
71
configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal
Normal file
71
configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal
Normal file
@@ -0,0 +1,71 @@
|
||||
# core HAL config file for simulation
|
||||
|
||||
# first load all the RT modules that will be needed
|
||||
# kinematics
|
||||
loadrt [KINS]KINEMATICS
|
||||
#autoconverted trivkins
|
||||
# motion controller, get name and thread periods from ini file
|
||||
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
|
||||
# load 6 differentiators (for velocity and accel signals
|
||||
loadrt ddt names=ddt_x,ddt_xv,ddt_y,ddt_yv,ddt_z,ddt_zv
|
||||
# load additional blocks
|
||||
loadrt hypot names=vel_xy,vel_xyz
|
||||
|
||||
# add motion controller functions to servo thread
|
||||
addf motion-command-handler servo-thread
|
||||
addf motion-controller servo-thread
|
||||
# link the differentiator functions into the code
|
||||
addf ddt_x servo-thread
|
||||
addf ddt_xv servo-thread
|
||||
addf ddt_y servo-thread
|
||||
addf ddt_yv servo-thread
|
||||
addf ddt_z servo-thread
|
||||
addf ddt_zv servo-thread
|
||||
addf vel_xy servo-thread
|
||||
addf vel_xyz servo-thread
|
||||
|
||||
# create HAL signals for position commands from motion module
|
||||
# loop position commands back to motion module feedback
|
||||
net Xpos joint.0.motor-pos-cmd => joint.0.motor-pos-fb ddt_x.in
|
||||
net Ypos joint.1.motor-pos-cmd => joint.1.motor-pos-fb ddt_y.in
|
||||
net Zpos joint.2.motor-pos-cmd => joint.2.motor-pos-fb ddt_z.in
|
||||
|
||||
# send the position commands thru differentiators to
|
||||
# generate velocity and accel signals
|
||||
net Xvel ddt_x.out => ddt_xv.in vel_xy.in0
|
||||
net Xacc <= ddt_xv.out
|
||||
net Yvel ddt_y.out => ddt_yv.in vel_xy.in1
|
||||
net Yacc <= ddt_yv.out
|
||||
net Zvel ddt_z.out => ddt_zv.in vel_xyz.in0
|
||||
net Zacc <= ddt_zv.out
|
||||
|
||||
# Cartesian 2- and 3-axis velocities
|
||||
net XYvel vel_xy.out => vel_xyz.in1
|
||||
net XYZvel <= vel_xyz.out
|
||||
|
||||
# estop loopback
|
||||
net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in
|
||||
|
||||
loadusr -W hal_manualtoolchange
|
||||
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
|
||||
net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
|
||||
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
|
||||
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
|
||||
|
||||
# start 3axis-tutorial vismach addition
|
||||
loadusr -W ./3axis-tutorial
|
||||
|
||||
# "wire" linuxcnc pins to joints defined in vismach file
|
||||
net j0 joint.0.pos-fb => 3axis-tutorial.jointX
|
||||
net j1 joint.1.pos-fb => 3axis-tutorial.jointY
|
||||
net j2 joint.2.pos-fb => 3axis-tutorial.jointZ
|
||||
|
||||
#tool sinput
|
||||
net tool_len 3axis-tutorial.toollength <= motion.tooloffset.z
|
||||
net tool_rad halui.tool.diameter 3axis-tutorial.tooldiameter # Only in 2.8 or later
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
216
configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini
Normal file
216
configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini
Normal file
@@ -0,0 +1,216 @@
|
||||
# This config file was created 2018-11-21 06:26:44.941844 by the update_ini script
|
||||
# The original config files may be found in the /home/john/linuxcnc/configs/rolfmill/rolfmill.old directory
|
||||
|
||||
# EMC controller parameters for a simulated machine.
|
||||
|
||||
# General note: Comments can either be preceded with a # or ; - either is
|
||||
# acceptable, although # is in keeping with most linux config files.
|
||||
|
||||
# General section -------------------------------------------------------------
|
||||
[EMC]
|
||||
|
||||
|
||||
# Version of this INI file
|
||||
VERSION = 1.0
|
||||
|
||||
# Name of machine, for use with display, etc.
|
||||
MACHINE = 3axis-tutorial
|
||||
|
||||
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
|
||||
# DEBUG = 0x7FFFFFFF
|
||||
DEBUG = 0
|
||||
|
||||
# Sections for display options ------------------------------------------------
|
||||
[DISPLAY]
|
||||
|
||||
# Name of display program, e.g., xemc
|
||||
DISPLAY = axis
|
||||
|
||||
# Cycle time, in seconds, that display will sleep between polls
|
||||
CYCLE_TIME = 0.100
|
||||
|
||||
# Path to help file
|
||||
HELP_FILE = doc/help.txt
|
||||
|
||||
# Initial display setting for position, RELATIVE or MACHINE
|
||||
POSITION_OFFSET = RELATIVE
|
||||
|
||||
# Initial display setting for position, COMMANDED or ACTUAL
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
|
||||
# Highest value that will be allowed for feed override, 1.0 = 100%
|
||||
MAX_FEED_OVERRIDE = 1.2
|
||||
MAX_SPINDLE_OVERRIDE = 1.0
|
||||
# Prefix to be used
|
||||
PROGRAM_PREFIX =/home/rolf/linuxcnc/nc_files #need to change
|
||||
|
||||
# Introductory graphic
|
||||
INTRO_GRAPHIC = linuxcnc.gif
|
||||
INTRO_TIME = 5
|
||||
|
||||
#EDITOR = geany
|
||||
|
||||
INCREMENTS = 1 mm, .01 in, .1mm, 1 mil, .1 mil, 1/8000 in
|
||||
|
||||
[FILTER]
|
||||
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
|
||||
PROGRAM_EXTENSION = .py Python Script
|
||||
|
||||
png = image-to-gcode
|
||||
gif = image-to-gcode
|
||||
jpg = image-to-gcode
|
||||
py = python3
|
||||
|
||||
# Task controller section -----------------------------------------------------
|
||||
|
||||
[RS274NGC]
|
||||
|
||||
# File containing interpreter variables
|
||||
PARAMETER_FILE = 3axis-tutorial_mm.var
|
||||
|
||||
# Motion control section ------------------------------------------------------
|
||||
[EMCMOT]
|
||||
|
||||
|
||||
EMCMOT = motmod
|
||||
|
||||
# Timeout for comm to emcmot, in seconds
|
||||
COMM_TIMEOUT = 1.0
|
||||
|
||||
|
||||
# BASE_PERIOD is unused in this configuration but specified in core_sim.hal
|
||||
BASE_PERIOD = 0
|
||||
# Servo task period, in nano-seconds
|
||||
SERVO_PERIOD = 1000000
|
||||
|
||||
# Hardware Abstraction Layer section --------------------------------------------------
|
||||
[TASK]
|
||||
|
||||
# Name of task controller program, e.g., milltask
|
||||
TASK = milltask
|
||||
|
||||
# Cycle time, in seconds, that task controller will sleep between polls
|
||||
CYCLE_TIME = 0.001
|
||||
|
||||
# Part program interpreter section --------------------------------------------
|
||||
|
||||
[HAL]
|
||||
|
||||
# The run script first uses halcmd to execute any HALFILE
|
||||
# files, and then to execute any individual HALCMD commands.
|
||||
#
|
||||
|
||||
# list of hal config files to run through halcmd
|
||||
# files are executed in the order in which they appear
|
||||
HALFILE = 3axis-tutorial.hal
|
||||
|
||||
# list of halcmd commands to execute
|
||||
# commands are executed in the order in which they appear
|
||||
#HALCMD = save neta
|
||||
|
||||
# Single file that is executed after the GUI has started. Only supported by
|
||||
# AXIS at this time (only AXIS creates a HAL component of its own)
|
||||
#POSTGUI_HALFILE = test_postgui.hal
|
||||
|
||||
HALUI = halui
|
||||
|
||||
# Trajectory planner section --------------------------------------------------
|
||||
|
||||
[HALUI]
|
||||
#No Content
|
||||
|
||||
[TRAJ]
|
||||
|
||||
|
||||
AXES = 3
|
||||
COORDINATES = X Y Z
|
||||
HOME = 0 0 0
|
||||
LINEAR_UNITS = mm
|
||||
ANGULAR_UNITS = degree
|
||||
DEFAULT_LINEAR_VELOCITY = 30.48
|
||||
MAX_LINEAR_VELOCITY = 53.34
|
||||
DEFAULT_ACCELERATION = 508
|
||||
MAX_LINEAR_ACCELERATION = 508
|
||||
POSITION_FILE = position_mm.txt
|
||||
ARC_BLEND_ENABLE = 1
|
||||
ARC_BLEND_FALLBACK_ENABLE = 1
|
||||
ARC_BLEND_OPTIMIZATION_DEPTH = 50
|
||||
#Use this setting for no smoothing (for debugging and stress-testing)
|
||||
ARC_BLEND_SMOOTHING_THRESHOLD = .75
|
||||
#Use this setting for "normal" smoothing, i.e. if we blend over more than 40% of a segment
|
||||
#ARC_BLEND_SMOOTHING_THRESHOLD = 0.40
|
||||
|
||||
# Axes sections ---------------------------------------------------------------
|
||||
|
||||
[EMCIO]
|
||||
# tool table file
|
||||
TOOL_TABLE = tool.tbl
|
||||
TOOL_CHANGE_POSITION = 0 0 0
|
||||
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = trivkins
|
||||
#This is a best-guess at the number of joints, it should be checked
|
||||
JOINTS = 3
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -500.0
|
||||
MAX_LIMIT = 500.0
|
||||
MAX_VELOCITY = 25.0
|
||||
MAX_ACCELERATION = 750.0
|
||||
|
||||
[JOINT_0]
|
||||
|
||||
TYPE = LINEAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 25.0
|
||||
MAX_ACCELERATION = 750.0
|
||||
STEPGEN_MAXACCEL = 937.5
|
||||
SCALE = 80.0
|
||||
FERROR = 1
|
||||
MIN_FERROR = .25
|
||||
MIN_LIMIT = -500.0
|
||||
MAX_LIMIT = 500.0
|
||||
HOME_OFFSET = 0.0
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -100.0
|
||||
MAX_LIMIT = 100.0
|
||||
MAX_VELOCITY = 25.0
|
||||
MAX_ACCELERATION = 750.0
|
||||
|
||||
[JOINT_1]
|
||||
|
||||
TYPE = LINEAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 25.0
|
||||
MAX_ACCELERATION = 750.0
|
||||
STEPGEN_MAXACCEL = 937.5
|
||||
SCALE = 80.0
|
||||
FERROR = 1
|
||||
MIN_FERROR = .25
|
||||
MIN_LIMIT = -100.0
|
||||
MAX_LIMIT = 100.0
|
||||
HOME_OFFSET = 0.0
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -240.0
|
||||
MAX_LIMIT = 0.001
|
||||
MAX_VELOCITY = 25.0
|
||||
MAX_ACCELERATION = 750.0
|
||||
|
||||
[JOINT_2]
|
||||
|
||||
TYPE = LINEAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 25.0
|
||||
MAX_ACCELERATION = 750.0
|
||||
STEPGEN_MAXACCEL = 937.5
|
||||
SCALE = 80.0
|
||||
FERROR = 1
|
||||
MIN_FERROR = .25
|
||||
MIN_LIMIT = -240.0
|
||||
MAX_LIMIT = 0.001
|
||||
HOME_OFFSET = 0.0
|
||||
|
||||
# section for main IO controller parameters -----------------------------------
|
||||
2
configs/sim/axis/vismach/3axis-tutorial/README
Normal file
2
configs/sim/axis/vismach/3axis-tutorial/README
Normal file
@@ -0,0 +1,2 @@
|
||||
A simple vismach 3 axis mill example built using primitives.
|
||||
Comments is in 3axis-tutorial vismach file, and some in 3axis-tutorial.hal explains step by step the process to build.
|
||||
4
configs/sim/axis/vismach/3axis-tutorial/tool.tbl
Normal file
4
configs/sim/axis/vismach/3axis-tutorial/tool.tbl
Normal file
@@ -0,0 +1,4 @@
|
||||
T1 P1 Z12 D30 ;big
|
||||
T2 P2 Z50 D10 ;1/16 end mill
|
||||
T3 P3 Z50 D5 ;#7 tap drill
|
||||
T99999 P99999 Z0.1 ;big tool number
|
||||
200
configs/sim/axis/vismach/5axis/bridgemill/5axis.ini
Normal file
200
configs/sim/axis/vismach/5axis/bridgemill/5axis.ini
Normal file
@@ -0,0 +1,200 @@
|
||||
[EMC]
|
||||
VERSION = 1.1
|
||||
MACHINE = Sim-5Axis Bridge Mill (xyzbcw)
|
||||
DEBUG = 0
|
||||
|
||||
[DISPLAY]
|
||||
GEOMETRY = XYZCBW
|
||||
OPEN_FILE = ./5axisgui.ngc
|
||||
INCREMENTS = 10 mm, 1 mm, .1 mm
|
||||
JOG_AXES = XYZC
|
||||
DISPLAY = axis
|
||||
CYCLE_TIME = 0.200
|
||||
POSITION_OFFSET = RELATIVE
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
MAX_FEED_OVERRIDE = 2.0
|
||||
PROGRAM_PREFIX = ../../nc_files/
|
||||
INTRO_GRAPHIC = linuxcnc.gif
|
||||
INTRO_TIME = 5
|
||||
TOOL_EDITOR = tooledit z diam
|
||||
#EDITOR = geany
|
||||
PYVCP = 5axis.xml
|
||||
|
||||
[RS274NGC]
|
||||
SUBROUTINE_PATH = ./remap_subs
|
||||
HAL_PIN_VARS = 1
|
||||
REMAP = M428 modalgroup=10 ngc=428remap
|
||||
REMAP = M429 modalgroup=10 ngc=429remap
|
||||
REMAP = M430 modalgroup=10 ngc=430remap
|
||||
PARAMETER_FILE = 5axis.var
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
COMM_TIMEOUT = 1.0
|
||||
SERVO_PERIOD = 1000000
|
||||
|
||||
[TASK]
|
||||
TASK = milltask
|
||||
CYCLE_TIME = 0.010
|
||||
|
||||
[HAL]
|
||||
HALUI = halui
|
||||
HALFILE = LIB:basic_sim.tcl
|
||||
HALFILE = 5axisgui.hal
|
||||
HALCMD = net :kinstype-select <= motion.analog-out-03 => motion.switchkins-type
|
||||
POSTGUI_HALFILE = 5axis_postgui.hal
|
||||
|
||||
[HALUI]
|
||||
# M428:bridgemill (kinstype==0 startupDEFAULT)
|
||||
# M429:identity kins (kinstype==1)
|
||||
# M430:userk kins (kinstype==2)
|
||||
MDI_COMMAND = M428
|
||||
MDI_COMMAND = M429
|
||||
MDI_COMMAND = M430
|
||||
|
||||
[TRAJ]
|
||||
COORDINATES = XYZBCWY
|
||||
LINEAR_UNITS = mm
|
||||
ANGULAR_UNITS = degree
|
||||
MAX_ANGULAR_VELOCITY = 360.0
|
||||
DEFAULT_LINEAR_VELOCITY = 200.0
|
||||
MAX_LINEAR_VELOCITY = 346.0
|
||||
MAX_LINEAR_ACCELERATION = 800.0
|
||||
DEFAULT_LINEAR_ACCELERATION = 800.0
|
||||
|
||||
[EMCIO]
|
||||
TOOL_TABLE = 5axis.tbl
|
||||
|
||||
[KINS]
|
||||
# Note: Supported coordinates are XYZBCW but the W coordinate
|
||||
# motion is incorporated into the X,Y,Z axes.
|
||||
# Use of the W coordinate requires a joint (5)
|
||||
# in order to allow display of W values.
|
||||
# Use immediate homing for this joint (JOINT_5)
|
||||
# Note: 5axiskins is misnomer
|
||||
# (xyzbcw uses 6 joints)
|
||||
# (xyzbcwy uses 7 joints)
|
||||
|
||||
# xyzbcw
|
||||
# type0:5axiskins, type1:identity, type2:userk
|
||||
# x:joint0,y:joint1,z:joint2,b:joint3,c:joint4,w:joint5
|
||||
# JOINTS = 6
|
||||
# KINEMATICS = 5axiskins
|
||||
|
||||
# illustraed below is complex example with duplicate
|
||||
# coord letters for y, 7 joints total):
|
||||
# type0:5axiskins, type1:identity, type2:userk
|
||||
# x:joint0
|
||||
# y:joint1 AND joint6
|
||||
# z:joint2
|
||||
# b:joint3
|
||||
# c:joint4
|
||||
# w:joint5
|
||||
JOINTS = 7
|
||||
KINEMATICS = 5axiskins coordinates=xyzbcwy
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -500
|
||||
MAX_LIMIT = 500
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 800
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -500
|
||||
MAX_LIMIT = 500
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 800
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -500
|
||||
MAX_LIMIT = 100
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 800
|
||||
|
||||
# B is one-to-one to JOINT_3
|
||||
[AXIS_B]
|
||||
MIN_LIMIT = -120
|
||||
MAX_LIMIT = 120
|
||||
MAX_VELOCITY = 60
|
||||
MAX_ACCELERATION = 200
|
||||
|
||||
# C is one-to-one to JOINT_4
|
||||
[AXIS_C]
|
||||
MIN_LIMIT = -36000
|
||||
MAX_LIMIT = 36000
|
||||
MAX_VELOCITY = 60
|
||||
MAX_ACCELERATION = 200
|
||||
|
||||
# W motion is incorporated in Z motion
|
||||
# but a joint (JOINT_5) must be configured
|
||||
# to support display of W values
|
||||
[AXIS_W]
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 500
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 800
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 800
|
||||
MIN_LIMIT = -500
|
||||
MAX_LIMIT = 500
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 800
|
||||
MIN_LIMIT = -500
|
||||
MAX_LIMIT = 500
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = -1
|
||||
|
||||
# joints 1 and 6 used for y
|
||||
[JOINT_6]
|
||||
TYPE = LINEAR
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 800
|
||||
MIN_LIMIT = -500
|
||||
MAX_LIMIT = 500
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = -1
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 800
|
||||
MIN_LIMIT = -500
|
||||
MAX_LIMIT = 100
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_3]
|
||||
TYPE = ANGULAR
|
||||
MAX_VELOCITY = 60
|
||||
MAX_ACCELERATION = 200
|
||||
MIN_LIMIT = -120
|
||||
MAX_LIMIT = 120
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_4]
|
||||
TYPE = ANGULAR
|
||||
MAX_VELOCITY = 60
|
||||
MAX_ACCELERATION = 200
|
||||
MIN_LIMIT = -36000
|
||||
MAX_LIMIT = 36000
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
# immediate homing for JOINT_5 (w coordinate)
|
||||
[JOINT_5]
|
||||
TYPE = LINEAR
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 500
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 800
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
4
configs/sim/axis/vismach/5axis/bridgemill/5axis.tbl
Normal file
4
configs/sim/axis/vismach/5axis/bridgemill/5axis.tbl
Normal file
@@ -0,0 +1,4 @@
|
||||
T10 P10 Z10 D10
|
||||
T11 P11 Z11 D10
|
||||
T100 P100 Z100 D10
|
||||
T150 P150 Z150 D10
|
||||
128
configs/sim/axis/vismach/5axis/bridgemill/5axis.xml
Normal file
128
configs/sim/axis/vismach/5axis/bridgemill/5axis.xml
Normal file
@@ -0,0 +1,128 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<pyvcp>
|
||||
|
||||
<vbox>
|
||||
<relief>"ridge"</relief>
|
||||
<bd>5</bd>
|
||||
<label>
|
||||
<text>"SWITCHKINS"</text>
|
||||
<relief>RIDGE</relief>
|
||||
<bd>3</bd>
|
||||
</label>
|
||||
<multilabel>
|
||||
<legends>[" 0:BRIDGE ", "1:IDENTITY", " 2:USERK "]</legends>
|
||||
<font>("DejaVu Sans Mono",16)</font>
|
||||
<bg>"black"</bg>
|
||||
<fg>"yellow"</fg>
|
||||
</multilabel>
|
||||
<button>
|
||||
<halpin>"type0-button"</halpin>
|
||||
<text>"Brigemill"</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
<button>
|
||||
<halpin>"type1-button"</halpin>
|
||||
<text>"Identity "</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
<button>
|
||||
<halpin>"type2-button"</halpin>
|
||||
<text>"userk "</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<labelframe text="Joints values">
|
||||
<font>("Helvetica",14)</font>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"0: "</text>
|
||||
<font>("Helvetica",14)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint0"</halpin>
|
||||
<font>("Helvetica",14)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"1: "</text>
|
||||
<font>("Helvetica",14)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint1"</halpin>
|
||||
<font>("Helvetica",14)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"2: "</text>
|
||||
<font>("Helvetica",14)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint2"</halpin>
|
||||
<font>("Helvetica",14)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"3: "</text>
|
||||
<font>("Helvetica",14)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint3"</halpin>
|
||||
<font>("Helvetica",14)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"4: "</text>
|
||||
<font>("Helvetica",14)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint4"</halpin>
|
||||
<font>("Helvetica",14)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"5: "</text>
|
||||
<font>("Helvetica",14)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint5"</halpin>
|
||||
<font>("Helvetica",14)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"6: "</text>
|
||||
<font>("Helvetica",14)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint6"</halpin>
|
||||
<font>("Helvetica",14)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
</labelframe>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<relief>"ridge"</relief>
|
||||
<bd>5</bd>
|
||||
<button>
|
||||
<halpin>"vismach-clear"</halpin>
|
||||
<text>"vismach-clear"</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
</vbox>
|
||||
|
||||
</pyvcp>
|
||||
17
configs/sim/axis/vismach/5axis/bridgemill/5axis_postgui.hal
Normal file
17
configs/sim/axis/vismach/5axis/bridgemill/5axis_postgui.hal
Normal file
@@ -0,0 +1,17 @@
|
||||
net :kinstype.is-0 <= kinstype.is-0 => pyvcp.multilabel.0.legend0
|
||||
net :kinstype.is-1 <= kinstype.is-1 => pyvcp.multilabel.0.legend1
|
||||
net :kinstype.is-2 <= kinstype.is-2 => pyvcp.multilabel.0.legend2
|
||||
|
||||
net :type0-button <= pyvcp.type0-button => halui.mdi-command-00
|
||||
net :type1-button <= pyvcp.type1-button => halui.mdi-command-01
|
||||
net :type2-button <= pyvcp.type2-button => halui.mdi-command-02
|
||||
|
||||
net :jx => pyvcp.joint0
|
||||
net :jy => pyvcp.joint1
|
||||
net :jz => pyvcp.joint2
|
||||
net :jb => pyvcp.joint3
|
||||
net :jc => pyvcp.joint4
|
||||
net :jw => pyvcp.joint5
|
||||
net :jy2 => pyvcp.joint6
|
||||
|
||||
net :vismach-clear <= pyvcp.vismach-clear => vismach.plotclear
|
||||
32
configs/sim/axis/vismach/5axis/bridgemill/5axisgui.hal
Normal file
32
configs/sim/axis/vismach/5axis/bridgemill/5axisgui.hal
Normal file
@@ -0,0 +1,32 @@
|
||||
loadusr -W 5axisgui
|
||||
# to set different pivot_len, use:
|
||||
# 'loadusr -W 5axisgui pivot_len=value'
|
||||
|
||||
net :jx joint.0.pos-fb 5axisgui.jx
|
||||
net :jy joint.1.pos-fb 5axisgui.jy
|
||||
net :jz joint.2.pos-fb 5axisgui.jz
|
||||
net :jb joint.3.pos-fb 5axisgui.jb
|
||||
net :jc joint.4.pos-fb 5axisgui.jc
|
||||
net :jw joint.5.pos-fb
|
||||
net :jy2 joint.6.pos-fb
|
||||
|
||||
# Note: no joint or motor connections are used
|
||||
# for the w coordinate
|
||||
|
||||
# compute pivot-length needed for 5axiskins
|
||||
# according to gui pivot_len and tool z offset
|
||||
loadrt sum2 names=pivotsum
|
||||
addf pivotsum servo-thread
|
||||
|
||||
net :gui-pivot-len <= 5axisgui.pivot_len
|
||||
net :gui-pivot-len => pivotsum.in0
|
||||
|
||||
net :tool-len <= motion.tooloffset.z
|
||||
net :tool-len => pivotsum.in1
|
||||
net :tool-len => 5axisgui.tool_length
|
||||
|
||||
net :pivot-len <= pivotsum.out
|
||||
net :pivot-len => 5axiskins.pivot-length
|
||||
|
||||
net :tool-diam <= halui.tool.diameter
|
||||
net :tool-diam => 5axisgui.tool_diam
|
||||
53
configs/sim/axis/vismach/5axis/bridgemill/5axisgui.ngc
Normal file
53
configs/sim/axis/vismach/5axis/bridgemill/5axisgui.ngc
Normal file
@@ -0,0 +1,53 @@
|
||||
#<r> = 60 ; sphere radius
|
||||
#<rdelta> = 5 ; safe distance
|
||||
#<drilldepth> = -5
|
||||
#<zstart> = 0
|
||||
#<bctmax> = 8
|
||||
#<cctmax> = 16
|
||||
#<toolno> = 100
|
||||
#<frate> = 1000
|
||||
|
||||
#<bct> = 0
|
||||
#<cct> = 0
|
||||
#<cdelta> = [360/#<cctmax>]
|
||||
#<bdelta> = [90/#<bctmax>]
|
||||
|
||||
g49
|
||||
t#<toolno>m6g43
|
||||
|
||||
g53 g0 x0y0z#<zstart>b0c0 w0
|
||||
g10l20 p0 x0 y0 z[#<r>+#<rdelta>] b0 c0 w0
|
||||
g0 z0
|
||||
f#<frate>
|
||||
o100 while [#<bct> lt #<bctmax>]
|
||||
#<b> = [#<bct>*#<bdelta>]
|
||||
#<rnow> = [[#<r>+#<rdelta>]*[cos[#<b>]]]
|
||||
#<x> = [#<rnow>]
|
||||
#<y> = 0
|
||||
#<z> = [-#<rnow>]
|
||||
g0 x#<x> y#<y>
|
||||
m66e0l0 ; force sync
|
||||
g0 z#<z>
|
||||
g0b[-90+#<b>]
|
||||
#<cct> = 0
|
||||
o200 while [#<cct> lt #<cctmax>]
|
||||
o210 if [[#<bct> mod 2] eq 0]
|
||||
#<c> = [#<cct> * #<cdelta>]
|
||||
o210 else
|
||||
#<c> = [360 - [1+ #<cct>] * #<cdelta>]
|
||||
o210 endif
|
||||
#<x> = [#<rnow>*[cos[#<c>]]]
|
||||
#<y> = [#<rnow>*[sin[#<c>]]]
|
||||
g0 x#<x> y#<y> z#<z> c#<c>
|
||||
f#<frate>
|
||||
g1 w[ #<drilldepth> - #<rdelta>]
|
||||
g0 w0
|
||||
m66e0l0 ;force sync
|
||||
#<cct> = [#<cct>+1]
|
||||
o200 endwhile
|
||||
#<bct> = [#<bct>+1]
|
||||
o100 endwhile
|
||||
|
||||
g0x0y0z0b0c0w0
|
||||
g53 g0 x0y0z0
|
||||
m2
|
||||
38
configs/sim/axis/vismach/5axis/bridgemill/README
Normal file
38
configs/sim/axis/vismach/5axis/bridgemill/README
Normal file
@@ -0,0 +1,38 @@
|
||||
This is a simulation of an XYZBCWY 5 axis bridge mill.
|
||||
|
||||
Example demo:
|
||||
|
||||
1) $ linuxcnc 5axis.ini
|
||||
2) F1 ---------- Estop off
|
||||
F2 ---------- Machine on
|
||||
CTRL-HOME --- home all
|
||||
F5 ---------- MDI tab
|
||||
3) orient vismach gui as required
|
||||
4) g0w10 ; retract w
|
||||
5) g43h100 ; tool offset (100)
|
||||
6) g0b45 ; tilt 45 deg wrt z
|
||||
7) g0c30 ; rotate 30 deg in xy
|
||||
8) g0w-10 ; simulate drill
|
||||
9) g0w10 ; retract drill
|
||||
10) etc
|
||||
|
||||
Note: Motion for the W coordinate is incorporated
|
||||
into the motions of the joints used for X,Y,Z
|
||||
motion but a corresponding joint.5 is needed to
|
||||
correctly display W values.
|
||||
|
||||
The joint.5.motor-pos-cmd should be looped to the
|
||||
joint.5.motor-pos-fb and joint.5 should use immediate
|
||||
homimg (HOME_SEARCH_VEL = 0).
|
||||
|
||||
The 5axis.ini illustrates how to use multiple (2)
|
||||
joints for the axis y coordinate.
|
||||
|
||||
Configuration for XYZBCWY (7 joints total)
|
||||
J0: X
|
||||
J1: Y
|
||||
J2: Z
|
||||
J3: B
|
||||
J4: C
|
||||
J5: W
|
||||
J6: Y
|
||||
@@ -0,0 +1,24 @@
|
||||
;M428 by remap: select kinstype=0 genhexkins
|
||||
o<428remap>sub
|
||||
#<kinstype> = 0
|
||||
#<SWITCHKINS_PIN> = 3 ; set N as required: motion.analog-out-0N
|
||||
|
||||
o1 if [exists [#<_hal[motion.switchkins-type]>]]
|
||||
o1 else
|
||||
(debug,M428:Missing [RS274NGC]HAL_PIN_VARS=1)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o1 endif
|
||||
|
||||
M68 E#<SWITCHKINS_PIN> Q#<kinstype> ; set kinstype value
|
||||
M66 E0 L0 ; force synch
|
||||
|
||||
o2 if [[#<_task> EQ 1] AND [#<_hal[motion.switchkins-type]> NE #<kinstype>]]
|
||||
(debug,M428: Wrong motion.switchkins-type)
|
||||
(debug,or missing hal net to analog-out-0x)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o2 else
|
||||
o2 endif
|
||||
|
||||
o<428remap>endsub
|
||||
@@ -0,0 +1,24 @@
|
||||
;M429 by remap: select kinstype==1 Identity kinematics
|
||||
o<429remap>sub
|
||||
#<kinstype> = 1
|
||||
#<SWITCHKINS_PIN> = 3 ; set N as required: motion.analog-out-0N
|
||||
|
||||
o1 if [exists [#<_hal[motion.switchkins-type]>]]
|
||||
o1 else
|
||||
(debug,M429:Missing [RS274NGC]HAL_PIN_VARS=1)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o1 endif
|
||||
|
||||
M68 E#<SWITCHKINS_PIN> Q#<kinstype> ; set kinstype value
|
||||
M66 E0 L0 ; force synch
|
||||
|
||||
o2 if [[#<_task> EQ 1] AND [#<_hal[motion.switchkins-type]> NE #<kinstype>]]
|
||||
(debug,M429:Wrong motion.switchkins-type)
|
||||
(debug,or missing hal net to analog-out-0x)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o2 else
|
||||
o2 endif
|
||||
|
||||
o<429remap>endsub
|
||||
@@ -0,0 +1,24 @@
|
||||
;M430 by remap: select kinstype==2 userk kins
|
||||
o<430remap>sub
|
||||
#<kinstype> = 2
|
||||
#<SWITCHKINS_PIN> = 3 ; set N as required: motion.analog-out-0N
|
||||
|
||||
o1 if [exists [#<_hal[motion.switchkins-type]>]]
|
||||
o1 else
|
||||
(debug,M30:Missing [RS274NGC]HAL_PIN_VARS=1)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o1 endif
|
||||
|
||||
M68 E#<SWITCHKINS_PIN> Q#<kinstype> ; set kinstype value
|
||||
M66 E0 L0 ; force synch
|
||||
|
||||
o2 if [[#<_task> EQ 1] AND [#<_hal[motion.switchkins-type]> NE #<kinstype>]]
|
||||
(debug,M430:Wrong motion.switchkins-type)
|
||||
(debug,or missing hal net to analog-out-0x)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o2 else
|
||||
o2 endif
|
||||
|
||||
o<430remap>endsub
|
||||
10
configs/sim/axis/vismach/5axis/max5/README
Normal file
10
configs/sim/axis/vismach/5axis/max5/README
Normal file
@@ -0,0 +1,10 @@
|
||||
max5 5 axis XYZBC configs
|
||||
|
||||
|
||||
max5triv.ini -- implemented with trivkins
|
||||
|
||||
max5kins.ini -- implemented with max5 kinematics
|
||||
non-identity kinematics
|
||||
automatic teleop after homing
|
||||
|
||||
max5_base.inc -- shared settings
|
||||
4
configs/sim/axis/vismach/5axis/max5/max5.tbl
Normal file
4
configs/sim/axis/vismach/5axis/max5/max5.tbl
Normal file
@@ -0,0 +1,4 @@
|
||||
T1 P1 D0.125000 Z+0.511000 ;1/8 end mill
|
||||
T2 P2 D0.062500 Z+0.100000 ;1/16 end mill
|
||||
T3 P3 D0.201000 Z+1.273000 ;#7 tap drill
|
||||
T99999 P99999 Z+0.100000 ;big tool number
|
||||
159
configs/sim/axis/vismach/5axis/max5/max5_base.inc
Normal file
159
configs/sim/axis/vismach/5axis/max5/max5_base.inc
Normal file
@@ -0,0 +1,159 @@
|
||||
[MAX]
|
||||
# distance from the end of the "reference tool" (tool-length - 0) to the
|
||||
# center of the head tilt axis
|
||||
B_PIVOT_LENGTH = 0
|
||||
|
||||
|
||||
[DISPLAY]
|
||||
DISPLAY = axis
|
||||
CYCLE_TIME = 0.200
|
||||
POSITION_OFFSET = RELATIVE
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
MAX_FEED_OVERRIDE = 2.0
|
||||
PROGRAM_PREFIX = ../../nc_files/
|
||||
INTRO_GRAPHIC = linuxcnc.gif
|
||||
INTRO_TIME = 5
|
||||
EDITOR = gedit
|
||||
|
||||
[RS274NGC]
|
||||
PARAMETER_FILE = max5triv.var
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
COMM_TIMEOUT = 1.0
|
||||
SERVO_PERIOD = 1000000
|
||||
|
||||
[TASK]
|
||||
TASK = milltask
|
||||
CYCLE_TIME = 0.010
|
||||
|
||||
[TRAJ]
|
||||
COORDINATES = X Y Z B C
|
||||
LINEAR_UNITS = mm
|
||||
ANGULAR_UNITS = deg
|
||||
DEFAULT_LINEAR_VELOCITY = 200.0
|
||||
MAX_LINEAR_VELOCITY = 346.0
|
||||
MAX_LINEAR_ACCELERATION = 800.0
|
||||
DEFAULT_LINEAR_ACCELERATION = 800.0
|
||||
|
||||
[EMCIO]
|
||||
TOOL_TABLE = max5.tbl
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 200
|
||||
MAX_VELOCITY = 20.0
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_0]
|
||||
# this is the table
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 20.0
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 200
|
||||
HOME_OFFSET = 101.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 5.0
|
||||
HOME_IGNORE_LIMITS = YES
|
||||
HOME_SEQUENCE = 1
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -60
|
||||
MAX_LIMIT = 60
|
||||
MAX_VELOCITY = 20.0
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_1]
|
||||
# this is the saddle
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 20.0
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -60
|
||||
MAX_LIMIT = 60
|
||||
HOME_OFFSET = -61
|
||||
HOME_SEARCH_VEL = -20
|
||||
HOME_LATCH_VEL = -3
|
||||
HOME_IGNORE_LIMITS = YES
|
||||
HOME_SEQUENCE = 1
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -149.0
|
||||
MAX_LIMIT = 1.0
|
||||
MAX_VELOCITY = 20.0
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_2]
|
||||
# this is the head moving up and down the column
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 20.0
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -149.0
|
||||
MAX_LIMIT = 1.0
|
||||
HOME_OFFSET = 2.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 5.0
|
||||
HOME_IGNORE_LIMITS = YES
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[AXIS_A]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 45.0
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_3]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 45.0
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[AXIS_B]
|
||||
MIN_LIMIT = -90.0
|
||||
MAX_LIMIT = 90.0
|
||||
MAX_VELOCITY = 45.0
|
||||
MAX_ACCELERATION = 225.0
|
||||
|
||||
[JOINT_4]
|
||||
# this is the head tilting side to side
|
||||
TYPE = ANGULAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 45.0
|
||||
MAX_ACCELERATION = 225.0
|
||||
MIN_LIMIT = -90.0
|
||||
MAX_LIMIT = 90.0
|
||||
HOME_OFFSET = 91.0
|
||||
HOME_SEARCH_VEL = 25.0
|
||||
HOME_LATCH_VEL = 3.0
|
||||
HOME_IGNORE_LIMITS = YES
|
||||
HOME_SEQUENCE = 1
|
||||
|
||||
[AXIS_C]
|
||||
MIN_LIMIT = -3600.0
|
||||
MAX_LIMIT = 3600.0
|
||||
MAX_VELOCITY = 45.0
|
||||
MAX_ACCELERATION = 225.0
|
||||
|
||||
[JOINT_5]
|
||||
# this is a rotary table sitting on the main table
|
||||
TYPE = ANGULAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 45.0
|
||||
MAX_ACCELERATION = 225.0
|
||||
MIN_LIMIT = -3600.0
|
||||
MAX_LIMIT = 3600.0
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 3.0
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
HOME_SEQUENCE = 1
|
||||
112
configs/sim/axis/vismach/5axis/max5/max5kins.hal
Normal file
112
configs/sim/axis/vismach/5axis/max5/max5kins.hal
Normal file
@@ -0,0 +1,112 @@
|
||||
# HAL config file for vismach simulation of max5 - 9-axis version
|
||||
|
||||
# first load all the RT modules that will be needed
|
||||
# kinematics
|
||||
loadrt [KINS]KINEMATICS
|
||||
# motion controller, get name and thread periods from ini file
|
||||
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
|
||||
# load five limit3 blocks to simulate the accel and vel limits of the motors
|
||||
loadrt limit3 count=5
|
||||
# load window comparators for home/limit switches
|
||||
loadrt wcomp count=5
|
||||
loadrt not count=5
|
||||
|
||||
# load the vismach model
|
||||
loadusr -W max5gui
|
||||
|
||||
# set a visible tool
|
||||
#setp max5gui.tool-length 35
|
||||
setp max5gui.tool-radius 3
|
||||
net tool-len motion.tooloffset.w max5gui.tool-length
|
||||
|
||||
# add motion controller functions to servo thread
|
||||
addf motion-command-handler servo-thread
|
||||
addf motion-controller servo-thread
|
||||
# add other functions
|
||||
addf limit3.0 servo-thread
|
||||
addf limit3.1 servo-thread
|
||||
addf limit3.2 servo-thread
|
||||
addf limit3.3 servo-thread
|
||||
addf limit3.4 servo-thread
|
||||
addf wcomp.0 servo-thread
|
||||
addf wcomp.1 servo-thread
|
||||
addf wcomp.2 servo-thread
|
||||
addf wcomp.3 servo-thread
|
||||
addf wcomp.4 servo-thread
|
||||
addf not.0 servo-thread
|
||||
addf not.1 servo-thread
|
||||
addf not.2 servo-thread
|
||||
addf not.3 servo-thread
|
||||
addf not.4 servo-thread
|
||||
|
||||
# create HAL signals for position commands from motion module
|
||||
# send them to limit blocks so it will ferror if it exceeds a limit
|
||||
net table-pos-cmd joint.0.motor-pos-cmd => limit3.0.in
|
||||
net saddle-pos-cmd joint.1.motor-pos-cmd => limit3.1.in
|
||||
net head-pos-cmd joint.2.motor-pos-cmd => limit3.2.in
|
||||
net tilt-pos-cmd joint.4.motor-pos-cmd => limit3.3.in
|
||||
net rotate-pos-cmd joint.5.motor-pos-cmd => limit3.4.in
|
||||
|
||||
# set the limit block parameters from the ini file
|
||||
setp limit3.0.maxv [JOINT_0]MAX_VELOCITY
|
||||
setp limit3.0.maxa [JOINT_0]MAX_ACCELERATION
|
||||
setp limit3.1.maxv [JOINT_1]MAX_VELOCITY
|
||||
setp limit3.1.maxa [JOINT_1]MAX_ACCELERATION
|
||||
setp limit3.2.maxv [JOINT_2]MAX_VELOCITY
|
||||
setp limit3.2.maxa [JOINT_2]MAX_ACCELERATION
|
||||
setp limit3.3.maxv [JOINT_4]MAX_VELOCITY
|
||||
setp limit3.3.maxa [JOINT_4]MAX_ACCELERATION
|
||||
setp limit3.4.maxv [JOINT_5]MAX_VELOCITY
|
||||
setp limit3.4.maxa [JOINT_5]MAX_ACCELERATION
|
||||
|
||||
# loop limited position commands back to motion module feedback
|
||||
# also send them to the vismach model and to the "limit switches"
|
||||
net table-pos-fb limit3.0.out => joint.0.motor-pos-fb max5gui.table wcomp.0.in
|
||||
net saddle-pos-fb limit3.1.out => joint.1.motor-pos-fb max5gui.saddle wcomp.1.in
|
||||
net head-pos-fb limit3.2.out => joint.2.motor-pos-fb max5gui.head wcomp.2.in
|
||||
net tilt-pos-fb limit3.3.out => joint.4.motor-pos-fb max5gui.tilt wcomp.3.in
|
||||
net rotate-pos-fb limit3.4.out => joint.5.motor-pos-fb max5gui.rotate wcomp.4.in
|
||||
|
||||
# route home/limit switch signals to EMC
|
||||
net table-limits-ok wcomp.0.out => not.0.in
|
||||
net table-limits-tripped not.0.out => joint.0.neg-lim-sw-in joint.0.pos-lim-sw-in joint.0.home-sw-in
|
||||
net saddle-limits-ok wcomp.1.out => not.1.in
|
||||
net saddle-limits-tripped not.1.out => joint.1.neg-lim-sw-in joint.1.pos-lim-sw-in joint.1.home-sw-in
|
||||
net head-limits-ok wcomp.2.out => not.2.in
|
||||
net head-limits-tripped not.2.out => joint.2.neg-lim-sw-in joint.2.pos-lim-sw-in joint.2.home-sw-in
|
||||
net tilt-limits-ok wcomp.3.out => not.3.in
|
||||
net tilt-limits-tripped not.3.out => joint.4.neg-lim-sw-in joint.4.pos-lim-sw-in joint.4.home-sw-in
|
||||
net rotate-home-tripped wcomp.4.out => joint.5.home-sw-in
|
||||
|
||||
# set location of switches
|
||||
# these positions are in vismach coords - they can be are offset from machine coords
|
||||
# these hardware limits are set to allow 2mm more overall travel than the soft limits
|
||||
setp wcomp.0.min -101
|
||||
setp wcomp.0.max 101
|
||||
setp wcomp.1.min -101
|
||||
setp wcomp.1.max 21
|
||||
setp wcomp.2.min -96
|
||||
setp wcomp.2.max 57
|
||||
setp wcomp.3.min -91
|
||||
setp wcomp.3.max 91
|
||||
setp wcomp.4.min 90
|
||||
setp wcomp.4.max 100
|
||||
|
||||
# kins needs this value
|
||||
setp maxkins.pivot-length [MAX]B_PIVOT_LENGTH
|
||||
|
||||
# estop loopback
|
||||
net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in
|
||||
|
||||
# create signals for tool loading loopback
|
||||
net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
|
||||
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed
|
||||
|
||||
net spindle-fwd spindle.0.forward
|
||||
net spindle-rev spindle.0.reverse
|
||||
net spindle-speed spindle.0.speed-out
|
||||
|
||||
net flood iocontrol.0.coolant-flood
|
||||
net mist iocontrol.0.coolant-mist
|
||||
|
||||
net Aloop joint.3.motor-pos-cmd joint.3.motor-pos-fb
|
||||
14
configs/sim/axis/vismach/5axis/max5/max5kins.ini
Normal file
14
configs/sim/axis/vismach/5axis/max5/max5kins.ini
Normal file
@@ -0,0 +1,14 @@
|
||||
#INCLUDE max5_base.inc
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = maxkins
|
||||
JOINTS = 6
|
||||
|
||||
[HAL]
|
||||
HALFILE = max5kins.hal
|
||||
HALUI = halui
|
||||
|
||||
[EMC]
|
||||
VERSION = 1.1
|
||||
MACHINE = MAX5 with kinematics Simulation
|
||||
DEBUG = 0
|
||||
109
configs/sim/axis/vismach/5axis/max5/max5triv.hal
Normal file
109
configs/sim/axis/vismach/5axis/max5/max5triv.hal
Normal file
@@ -0,0 +1,109 @@
|
||||
# HAL config file for vismach simulation of max5 - trivkins version
|
||||
|
||||
# first load all the RT modules that will be needed
|
||||
# kinematics
|
||||
loadrt [KINS]KINEMATICS
|
||||
# motion controller, get name and thread periods from ini file
|
||||
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
|
||||
# load five limit3 blocks to simulate the accel and vel limits of the motors
|
||||
loadrt limit3 count=5
|
||||
# load window comparators for home/limit switches
|
||||
loadrt wcomp count=5
|
||||
loadrt not count=5
|
||||
|
||||
# load the vismach model
|
||||
loadusr -W max5gui
|
||||
|
||||
# set a visible tool
|
||||
setp max5gui.tool-radius 3
|
||||
# get tool length from motion controller
|
||||
net tool-len motion.tooloffset.z max5gui.tool-length
|
||||
|
||||
# add motion controller functions to servo thread
|
||||
addf motion-command-handler servo-thread
|
||||
addf motion-controller servo-thread
|
||||
# add other functions
|
||||
addf limit3.0 servo-thread
|
||||
addf limit3.1 servo-thread
|
||||
addf limit3.2 servo-thread
|
||||
addf limit3.3 servo-thread
|
||||
addf limit3.4 servo-thread
|
||||
addf wcomp.0 servo-thread
|
||||
addf wcomp.1 servo-thread
|
||||
addf wcomp.2 servo-thread
|
||||
addf wcomp.3 servo-thread
|
||||
addf wcomp.4 servo-thread
|
||||
addf not.0 servo-thread
|
||||
addf not.1 servo-thread
|
||||
addf not.2 servo-thread
|
||||
addf not.3 servo-thread
|
||||
addf not.4 servo-thread
|
||||
|
||||
# create HAL signals for position commands from motion module
|
||||
# send them to limit blocks so it will ferror if it exceeds a limit
|
||||
net table-pos-cmd joint.0.motor-pos-cmd => limit3.0.in
|
||||
net saddle-pos-cmd joint.1.motor-pos-cmd => limit3.1.in
|
||||
net head-pos-cmd joint.2.motor-pos-cmd => limit3.2.in
|
||||
net tilt-pos-cmd joint.4.motor-pos-cmd => limit3.3.in
|
||||
net rotate-pos-cmd joint.5.motor-pos-cmd => limit3.4.in
|
||||
|
||||
# set the limit block parameters from the ini file
|
||||
setp limit3.0.maxv [JOINT_0]MAX_VELOCITY
|
||||
setp limit3.0.maxa [JOINT_0]MAX_ACCELERATION
|
||||
setp limit3.1.maxv [JOINT_1]MAX_VELOCITY
|
||||
setp limit3.1.maxa [JOINT_1]MAX_ACCELERATION
|
||||
setp limit3.2.maxv [JOINT_2]MAX_VELOCITY
|
||||
setp limit3.2.maxa [JOINT_2]MAX_ACCELERATION
|
||||
setp limit3.3.maxv [JOINT_4]MAX_VELOCITY
|
||||
setp limit3.3.maxa [JOINT_4]MAX_ACCELERATION
|
||||
setp limit3.4.maxv [JOINT_5]MAX_VELOCITY
|
||||
setp limit3.4.maxa [JOINT_5]MAX_ACCELERATION
|
||||
|
||||
# loop limited position commands back to motion module feedback
|
||||
# also send them to the vismach model and to the "limit switches"
|
||||
net table-pos-fb limit3.0.out => joint.0.motor-pos-fb max5gui.table wcomp.0.in
|
||||
net saddle-pos-fb limit3.1.out => joint.1.motor-pos-fb max5gui.saddle wcomp.1.in
|
||||
net head-pos-fb limit3.2.out => joint.2.motor-pos-fb max5gui.head wcomp.2.in
|
||||
net tilt-pos-fb limit3.3.out => joint.4.motor-pos-fb max5gui.tilt wcomp.3.in
|
||||
net rotate-pos-fb limit3.4.out => joint.5.motor-pos-fb max5gui.rotate wcomp.4.in
|
||||
|
||||
# route home/limit switch signals to EMC
|
||||
net table-limits-ok wcomp.0.out => not.0.in
|
||||
net table-limits-tripped not.0.out => joint.0.neg-lim-sw-in joint.0.pos-lim-sw-in joint.0.home-sw-in
|
||||
net saddle-limits-ok wcomp.1.out => not.1.in
|
||||
net saddle-limits-tripped not.1.out => joint.1.neg-lim-sw-in joint.1.pos-lim-sw-in joint.1.home-sw-in
|
||||
net head-limits-ok wcomp.2.out => not.2.in
|
||||
net head-limits-tripped not.2.out => joint.2.neg-lim-sw-in joint.2.pos-lim-sw-in joint.2.home-sw-in
|
||||
net tilt-limits-ok wcomp.3.out => not.3.in
|
||||
net tilt-limits-tripped not.3.out => joint.4.neg-lim-sw-in joint.4.pos-lim-sw-in joint.4.home-sw-in
|
||||
net rotate-home-tripped wcomp.4.out => joint.5.home-sw-in
|
||||
|
||||
# set location of switches
|
||||
# these positions are in vismach coords - they can be are offset from machine coords
|
||||
# these hardware limits are set to allow 2mm more overall travel than the soft limits
|
||||
setp wcomp.0.min -101
|
||||
setp wcomp.0.max 101
|
||||
setp wcomp.1.min -101
|
||||
setp wcomp.1.max 21
|
||||
setp wcomp.2.min -96
|
||||
setp wcomp.2.max 57
|
||||
setp wcomp.3.min -91
|
||||
setp wcomp.3.max 91
|
||||
setp wcomp.4.min 90
|
||||
setp wcomp.4.max 100
|
||||
|
||||
# estop loopback
|
||||
net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in
|
||||
|
||||
# create signals for tool loading loopback
|
||||
net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
|
||||
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed
|
||||
|
||||
net spindle-fwd spindle.0.forward
|
||||
net spindle-rev spindle.0.reverse
|
||||
net spindle-speed spindle.0.speed-out
|
||||
|
||||
net flood iocontrol.0.coolant-flood
|
||||
net mist iocontrol.0.coolant-mist
|
||||
|
||||
net Aloop joint.3.motor-pos-cmd joint.3.motor-pos-fb
|
||||
14
configs/sim/axis/vismach/5axis/max5/max5triv.ini
Normal file
14
configs/sim/axis/vismach/5axis/max5/max5triv.ini
Normal file
@@ -0,0 +1,14 @@
|
||||
#INCLUDE max5_base.inc
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = trivkins coordinates=xyzabc
|
||||
JOINTS = 6
|
||||
|
||||
[HAL]
|
||||
HALFILE = max5triv.hal
|
||||
HALUI = halui
|
||||
|
||||
[EMC]
|
||||
VERSION = 1.1
|
||||
MACHINE = MAX5-trivkins Simulation
|
||||
DEBUG = 0
|
||||
42
configs/sim/axis/vismach/5axis/table-dual-rotary/README
Normal file
42
configs/sim/axis/vismach/5axis/table-dual-rotary/README
Normal file
@@ -0,0 +1,42 @@
|
||||
Switchable Table Dual Rotary (tdr) Sim config
|
||||
|
||||
xyzab-tdr (switchable kinematics)
|
||||
|
||||
|
||||
Demonstrations:
|
||||
|
||||
For a demonstration of XYZAB_TCP kinematics the user can run the preloaded demo gcode with the default offsets.
|
||||
|
||||
In the right hand panel of the axis gui sliders are provided to
|
||||
|
||||
- change the geometrical (x,z)-offsets as measured from the rotation-point of the A/B rotary-assembly to the
|
||||
face center of the rotary A table. The offsets are visibly adjusted in the vismach simulation and represented by a red indicator
|
||||
for the x-offset and a blue indicator for the z-offset.
|
||||
|
||||
- see the effects of misconfiguring the (x,y,z)-rot-point values used in the kinematics. These values represent the
|
||||
physical position of the rotary-assembly in the machine as measured from the machine home position to the rotation-point
|
||||
of the assembly. The rotation-point is identical to the intersection of the two rotational axes A and B when the (x,z)-offsets
|
||||
are zero. When (x,z)-offsets are applied the rotation-point stays on the rotational B axis. The 'rot-point' as set by
|
||||
these values as well as the true rotation-point of the rotary-assembly are indicated in the vismach simulation by a yellow cross
|
||||
and a red sphere respectively.
|
||||
|
||||
NOTE:
|
||||
For proper tool-path preview RELOAD THE CGODE after startup and after changing offset values.
|
||||
|
||||
|
||||
|
||||
***********************************************
|
||||
Note: IMPORTANT ini file requirements:
|
||||
|
||||
[HAL]
|
||||
HALCMD = net :kinstype-select <= motion.analog-out-0N => motion.switchkins-type
|
||||
|
||||
[RS274NGC]
|
||||
SUBROUTINE_PATH = ./remap_subs
|
||||
REMAP = M428 modalgroup=10 ngc=428remap
|
||||
REMAP = M429 modalgroup=10 ngc=429remap
|
||||
|
||||
[HALUI]
|
||||
MDI_COMMAND = M429
|
||||
MDI_COMMAND = M428
|
||||
***********************************************
|
||||
@@ -0,0 +1,49 @@
|
||||
; -- RELOAD GCODE FOR PROPER TOOL-PATH PREVIEW --
|
||||
g21 g90 g49 g54
|
||||
; switch to identity mode
|
||||
m429
|
||||
; clear g54
|
||||
g10 l2 p0 x0 y0 z0 a0 b0
|
||||
; go to machine origin
|
||||
g53 g0 x0 y0 z0 a0 b0
|
||||
; set g54 for face center of rotary
|
||||
g10 l20 p0 x-[#<_hal[xyzab_tdr_kins.x-rot-point]>+#<_hal[xyzab_tdr_kins.x-offset]>] y-#<_hal[xyzab_tdr_kins.x-rot-point]> z-[#<_hal[xyzab_tdr_kins.z-rot-point]>+#<_hal[xyzab_tdr_kins.z-offset]>] a0 b0
|
||||
; load a tool
|
||||
M61 Q2 G43 H2
|
||||
; switch to tcp mode
|
||||
m428
|
||||
g0 b30
|
||||
; go to face center of rotary a
|
||||
g0 x0 y0 z0
|
||||
; show basic tcp functionality
|
||||
g0 x30 a180
|
||||
g0 x0 a0
|
||||
g0 b100
|
||||
g0 y-50
|
||||
g0 a90
|
||||
g0 b120
|
||||
g0 y0
|
||||
g0 a0 b30
|
||||
g0 x1
|
||||
; start with square
|
||||
f1000
|
||||
g0 y-30 z-30
|
||||
g1 z30
|
||||
g1 a45
|
||||
g1 y30
|
||||
g1 a90 b45
|
||||
g1 z-30
|
||||
g1 a180 b100
|
||||
g1 y30
|
||||
g1 a90 b120
|
||||
g1 y-30
|
||||
g1 a0 b30
|
||||
g0 x5
|
||||
g1 y-30 z-30 a90
|
||||
g1 z30 a45 b60
|
||||
g1 y30 a90 b90
|
||||
g1 z-30 a135 b120
|
||||
g1 y-30 a0 b30
|
||||
; go to machine origin
|
||||
g53 g0 x0 y0 z0 a0 b0
|
||||
m2
|
||||
@@ -0,0 +1,24 @@
|
||||
;M428 by remap: kinstype==1 (xyzac,xyzbc) (note: sparm=identityfirst)
|
||||
o<428remap>sub
|
||||
#<kinstype> = 1 ; xyzac,xyzbc
|
||||
#<SWITCHKINS_PIN> = 3 ; set N as required: motion.analog-out-0N
|
||||
|
||||
o1 if [exists [#<_hal[motion.switchkins-type]>]]
|
||||
o1 else
|
||||
(debug,M428:Missing [RS274NGC]HAL_PIN_VARS=1)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o1 endif
|
||||
|
||||
M68 E#<SWITCHKINS_PIN> Q#<kinstype> ; set kinstype value
|
||||
M66 E0 L0 ; force synch
|
||||
|
||||
o2 if [[#<_task> EQ 1] AND [#<_hal[motion.switchkins-type]> NE #<kinstype>]]
|
||||
(debug,M428: Wrong motion.switchkins-type)
|
||||
(debug,or missing hal net to analog-out-0x)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o2 else
|
||||
o2 endif
|
||||
|
||||
o<428remap>endsub
|
||||
@@ -0,0 +1,24 @@
|
||||
;M429 by remap: kinstype==0 Identity kinematics
|
||||
o<429remap>sub
|
||||
#<kinstype> = 0
|
||||
#<SWITCHKINS_PIN> = 3 ; set N as required: motion.analog-out-0N
|
||||
|
||||
o1 if [exists [#<_hal[motion.switchkins-type]>]]
|
||||
o1 else
|
||||
(debug,M429:Missing [RS274NGC]HAL_PIN_VARS=1)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o1 endif
|
||||
|
||||
M68 E#<SWITCHKINS_PIN> Q#<kinstype> ; set kinstype value
|
||||
M66 E0 L0 ; force synch
|
||||
|
||||
o2 if [[#<_task> EQ 1] AND [#<_hal[motion.switchkins-type]> NE #<kinstype>]]
|
||||
(debug,M429:Wrong motion.switchkins-type)
|
||||
(debug,or missing hal net to analog-out-0x)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o2 else
|
||||
o2 endif
|
||||
|
||||
o<429remap>endsub
|
||||
@@ -0,0 +1,23 @@
|
||||
# switchkins pyvcp connections for:
|
||||
# xyzab-tdr-kins.ini
|
||||
|
||||
net :kinstype.is-0 <= kinstype.is-0 => pyvcp.multilabel.0.legend0
|
||||
net :kinstype.is-1 <= kinstype.is-1 => pyvcp.multilabel.0.legend1
|
||||
|
||||
net :vismach-clear <= pyvcp.vismach-clear => vismach.plotclear
|
||||
|
||||
net :type0-button <= pyvcp.type0-button => halui.mdi-command-00
|
||||
net :type1-button <= pyvcp.type1-button => halui.mdi-command-01
|
||||
|
||||
net :axis-x => pyvcp.joint0
|
||||
net :axis-y => pyvcp.joint1
|
||||
net :axis-z => pyvcp.joint2
|
||||
net :rotary-a => pyvcp.joint3
|
||||
net :rotary-b => pyvcp.joint4
|
||||
|
||||
net :x-offset => pyvcp.x-offset-f
|
||||
net :z-offset => pyvcp.z-offset-f
|
||||
net :x-rot-point => pyvcp.x-rot-point-f
|
||||
net :y-rot-point => pyvcp.y-rot-point-f
|
||||
net :z-rot-point => pyvcp.z-rot-point-f
|
||||
|
||||
183
configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr.ini
Normal file
183
configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr.ini
Normal file
@@ -0,0 +1,183 @@
|
||||
[EMC]
|
||||
VERSION = 1.1
|
||||
MACHINE = sim-xyzab-tdr-kins (switchkins)
|
||||
|
||||
[DISPLAY]
|
||||
GEOMETRY = XYZA-B
|
||||
OPEN_FILE = ./demos/xyzab-tdr-demo.ngc
|
||||
PYVCP = ./xyzab-tdr.xml
|
||||
DISPLAY = axis
|
||||
MAX_ANGULAR_VELOCITY = 360
|
||||
MAX_LINEAR_VELOCITY = 1000
|
||||
POSITION_OFFSET = RELATIVE
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
MAX_FEED_OVERRIDE = 2
|
||||
PROGRAM_PREFIX = ../../nc_files
|
||||
INTRO_GRAPHIC = emc2.gif
|
||||
INTRO_TIME = 1
|
||||
TOOL_EDITOR = tooledit z diam
|
||||
|
||||
[RS274NGC]
|
||||
SUBROUTINE_PATH = ./remap_subs
|
||||
REMAP = M428 modalgroup=10 ngc=428remap
|
||||
REMAP = M429 modalgroup=10 ngc=429remap
|
||||
PARAMETER_FILE = xyzab-tdr.var
|
||||
|
||||
[KINS]
|
||||
#NOTE:
|
||||
# switchkins-type == 0 is identity kins
|
||||
# switchkins-type == 1 is xyzab-tdr-kins
|
||||
|
||||
KINEMATICS = xyzab_tdr_kins
|
||||
JOINTS = 5
|
||||
|
||||
[HAL]
|
||||
HALUI = halui
|
||||
HALFILE = LIB:basic_sim.tcl
|
||||
POSTGUI_HALFILE = xyzab-tdr-postgui.hal
|
||||
|
||||
# net for control of motion.switchkins-type
|
||||
HALCMD = net :kinstype-select <= motion.analog-out-03 => motion.switchkins-type
|
||||
|
||||
# Values '(x,z)-offsets' for geometric offset of the rotary-assembly and the
|
||||
# values '(x,y,z)-rot-point' that describe the position of the
|
||||
# rotation-point of the rotary-assembly can be changed using the sliders
|
||||
# in the axis-gui.
|
||||
# Default values (initval) and ranges (min,max) are set
|
||||
# in the corresponding 'scale' sections in the file 'xyzab-tdr.xml'
|
||||
|
||||
# vismach xyzab-tdr-gui items
|
||||
HALCMD = loadusr -W xyzab-tdr-gui
|
||||
HALCMD = net :axis-x joint.0.pos-fb xyzab-tdr-gui.axis-x
|
||||
HALCMD = net :axis-y joint.1.pos-fb xyzab-tdr-gui.axis-y
|
||||
HALCMD = net :axis-z joint.2.pos-fb xyzab-tdr-gui.axis-z
|
||||
HALCMD = net :rotary-a joint.3.pos-fb xyzab-tdr-gui.rotary-a
|
||||
HALCMD = net :rotary-b joint.4.pos-fb xyzab-tdr-gui.rotary-b
|
||||
HALCMD = net :tool-offset motion.tooloffset.z xyzab-tdr-gui.tool_length
|
||||
HALCMD = net :tool-diam halui.tool.diameter xyzab-tdr-gui.tool_diameter
|
||||
HALCMD = net :x-offset xyzab-tdr-gui.x_offset
|
||||
HALCMD = net :z-offset xyzab-tdr-gui.z_offset
|
||||
HALCMD = net :x-rot-point xyzab-tdr-gui.x-rot-point
|
||||
HALCMD = net :y-rot-point xyzab-tdr-gui.y-rot-point
|
||||
HALCMD = net :z-rot-point xyzab-tdr-gui.z-rot-point
|
||||
|
||||
# xyzab_tdr_kins items
|
||||
HALCMD = net :tool-offset xyzab_tdr_kins.tool-offset-z
|
||||
HALCMD = net :x-offset xyzab_tdr_kins.x-offset
|
||||
HALCMD = net :z-offset xyzab_tdr_kins.z-offset
|
||||
HALCMD = net :x-rot-point xyzab_tdr_kins.x-rot-point
|
||||
HALCMD = net :y-rot-point xyzab_tdr_kins.y-rot-point
|
||||
HALCMD = net :z-rot-point xyzab_tdr_kins.z-rot-point
|
||||
|
||||
# This is only used to preset the vismach model to the default values as set
|
||||
# in the xml scale widgets
|
||||
# These will be overwritten by the values in the xml
|
||||
HALCMD = sets :x-offset -20
|
||||
HALCMD = sets :z-offset -10
|
||||
|
||||
[HALUI]
|
||||
# M429:identity kins (motion.switchkins-type==0 startupDEFAULT)
|
||||
# M428:xyzab-tdr kins (motion.switchkins-type==1)
|
||||
MDI_COMMAND = M429
|
||||
MDI_COMMAND = M428
|
||||
|
||||
[TRAJ]
|
||||
COORDINATES = XYZAB
|
||||
LINEAR_UNITS = mm
|
||||
ANGULAR_UNITS = deg
|
||||
DEFAULT_LINEAR_VELOCITY = 20
|
||||
MAX_LINEAR_VELOCITY = 35
|
||||
MAX_LINEAR_ACCELERATION = 400
|
||||
DEFAULT_LINEAR_ACCELERATION = 300
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
SERVO_PERIOD = 1000000
|
||||
COMM_TIMEOUT = 1
|
||||
|
||||
[TASK]
|
||||
TASK = milltask
|
||||
CYCLE_TIME = 0.010
|
||||
|
||||
[EMCIO]
|
||||
TOOL_TABLE = xyzab-tdr.tbl
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -200
|
||||
MAX_LIMIT = 200
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -200
|
||||
MAX_LIMIT = 200
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -300
|
||||
MAX_LIMIT = 300
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_A]
|
||||
MIN_LIMIT = -3600
|
||||
MAX_LIMIT = 3600
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_B]
|
||||
MIN_LIMIT = -180
|
||||
MAX_LIMIT = 180
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -200
|
||||
MAX_LIMIT = 200
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -200
|
||||
MAX_LIMIT = 200
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -300
|
||||
MAX_LIMIT = 300
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_3]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -3600
|
||||
MAX_LIMIT = 3600
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_4]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -180
|
||||
MAX_LIMIT = 180
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
@@ -0,0 +1,4 @@
|
||||
T1 P1 D1
|
||||
T2 P2 Z30 D3
|
||||
T3 P3 Z40 D4
|
||||
T4 P4 Z50 D5
|
||||
325
configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr.xml
Normal file
325
configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr.xml
Normal file
@@ -0,0 +1,325 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<pyvcp>
|
||||
|
||||
<vbox>
|
||||
<relief>"ridge"</relief>
|
||||
<bd>5</bd>
|
||||
<multilabel>
|
||||
<legends>["0:IDENTITY", "1: XYZAB ", "2: USERK "]</legends>
|
||||
<font>("Helvetica",16)</font>
|
||||
<bg>"black"</bg>
|
||||
<fg>"yellow"</fg>
|
||||
</multilabel>
|
||||
<button>
|
||||
<halpin>"type0-button"</halpin>
|
||||
<text>"IDENTITY"</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
<button>
|
||||
<halpin>"type1-button"</halpin>
|
||||
<text>"TCP:XYZAB"</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
</vbox>
|
||||
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<labelframe text="Joint position">
|
||||
<font>("Helvetica",14)</font>
|
||||
<hbox>
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"0: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint0"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"1: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint1"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"2: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint2"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"3: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint3"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"4: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint4"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"5: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint5"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</hbox>
|
||||
</labelframe>
|
||||
</vbox>
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<relief>"ridge"</relief>
|
||||
<bd>5</bd>
|
||||
<button>
|
||||
<halpin>"vismach-clear"</halpin>
|
||||
<text>"vismach-clear"</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
</vbox>
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<labelframe text="Rotary Assembly Offset">
|
||||
<font>("Helvetica",14)</font>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"x-offset: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"15"</width>
|
||||
<halpin>"x-offset"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>-20</initval>
|
||||
<min_>-50</min_>
|
||||
<max_>50</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"z-offset: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"15"</width>
|
||||
<halpin>"z-offset"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>-10</initval>
|
||||
<min_>-50</min_>
|
||||
<max_>50</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" "</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"Use hover + mouse wheel to change values"</text>
|
||||
<font>("Helvetica",6)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</labelframe>
|
||||
</vbox>
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<labelframe text="Rotation Point Offset">
|
||||
<font>("Helvetica",14)</font>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" This should demonstrate that TCP kinematics\n require the 'rot-point' settings (yellow)\n to match the physical location\n of the rotation-point (red)."</text>
|
||||
<font>("Helvetica",8)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" "</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>"Physical location of rotation-point in the model\n in absolute machine coordinates:"</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" x: -50\n y: -50\n z: -100"</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" "</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>"these are also the correct 'rot-point' settings\n for this model"</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"x-rot-point: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"15"</width>
|
||||
<halpin>"x-rot-point"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>-50</initval>
|
||||
<min_>-55</min_>
|
||||
<max_>-45</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"y-rot-point: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"15"</width>
|
||||
<halpin>"y-rot-point"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>-50</initval>
|
||||
<min_>-55</min_>
|
||||
<max_>-45</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"z-rot-point: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"15"</width>
|
||||
<halpin>"z-rot-point"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>-100</initval>
|
||||
<min_>-105</min_>
|
||||
<max_>-95</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" "</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"Use hover + mouse wheel to change values"</text>
|
||||
<font>("Helvetica",6)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</labelframe>
|
||||
</vbox>
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" FOR PROPER TOOL-PATH PREVIEW \n RELOAD AND RESTART THE\n GCODE AFTER STARTUP AND\n AFTER CHANGING OFFSETS!"</text>
|
||||
<font>("Helvetica",9)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
</pyvcp>
|
||||
32
configs/sim/axis/vismach/5axis/table-rotary-tilting/README
Normal file
32
configs/sim/axis/vismach/5axis/table-rotary-tilting/README
Normal file
@@ -0,0 +1,32 @@
|
||||
Switchable Table Rotary/Tilting (trt) Sim configs
|
||||
|
||||
xyzac-trt-switchkins
|
||||
xyzbc-trt-switchkins
|
||||
|
||||
Demonstrations:
|
||||
demos/xyzac_switchkins.ngc
|
||||
demos/xyzac_switchkins_test_1.ngc
|
||||
demos/xyzac_switchkins_test_2.ngc
|
||||
demos/xyzac_switchkins_test_3.ngc
|
||||
demos/boat-xyzac.ngc
|
||||
demos/impeller-7bl-xyzac.ngc
|
||||
|
||||
demos/xyzbc_switchkins.ngc
|
||||
demos/boat-xyzbc.ngc
|
||||
|
||||
***********************************************
|
||||
Note: IMPORTANT ini file requirements:
|
||||
|
||||
[HAL]
|
||||
HALCMD = net :kinstype-select <= motion.analog-out-0N => motion.switchkins-type
|
||||
|
||||
[RS274NGC]
|
||||
SUBROUTINE_PATH = ./remap_subs
|
||||
REMAP = M428 modalgroup=10 ngc=428remap
|
||||
REMAP = M429 modalgroup=10 ngc=429remap
|
||||
|
||||
[HALUI]
|
||||
MDI_COMMAND = M429
|
||||
MDI_COMMAND = M428
|
||||
MDI_COMMAND = M430
|
||||
***********************************************
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
||||
; zmax zmin r frate n a b c dist
|
||||
o<xyzac_switchkins_sub> call [10] [5] [10][1000][3][20][0][45][20]
|
||||
m2
|
||||
@@ -0,0 +1,39 @@
|
||||
; for debugging, use mdi to set global #<_switchkins_debug>=1
|
||||
|
||||
#<FRATE>=1000
|
||||
M429
|
||||
G0 X0 Y0 Z0 A0 C0
|
||||
G0 C90 X10 Y0
|
||||
G1 F#<FRATE> Z2
|
||||
|
||||
M428
|
||||
G1 F#<FRATE> Z0
|
||||
|
||||
M429
|
||||
G1 F#<FRATE> Z2
|
||||
G0 C90 X0 Y10
|
||||
G1 F#<FRATE> Z0
|
||||
|
||||
M428
|
||||
G1 F#<FRATE> Z2
|
||||
|
||||
M429
|
||||
G1 F#<FRATE> Z0
|
||||
G0 C90 X10 Y30
|
||||
G1 F#<FRATE> Z2
|
||||
|
||||
M428
|
||||
G1 F#<FRATE> Z0
|
||||
|
||||
M429
|
||||
G1 F#<FRATE> Z2
|
||||
G0 C90 X30 Y10
|
||||
G1 F#<FRATE> Z0
|
||||
|
||||
M428
|
||||
G1 F#<FRATE> Z2
|
||||
M429
|
||||
G1 F#<FRATE> Z0
|
||||
|
||||
G0 X0 Y0 Z0 A0 C0
|
||||
M2
|
||||
@@ -0,0 +1,49 @@
|
||||
; for debugging, use mdi to set global #<_switchkins_debug>=1
|
||||
|
||||
#<FRATE>=1000
|
||||
M429 ;Trivkins
|
||||
G64 P0.01
|
||||
S1500 M3
|
||||
G0 X0 Y0 Z5 A0 C0
|
||||
G1 F#<FRATE> Z0
|
||||
G1 X20 Y0 F#<FRATE>
|
||||
|
||||
M428 ;XYZAC
|
||||
G1 C90
|
||||
G1 X20
|
||||
G1 Y20
|
||||
G1 X0
|
||||
G1 Y0
|
||||
G1 A20
|
||||
G1 X-20
|
||||
G1 Y-20
|
||||
G1 X0
|
||||
G1 Y0
|
||||
|
||||
(-------)
|
||||
G1 C45
|
||||
G1 X-15
|
||||
G1 Y15
|
||||
G1 X0
|
||||
G1 Y0
|
||||
G1 Y-15
|
||||
G1 X15
|
||||
G1 Y0
|
||||
G1 X0
|
||||
|
||||
(-------)
|
||||
G1 C90 X15
|
||||
G1 C180 Y15
|
||||
G1 C270 X0
|
||||
G1 C360 Y0
|
||||
G1 C0
|
||||
G1 C-90 X-15
|
||||
G1 C-180 Y-15
|
||||
G1 C-270 X0
|
||||
G1 C-360 Y0
|
||||
G1 Z5
|
||||
|
||||
M429 ;Trivkins
|
||||
|
||||
G1 X0 Y0 Z1 A0 C0
|
||||
M2
|
||||
@@ -0,0 +1,15 @@
|
||||
;# enable optional stop for m1
|
||||
m429 ;trivkins
|
||||
G0 X0 Y0 Z0 A0 C0
|
||||
G0 C90 X10 Y0
|
||||
G1 F1000 Z2
|
||||
(debug,A expect: 10 0 2) m1
|
||||
(debug,B expect: 10 0 2) m1
|
||||
m428 ;tcp
|
||||
(debug,C expect: 0 -10 2) m1
|
||||
g1f1000 z0
|
||||
(debug,D expect: 0 -10 0) m1
|
||||
(debug,E expect: 0 -10 0) m1
|
||||
m429 ;trivkins
|
||||
(debug,F expect: 10 0 0)
|
||||
m2
|
||||
@@ -0,0 +1,3 @@
|
||||
; zmax zmin r frate n a b c dist
|
||||
o<xyzbc_switchkins_sub> call [10] [5] [10][1000][3][0][20][45][20]
|
||||
m2
|
||||
@@ -0,0 +1,24 @@
|
||||
;M428 by remap: kinstype==1 (xyzac,xyzbc) (note: sparm=identityfirst)
|
||||
o<428remap>sub
|
||||
#<kinstype> = 1 ; xyzac,xyzbc
|
||||
#<SWITCHKINS_PIN> = 3 ; set N as required: motion.analog-out-0N
|
||||
|
||||
o1 if [exists [#<_hal[motion.switchkins-type]>]]
|
||||
o1 else
|
||||
(debug,M428:Missing [RS274NGC]HAL_PIN_VARS=1)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o1 endif
|
||||
|
||||
M68 E#<SWITCHKINS_PIN> Q#<kinstype> ; set kinstype value
|
||||
M66 E0 L0 ; force synch
|
||||
|
||||
o2 if [[#<_task> EQ 1] AND [#<_hal[motion.switchkins-type]> NE #<kinstype>]]
|
||||
(debug,M428: Wrong motion.switchkins-type)
|
||||
(debug,or missing hal net to analog-out-0x)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o2 else
|
||||
o2 endif
|
||||
|
||||
o<428remap>endsub
|
||||
@@ -0,0 +1,24 @@
|
||||
;M429 by remap: kinstype==0 Identity kinematics
|
||||
o<429remap>sub
|
||||
#<kinstype> = 0
|
||||
#<SWITCHKINS_PIN> = 3 ; set N as required: motion.analog-out-0N
|
||||
|
||||
o1 if [exists [#<_hal[motion.switchkins-type]>]]
|
||||
o1 else
|
||||
(debug,M429:Missing [RS274NGC]HAL_PIN_VARS=1)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o1 endif
|
||||
|
||||
M68 E#<SWITCHKINS_PIN> Q#<kinstype> ; set kinstype value
|
||||
M66 E0 L0 ; force synch
|
||||
|
||||
o2 if [[#<_task> EQ 1] AND [#<_hal[motion.switchkins-type]> NE #<kinstype>]]
|
||||
(debug,M429:Wrong motion.switchkins-type)
|
||||
(debug,or missing hal net to analog-out-0x)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o2 else
|
||||
o2 endif
|
||||
|
||||
o<429remap>endsub
|
||||
@@ -0,0 +1,24 @@
|
||||
;M430 by remap: kinstype==2 userk kins
|
||||
o<430remap>sub
|
||||
#<kinstype> = 2
|
||||
#<SWITCHKINS_PIN> = 3 ; set N as required: motion.analog-out-0N
|
||||
|
||||
o1 if [exists [#<_hal[motion.switchkins-type]>]]
|
||||
o1 else
|
||||
(debug,M430:Missing [RS274NGC]HAL_PIN_VARS=1)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o1 endif
|
||||
|
||||
M68 E#<SWITCHKINS_PIN> Q#<kinstype> ; set kinstype value
|
||||
M66 E0 L0 ; force synch
|
||||
|
||||
o2 if [[#<_task> EQ 1] AND [#<_hal[motion.switchkins-type]> NE #<kinstype>]]
|
||||
(debug,M430:Wrong motion.switchkins-type)
|
||||
(debug,or missing hal net to analog-out-0x)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o2 else
|
||||
o2 endif
|
||||
|
||||
o<430remap>endsub
|
||||
@@ -0,0 +1,42 @@
|
||||
(info: tests for values of [xyz]-rot-point)
|
||||
o<centering>sub
|
||||
#<xstart> = #1 (=-2.5)
|
||||
#<ystart> = #2 (=-2.5)
|
||||
#<xlen> = #3 (= 5)
|
||||
#<ylen> = #4 (= 5)
|
||||
#<zfinal> = #5 (=60)
|
||||
#<n> = #6 (=12)
|
||||
#<f> = #7 (=1000 feed)
|
||||
#<angle> = 0
|
||||
#<delta_angle> = [360/#<n>]
|
||||
|
||||
o1 if [exists [#<_hal[xyzac-trt-kins.x-rot-point]>]]
|
||||
(debug,x-rot-point=#<_hal[xyzac-trt-kins.x-rot-point]>)
|
||||
(debug,y-rot-point=#<_hal[xyzac-trt-kins.y-rot-point]>)
|
||||
(debug,z-rot-point=#<_hal[xyzac-trt-kins.z-rot-point]>)
|
||||
o1 endif
|
||||
o2 if [exists [#<_hal[xyzbc-trt-kins.x-rot-point]>]]
|
||||
(debug,x-rot-point=#<_hal[xyzbc-trt-kins.x-rot-point]>)
|
||||
(debug,y-rot-point=#<_hal[xyzbc-trt-kins.y-rot-point]>)
|
||||
(debug,z-rot-point=#<_hal[xyzac-trt-kins.z-rot-point]>)
|
||||
o2 endif
|
||||
|
||||
M429 ;Identity kinematics
|
||||
g0 x#<xstart> y#<ystart> z0 c0
|
||||
M428 ;tcp
|
||||
|
||||
g61
|
||||
o10 while [#<angle> le 360]
|
||||
g1 f#<f>
|
||||
#<angle> = [#<angle> + #<delta_angle>]
|
||||
g0 c#<angle>
|
||||
g1 x[#<xstart> + #<xlen>]
|
||||
g1 y[#<ystart> + #<ylen>]
|
||||
g1 x[#<xstart> + 0 ]
|
||||
g1 y[#<ystart> + 0 ]
|
||||
o10 endwhile
|
||||
|
||||
|
||||
M429 ;Identity kinematics
|
||||
g0 x0 y0 z#<zfinal> c0
|
||||
o<centering>endsub
|
||||
@@ -0,0 +1,22 @@
|
||||
; helix using switchkins (xyzac) a,c angles
|
||||
o<helix_ac>sub
|
||||
#<zmax> = #1 (=10)
|
||||
#<zmin> = #2 (= 5)
|
||||
#<r> = #3 (=10)
|
||||
#<frate> = #4 (=1000)
|
||||
#<n> = #5 (=3)
|
||||
#<a> = #6 (=45)
|
||||
#<b> = #7 (=0 NA)
|
||||
#<c> = #8 (=20)
|
||||
|
||||
M429 ;Identity kinematics
|
||||
g0 x[#<_x> - #<r>] ;adjust for radius
|
||||
g10l20p0 x0y0 z#<zmax> a0 c0 ;new g54
|
||||
M428 ;XYZAC
|
||||
g0a#<a>c#<c> ;exercise a,c
|
||||
f#<frate> g2i#<r>z#<zmin> p#<n> ;helix
|
||||
M429 ;Identity kinematics
|
||||
g0 x0 y0 z#<zmax> a0 c0 ;return to start
|
||||
g0 x[#<_x> + #<r>] ;adjust restore
|
||||
M428 ;XYZAC
|
||||
o<helix_ac>endsub
|
||||
@@ -0,0 +1,22 @@
|
||||
; helix using switchkins (xyzbc) b,c angles
|
||||
o<helix_bc>sub
|
||||
#<zmax> = #1 (=10)
|
||||
#<zmin> = #2 (= 5)
|
||||
#<r> = #3 (=10)
|
||||
#<frate> = #4 (=1000)
|
||||
#<n> = #5 (=3)
|
||||
#<a> = #6 (=0 NA)
|
||||
#<b> = #7 (=45)
|
||||
#<c> = #8 (=20)
|
||||
|
||||
M429 ;Identity kinematics
|
||||
g0 x[#<_x> - #<r>] ;adjust for radius
|
||||
g10l20p0 x0y0 z#<zmax> b0 c0 ;new g54
|
||||
M428 ;XYZBC
|
||||
g0b#<b>c#<c> ;exercise b,c
|
||||
f#<frate> g2i#<r>z#<zmin> p#<n> ;helix
|
||||
M429 ;Identity kinematics
|
||||
g0 x0 y0 z#<zmax> b0 c0 ;return to start
|
||||
g0 x[#<_x> + #<r>] ;adjust restore
|
||||
M428 ;XYZBC
|
||||
o<helix_bc>endsub
|
||||
@@ -0,0 +1,47 @@
|
||||
; ngcgui-compatible subroutine
|
||||
(info: helix in each quadrant at angles A,C)
|
||||
o<xyzac_switchkins_sub>sub
|
||||
#<zmax> = #1 (=10)
|
||||
#<zmin> = #2 (= 5)
|
||||
#<r> = #3 (=10 radius)
|
||||
#<frate> = #4 (=1000 feedrate)
|
||||
#<n> = #5 (=3 n circles)
|
||||
#<a> = #6 (=30 A angle)
|
||||
#<b> = #7 (=0 B angle NA)
|
||||
#<c> = #8 (=45 C angle)
|
||||
#<dist> = #9 (=20 distance)
|
||||
|
||||
; quadrant I
|
||||
M429 ;Identity kinematics
|
||||
g53 g0 x0y0 z#<zmax> a0 c0 ;MACHINE coordinates
|
||||
g10l20p0 x0y0 z#<zmax> a0 c0 ;new g54
|
||||
g0 x+#<dist> y+#<dist> z#<zmax> ;move to pattern center position
|
||||
o<helix_ac> call [#<zmax>][#<zmin>][#<r>][#<frate>][#<n>][#<a>][#<b>][#<c>]
|
||||
|
||||
; quadrant II
|
||||
M429 ;Identity kinematics
|
||||
g53 g0 x0y0 z#<zmax> a0 c0
|
||||
g10l20p0 x0y0 z#<zmax> a0 c0
|
||||
g0 x-#<dist> y+#<dist> z#<zmax>
|
||||
o<helix_ac> call [#<zmax>][#<zmin>][#<r>][#<frate>][#<n>][#<a>][#<b>][#<c>]
|
||||
|
||||
; quadrant III
|
||||
M429 ;Identity kinematics
|
||||
g53 g0 x0y0 z#<zmax> a0 c0
|
||||
g10l20p0 x0y0 z#<zmax> a0 c0
|
||||
g0 x-#<dist> y-#<dist> z#<zmax>
|
||||
o<helix_ac> call [#<zmax>][#<zmin>][#<r>][#<frate>][#<n>][#<a>][#<b>][#<c>]
|
||||
|
||||
; quadrant IV
|
||||
M429 ;Identity kinematics
|
||||
g53 g0 x0y0 z#<zmax> a0 c0
|
||||
g10l20p0 x0y0 z#<zmax> a0 c0
|
||||
g0 x+#<dist> y-#<dist> z#<zmax>
|
||||
o<helix_ac> call [#<zmax>][#<zmin>][#<r>][#<frate>][#<n>][#<a>][#<b>][#<c>]
|
||||
|
||||
;final position
|
||||
M429 ;Identity kinematics
|
||||
g53 g0 x0y0 z#<zmax> ;MACHINE coordinates
|
||||
g10l20p0 x0y0 z#<zmax> ;new g54
|
||||
|
||||
o<xyzac_switchkins_sub>endsub
|
||||
@@ -0,0 +1,47 @@
|
||||
; ngcgui-compatible subroutine
|
||||
(info: helix in each quadrant at angles B,C)
|
||||
o<xyzbc_switchkins_sub>sub
|
||||
#<zmax> = #1 (=10)
|
||||
#<zmin> = #2 (= 5)
|
||||
#<r> = #3 (=10 radius)
|
||||
#<frate> = #4 (=1000 feedrate)
|
||||
#<n> = #5 (=3 n circles)
|
||||
#<a> = #6 (=0 A angle NA)
|
||||
#<b> = #7 (=30 B angle)
|
||||
#<c> = #8 (=45 C angle)
|
||||
#<dist> = #9 (=20 distance)
|
||||
|
||||
; quadrant I
|
||||
M429 ;Identity kinematics
|
||||
g53 g0 x0y0 z#<zmax> b0 c0 ;MACHINE coordinates
|
||||
g10l20p0 x0y0 z#<zmax> b0 c0 ;new g54
|
||||
g0 x+#<dist> y+#<dist> z#<zmax> ;move to pattern center position
|
||||
o<helix_bc> call [#<zmax>][#<zmin>][#<r>][#<frate>][#<n>][#<a>][#<b>][#<c>]
|
||||
|
||||
; quadrant II
|
||||
M429 ;Identity kinematics
|
||||
g53 g0 x0y0 z#<zmax> b0 c0
|
||||
g10l20p0 x0y0 z#<zmax> b0 c0
|
||||
g0 x-#<dist> y+#<dist> z#<zmax>
|
||||
o<helix_bc> call [#<zmax>][#<zmin>][#<r>][#<frate>][#<n>][#<a>][#<b>][#<c>]
|
||||
|
||||
; quadrant III
|
||||
M429 ;Identity kinematics
|
||||
g53 g0 x0y0 z#<zmax> b0 c0
|
||||
g10l20p0 x0y0 z#<zmax> b0 c0
|
||||
g0 x-#<dist> y-#<dist> z#<zmax>
|
||||
o<helix_bc> call [#<zmax>][#<zmin>][#<r>][#<frate>][#<n>][#<a>][#<b>][#<c>]
|
||||
|
||||
; quadrant IV
|
||||
M429 ;Identity kinematics
|
||||
g53 g0 x0y0 z#<zmax> b0 c0
|
||||
g10l20p0 x0y0 z#<zmax> b0 c0
|
||||
g0 x+#<dist> y-#<dist> z#<zmax>
|
||||
o<helix_bc> call [#<zmax>][#<zmin>][#<r>][#<frate>][#<n>][#<a>][#<b>][#<c>]
|
||||
|
||||
;final position
|
||||
M429 ;Identity kinematics
|
||||
g53 g0 x0y0 z#<zmax> ;MACHINE coordinates
|
||||
g10l20p0 x0y0 z#<zmax> ;new g54
|
||||
|
||||
o<xyzbc_switchkins_sub>endsub
|
||||
@@ -0,0 +1,29 @@
|
||||
pin+motion.analog-out-03
|
||||
pin+motion.switchkins-type
|
||||
|
||||
pin+joint.0.pos-cmd
|
||||
pin+joint.1.pos-cmd
|
||||
pin+joint.2.pos-cmd
|
||||
pin+joint.3.pos-cmd
|
||||
pin+joint.4.pos-cmd
|
||||
|
||||
pin+axis.x.pos-cmd
|
||||
pin+axis.y.pos-cmd
|
||||
pin+axis.z.pos-cmd
|
||||
pin+axis.a.pos-cmd
|
||||
pin+axis.b.pos-cmd
|
||||
pin+axis.c.pos-cmd
|
||||
|
||||
pin+pyvcp.tcpkins-button
|
||||
pin+pyvcp.identitykins-button
|
||||
pin+pyvcp.vismach-clear
|
||||
|
||||
pin+kinstype-0
|
||||
pin+kinstype-1
|
||||
|
||||
pin+halui.mdi-command-00
|
||||
pin+halui.mdi-command-01
|
||||
|
||||
pin+kinstype.is-0
|
||||
pin+kinstype.is-1
|
||||
pin+kinstype.is-2
|
||||
@@ -0,0 +1,12 @@
|
||||
# switchkins pyvcp connections for:
|
||||
# xyzac-trt-kins.ini,xyzbc-trt-kins.ini
|
||||
|
||||
net :kinstype.is-0 <= kinstype.is-0 => pyvcp.multilabel.0.legend0
|
||||
net :kinstype.is-1 <= kinstype.is-1 => pyvcp.multilabel.0.legend1
|
||||
net :kinstype.is-2 <= kinstype.is-2 => pyvcp.multilabel.0.legend2
|
||||
|
||||
net :vismach-clear <= pyvcp.vismach-clear => vismach.plotclear
|
||||
|
||||
net :type0-button <= pyvcp.type0-button => halui.mdi-command-00
|
||||
net :type1-button <= pyvcp.type1-button => halui.mdi-command-01
|
||||
net :type2-button <= pyvcp.type2-button => halui.mdi-command-02
|
||||
@@ -0,0 +1,182 @@
|
||||
[APPLICATIONS]
|
||||
# uncomment to enable:
|
||||
#APP = halshow --fformat %.5f switchkins.halshow
|
||||
|
||||
[EMC]
|
||||
VERSION = 1.1
|
||||
MACHINE = sim-xyzac-trt-kins (switchkins)
|
||||
|
||||
[DISPLAY]
|
||||
GEOMETRY = XYZ-A
|
||||
OPEN_FILE = ./demos/xyzac_switchkins.ngc
|
||||
PYVCP = ./xyzac-trt.xml
|
||||
JOG_AXES = XYZC
|
||||
DISPLAY = axis
|
||||
MAX_ANGULAR_VELOCITY = 360
|
||||
MAX_LINEAR_VELOCITY = 1000
|
||||
POSITION_OFFSET = RELATIVE
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
MAX_FEED_OVERRIDE = 2
|
||||
PROGRAM_PREFIX = ../../nc_files
|
||||
INTRO_GRAPHIC = emc2.gif
|
||||
INTRO_TIME = 1
|
||||
#EDITOR = geany
|
||||
TOOL_EDITOR = tooledit z diam
|
||||
|
||||
TKPKG = Ngcgui 1.0
|
||||
NGCGUI_FONT = Helvetica -12 normal
|
||||
NGCGUI_SUBFILE = xyzac_switchkins_sub.ngc
|
||||
NGCGUI_SUBFILE = centering.ngc
|
||||
|
||||
[RS274NGC]
|
||||
SUBROUTINE_PATH = ./remap_subs
|
||||
HAL_PIN_VARS = 1
|
||||
REMAP = M428 modalgroup=10 ngc=428remap
|
||||
REMAP = M429 modalgroup=10 ngc=429remap
|
||||
REMAP = M430 modalgroup=10 ngc=430remap
|
||||
PARAMETER_FILE = xyzac.var
|
||||
|
||||
[KINS]
|
||||
#NOTE: for backwrds compatibility !!!!!!!!!!!!!!!!!!!
|
||||
# default switchkins-type == 0 is xyzac-trt-kins
|
||||
# here switchkins-type == 0 is identity kins
|
||||
KINEMATICS = xyzac-trt-kins sparm=identityfirst
|
||||
JOINTS = 5
|
||||
|
||||
[HAL]
|
||||
HALUI = halui
|
||||
HALFILE = LIB:basic_sim.tcl
|
||||
POSTGUI_HALFILE = switchkins_postgui.hal
|
||||
|
||||
# net for control of motion.switchkins-type
|
||||
HALCMD = net :kinstype-select <= motion.analog-out-03 => motion.switchkins-type
|
||||
|
||||
# vismach xyzac-trt-gui items
|
||||
HALCMD = loadusr -W xyzac-trt-gui
|
||||
HALCMD = net :table-x joint.0.pos-fb xyzac-trt-gui.table-x
|
||||
HALCMD = net :saddle-y joint.1.pos-fb xyzac-trt-gui.saddle-y
|
||||
HALCMD = net :spindle-z joint.2.pos-fb xyzac-trt-gui.spindle-z
|
||||
HALCMD = net :tilt-a joint.3.pos-fb xyzac-trt-gui.tilt-a
|
||||
HALCMD = net :rotate-c joint.4.pos-fb xyzac-trt-gui.rotate-c
|
||||
HALCMD = net :tool-offset motion.tooloffset.z
|
||||
HALCMD = net :tool-offset xyzac-trt-kins.tool-offset xyzac-trt-gui.tool-offset
|
||||
HALCMD = net :y-offset xyzac-trt-kins.y-offset xyzac-trt-gui.y-offset
|
||||
HALCMD = net :z-offset xyzac-trt-kins.z-offset xyzac-trt-gui.z-offset
|
||||
HALCMD = sets :y-offset 20
|
||||
HALCMD = sets :z-offset 10
|
||||
|
||||
# not currently supported by xyzac-trt-gui:
|
||||
HALCMD = setp xyzac-trt-kins.x-rot-point 0
|
||||
HALCMD = setp xyzac-trt-kins.y-rot-point 0
|
||||
HALCMD = setp xyzac-trt-kins.z-rot-point 0
|
||||
HALCMD = setp xyzac-trt-kins.conventional-directions 0
|
||||
|
||||
[HALUI]
|
||||
# NOTE: kinstype==0 is identity kins because sparm=identityfirst
|
||||
# M429:identity kins (motion.switchkins-type==0 startupDEFAULT)
|
||||
# M428:xyzac kins (motion.switchkins-type==1)
|
||||
# M430:userk kins (motion.switchkins-type==2)
|
||||
MDI_COMMAND = M429
|
||||
MDI_COMMAND = M428
|
||||
MDI_COMMAND = M430
|
||||
|
||||
[TRAJ]
|
||||
COORDINATES = XYZAC
|
||||
LINEAR_UNITS = mm
|
||||
ANGULAR_UNITS = deg
|
||||
DEFAULT_LINEAR_VELOCITY = 20
|
||||
MAX_LINEAR_VELOCITY = 35
|
||||
MAX_LINEAR_ACCELERATION = 400
|
||||
DEFAULT_LINEAR_ACCELERATION = 300
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
SERVO_PERIOD = 1000000
|
||||
COMM_TIMEOUT = 1
|
||||
|
||||
[TASK]
|
||||
TASK = milltask
|
||||
CYCLE_TIME = 0.010
|
||||
|
||||
[EMCIO]
|
||||
TOOL_TABLE = xyzac-trt.tbl
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -200
|
||||
MAX_LIMIT = 200
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 100
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -120
|
||||
MAX_LIMIT = 120
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_A]
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 50
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_C]
|
||||
MIN_LIMIT = -36000
|
||||
MAX_LIMIT = 36000
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -200
|
||||
MAX_LIMIT = 200
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 100
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -120
|
||||
MAX_LIMIT = 120
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_3]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 50
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_4]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -36000
|
||||
MAX_LIMIT = 36000
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
@@ -0,0 +1,10 @@
|
||||
T1 P1 Z0 D1 ;end mill
|
||||
T2 P2 Z15 D8 ;end mill
|
||||
T3 P3 Z0 D4.2 ;#7 tap drill
|
||||
T4 P4 Z0 D10
|
||||
T5 P5 Z30 D10
|
||||
T6 P6 Z30 D10
|
||||
T7 P7 Z30 D10
|
||||
T8 P8 Z30 D10
|
||||
T9 P9 Z30 D10
|
||||
T10 P10 D0.5
|
||||
@@ -0,0 +1,37 @@
|
||||
xyzac-trt-kins (switchkins)
|
||||
|
||||
Uses remapped user m codes for kins switch:
|
||||
|
||||
M429: Identity Kinematics
|
||||
M428: XYZAC (TCP)
|
||||
M430: userk Kinematics
|
||||
|
||||
A hal net is required to connect the
|
||||
analog out pin N, Example (for N=3):
|
||||
|
||||
net :kinstype-select <= motion.analog-out-03
|
||||
net :kinstype-select => motion.switchkins-type
|
||||
|
||||
Hal Input pins:
|
||||
xyzac-trt-kins.y-offset
|
||||
xyzac-trt-kins.z-offset
|
||||
|
||||
Y and Z offsets are the offsets from the center
|
||||
of rotation of the A axis relative to the center
|
||||
of rotation of the C axis.
|
||||
|
||||
Hal Input pins:
|
||||
xyzac-trt-kins.x-rot-point
|
||||
xyzac-trt-kins.y-rot-point
|
||||
xyzac-trt-kins.z-rot-point
|
||||
|
||||
X, Y and Z rot-point pins represent the
|
||||
offsets of the center of rotation of the C axis
|
||||
relative to the machine absolute zero
|
||||
|
||||
Hal Input pins:
|
||||
xyzac-trt-kins.conventional-directions
|
||||
|
||||
Pin conventional-directions is false by default. If true,
|
||||
axis directions follow the conventions as defined
|
||||
at https://linuxcnc.org/docs/html/gcode/machining-center.html#_rotational_axes
|
||||
@@ -0,0 +1,45 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<pyvcp>
|
||||
|
||||
<vbox>
|
||||
<relief>"ridge"</relief>
|
||||
<bd>5</bd>
|
||||
<label>
|
||||
<text>"SWITCHKINS"</text>
|
||||
<relief>RIDGE</relief>
|
||||
<bd>3</bd>
|
||||
</label>
|
||||
<multilabel>
|
||||
<legends>["0:IDENTITY", "1: XYZAC ", "2: USERK "]</legends>
|
||||
<font>("Helvetica",16)</font>
|
||||
<bg>"black"</bg>
|
||||
<fg>"yellow"</fg>
|
||||
</multilabel>
|
||||
<button>
|
||||
<halpin>"type0-button"</halpin>
|
||||
<text>"IDENTITY"</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
<button>
|
||||
<halpin>"type1-button"</halpin>
|
||||
<text>"TCP:XYZAC"</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
<button>
|
||||
<halpin>"type2-button"</halpin>
|
||||
<text>"userk "</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<relief>"ridge"</relief>
|
||||
<bd>5</bd>
|
||||
<button>
|
||||
<halpin>"vismach-clear"</halpin>
|
||||
<text>"vismach-clear"</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
</vbox>
|
||||
|
||||
</pyvcp>
|
||||
@@ -0,0 +1,182 @@
|
||||
[APPLICATIONS]
|
||||
# uncomment to enable:
|
||||
#APP = halshow --fformat %.5f switchkins.halshow
|
||||
|
||||
[EMC]
|
||||
VERSION = 1.1
|
||||
MACHINE = sim-xyzbc-trt-kins (switchkins)
|
||||
|
||||
[DISPLAY]
|
||||
GEOMETRY = XYZB
|
||||
OPEN_FILE = ./demos/xyzbc_switchkins.ngc
|
||||
PYVCP = ./xyzbc-trt.xml
|
||||
JOG_AXES = XYZC
|
||||
DISPLAY = axis
|
||||
MAX_ANGULAR_VELOCITY = 360
|
||||
MAX_LINEAR_VELOCITY = 1000
|
||||
POSITION_OFFSET = RELATIVE
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
MAX_FEED_OVERRIDE = 2
|
||||
PROGRAM_PREFIX = ../../nc_files
|
||||
INTRO_GRAPHIC = emc2.gif
|
||||
INTRO_TIME = 1
|
||||
#EDITOR = geany
|
||||
TOOL_EDITOR = tooledit z diam
|
||||
|
||||
TKPKG = Ngcgui 1.0
|
||||
NGCGUI_FONT = Helvetica -12 normal
|
||||
NGCGUI_SUBFILE = xyzbc_switchkins_sub.ngc
|
||||
NGCGUI_SUBFILE = centering.ngc
|
||||
|
||||
[RS274NGC]
|
||||
SUBROUTINE_PATH = ./remap_subs
|
||||
HAL_PIN_VARS = 1
|
||||
REMAP = M428 modalgroup=10 ngc=428remap
|
||||
REMAP = M429 modalgroup=10 ngc=429remap
|
||||
REMAP = M430 modalgroup=10 ngc=430remap
|
||||
PARAMETER_FILE = xyzbc.var
|
||||
|
||||
[KINS]
|
||||
#NOTE: for backwrds compatibility !!!!!!!!!!!!!!!!!!!
|
||||
# default switchkins-type == 0 is xyzbc-trt-kins
|
||||
# here switchkins-type == 0 is identity kins
|
||||
KINEMATICS = xyzbc-trt-kins sparm=identityfirst
|
||||
JOINTS = 5
|
||||
|
||||
[HAL]
|
||||
HALUI = halui
|
||||
HALFILE = LIB:basic_sim.tcl
|
||||
POSTGUI_HALFILE = switchkins_postgui.hal
|
||||
|
||||
# net for control of motion.switchkins-type
|
||||
HALCMD = net :kinstype-select <= motion.analog-out-03 => motion.switchkins-type
|
||||
|
||||
# vismach xyzbc-trt-gui items
|
||||
HALCMD = loadusr -W xyzbc-trt-gui
|
||||
HALCMD = net :table-x joint.0.pos-fb xyzbc-trt-gui.table-x
|
||||
HALCMD = net :saddle-y joint.1.pos-fb xyzbc-trt-gui.saddle-y
|
||||
HALCMD = net :spindle-z joint.2.pos-fb xyzbc-trt-gui.spindle-z
|
||||
HALCMD = net :tilt-b joint.3.pos-fb xyzbc-trt-gui.tilt-b
|
||||
HALCMD = net :rotate-c joint.4.pos-fb xyzbc-trt-gui.rotate-c
|
||||
HALCMD = net :tool-offset motion.tooloffset.z
|
||||
HALCMD = net :tool-offset xyzbc-trt-kins.tool-offset xyzbc-trt-gui.tool-offset
|
||||
HALCMD = net :x-offset xyzbc-trt-kins.x-offset xyzbc-trt-gui.x-offset
|
||||
HALCMD = net :z-offset xyzbc-trt-kins.z-offset xyzbc-trt-gui.z-offset
|
||||
HALCMD = sets :x-offset -20
|
||||
HALCMD = sets :z-offset -15
|
||||
|
||||
# not currently supported by xyzbc-trt-gui:
|
||||
HALCMD = setp xyzbc-trt-kins.x-rot-point 0
|
||||
HALCMD = setp xyzbc-trt-kins.y-rot-point 0
|
||||
HALCMD = setp xyzbc-trt-kins.z-rot-point 0
|
||||
HALCMD = setp xyzbc-trt-kins.conventional-directions 0
|
||||
|
||||
[HALUI]
|
||||
# NOTE: kinstype==0 is identity kins because sparm=identityfirst
|
||||
# M429:identity kins (motion.switchkins-type==0 startupDEFAULT)
|
||||
# M428:xyzbc kins (motion.switchkins-type==1)
|
||||
# M430:userk kins (motion.switchkins-type==2)
|
||||
MDI_COMMAND = M429
|
||||
MDI_COMMAND = M428
|
||||
MDI_COMMAND = M430
|
||||
|
||||
[TRAJ]
|
||||
COORDINATES = XYZBC
|
||||
LINEAR_UNITS = mm
|
||||
ANGULAR_UNITS = deg
|
||||
DEFAULT_LINEAR_VELOCITY = 20
|
||||
MAX_LINEAR_VELOCITY = 35
|
||||
MAX_LINEAR_ACCELERATION = 400
|
||||
DEFAULT_LINEAR_ACCELERATION = 300
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
SERVO_PERIOD = 1000000
|
||||
COMM_TIMEOUT = 1
|
||||
|
||||
[TASK]
|
||||
TASK = milltask
|
||||
CYCLE_TIME = 0.010
|
||||
|
||||
[EMCIO]
|
||||
TOOL_TABLE = xyzbc-trt.tbl
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -200
|
||||
MAX_LIMIT = 200
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 100
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -120
|
||||
MAX_LIMIT = 120
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_B]
|
||||
MIN_LIMIT = -36000
|
||||
MAX_LIMIT = 36000
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_C]
|
||||
MIN_LIMIT = -36000
|
||||
MAX_LIMIT = 36000
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -200
|
||||
MAX_LIMIT = 200
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 100
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -120
|
||||
MAX_LIMIT = 120
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_3]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 50
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_4]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -36000
|
||||
MAX_LIMIT = 36000
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
@@ -0,0 +1,2 @@
|
||||
T1 P1 D1
|
||||
T2 P2 Z10 D8
|
||||
@@ -0,0 +1,37 @@
|
||||
xyzbc-trt-kins (switchkins)
|
||||
|
||||
Uses remapped user m codes for kins switch:
|
||||
|
||||
M429: Identity Kinematics
|
||||
M428: XYZBC (TCP)
|
||||
M430: userk Kinematics
|
||||
|
||||
A hal net is required to connect the
|
||||
analog out pin N, Example (for N=3):
|
||||
|
||||
net :kinstype-select <= motion.analog-out-03
|
||||
net :kinstype-select => motion.switchkins-type
|
||||
|
||||
Hal Input pins:
|
||||
xyzbc-trt-kins.x-offset
|
||||
xyzbc-trt-kins.z-offset
|
||||
|
||||
X and Z offsets are the offsets from the center
|
||||
of rotation of the B axis relative to the center
|
||||
of rotation of the C axis.
|
||||
|
||||
Hal Input pins:
|
||||
xyzbc-trt-kins.x-rot-point
|
||||
xyzbc-trt-kins.y-rot-point
|
||||
xyzbc-trt-kins.z-rot-point
|
||||
|
||||
X, Y and Z rot-point pins represent the
|
||||
offsets of the center of rotation of the C axis
|
||||
relative to the machine absolute zero
|
||||
|
||||
Hal Input pins:
|
||||
xyzbc-trt-kins.conventional-directions
|
||||
|
||||
Pin conventional-directions is false by default. If true,
|
||||
axis directions follow the conventions as defined
|
||||
at https://linuxcnc.org/docs/html/gcode/machining-center.html#_rotational_axes
|
||||
@@ -0,0 +1,45 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<pyvcp>
|
||||
|
||||
<vbox>
|
||||
<relief>"ridge"</relief>
|
||||
<bd>5</bd>
|
||||
<label>
|
||||
<text>"SWITCHKINS"</text>
|
||||
<relief>RIDGE</relief>
|
||||
<bd>3</bd>
|
||||
</label>
|
||||
<multilabel>
|
||||
<legends>["0:IDENTITY", "1: XYZBC ", "2: USERK "]</legends>
|
||||
<font>("Helvetica",16)</font>
|
||||
<bg>"black"</bg>
|
||||
<fg>"yellow"</fg>
|
||||
</multilabel>
|
||||
<button>
|
||||
<halpin>"type0-button"</halpin>
|
||||
<text>"IDENTITY"</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
<button>
|
||||
<halpin>"type1-button"</halpin>
|
||||
<text>"TCP:XYZBC"</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
<button>
|
||||
<halpin>"type2-button"</halpin>
|
||||
<text>"userk"</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<relief>"ridge"</relief>
|
||||
<bd>5</bd>
|
||||
<button>
|
||||
<halpin>"vismach-clear"</halpin>
|
||||
<text>"vismach-clear"</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
</vbox>
|
||||
|
||||
</pyvcp>
|
||||
@@ -0,0 +1,27 @@
|
||||
This is a simulation configuration for a 6 axis machine with one table rotary and two spindle rotary joints
|
||||
|
||||
This simulation also includes a python remap of Gcodes for tilted workplane (TWP) functionality.
|
||||
Both the kinematic and the twp remap support nutation of the secondary rotary joints (ie A or B ) form 0 to 90°.
|
||||
Hence this also works for the 'usual' orthogonal spindle rotary-tilt type machines by setting the nutation angle to 90°.
|
||||
|
||||
Implemented TWP functionality:
|
||||
G68.2 : defines twp using euler-angles, pitch-roll-yaw, 2-vectors, 3 points, optionally with offset in XYZ and rotation in XY
|
||||
G68.3 : defines twp from current tool orientation, optionally with offset in XYZ and rotation in XY
|
||||
G68.4 : same as G68.2 but as an incremental definition from an active TWP plane
|
||||
G69 : cancels the current twp (resets all parameters, moves to G54 and sets Identity kinematics)
|
||||
G53.1 (P) : spindle orientation without tcp, switches to G59 and activates tool kinematics
|
||||
G53.3 (P XYZ) : same as G53.1 but with simultaneous move the the XYZ coords on the twp plane
|
||||
G53.6 (P) : same as G53.1 but spindle orientation with tcp
|
||||
|
||||
- Spindle is C primary, A secondary or B secondary as defined in the [TWP] section of the ini file
|
||||
- All G53.x commands will respect axis limits as set in the ini file for the respective primary and secondary spindle joints.
|
||||
- The P word sets the orientation strategy: 0(default)=shortest distance,
|
||||
1=positive rotation only,
|
||||
2=negative rotation only
|
||||
(this applies to the primary rotary, the secondary moves the shortest distance)
|
||||
|
||||
For more:
|
||||
https://forum.linuxcnc.org/show-your-stuff/49103-kinematic-model-for-a-5axis-mill-with-universal-nutating-head?start=0#271334
|
||||
|
||||
Full Documentation can be found at:
|
||||
https://github.com/Sigma1912/LinuxCNC_Demo_Configs/tree/main/table-rotary_spindle-rotary-nutating/Documentation
|
||||
@@ -0,0 +1,15 @@
|
||||
o<circular_pocket>sub
|
||||
; activate tool radius compensation
|
||||
g42
|
||||
; circular pocket
|
||||
g1 x50 f5000
|
||||
g2 i-25 z20
|
||||
g2 i-25 z0
|
||||
g2 i-25 z-20
|
||||
g2 i-50 z-20
|
||||
; deactivate tool radius compensation
|
||||
g40
|
||||
g1 x0 y0
|
||||
g0 z50
|
||||
o<circular_pocket>endsub
|
||||
M2
|
||||
@@ -0,0 +1,17 @@
|
||||
G69
|
||||
g10 l2 p0 x1000 y-1000 z-1000
|
||||
m6 t3 g43 h3
|
||||
g68.2 q121 i25 j-10
|
||||
g53.1
|
||||
o100 REPEAT[100]
|
||||
g68.4 q131 i35 j35 k0
|
||||
g53.6
|
||||
g0 x50y50z100
|
||||
g0 x-50
|
||||
g0 y-50
|
||||
g0 x50
|
||||
g0 y50
|
||||
o100 ENDREPEAT
|
||||
g69
|
||||
M2
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
g69
|
||||
g10 l2 p0 x1300 y-200 z-1400
|
||||
m6 t3 g43 h3
|
||||
g68.2 q121 i0 j5
|
||||
g53.1
|
||||
g0 x0y0z100
|
||||
o100 REPEAT[1000]
|
||||
|
||||
g68.4 x50 q232 i45 j0 k0
|
||||
g53.6
|
||||
;g52 x100
|
||||
g0 x0y0z100
|
||||
o<square> call
|
||||
|
||||
g68.4 x-50 q323 i0 j-45 k0
|
||||
g53.6
|
||||
;G52 x-100
|
||||
g0 x0y0z100
|
||||
o<square> call
|
||||
|
||||
o100 ENDREPEAT
|
||||
g69
|
||||
M2
|
||||
@@ -0,0 +1,20 @@
|
||||
G69
|
||||
g10 l2 p0 x1000 y-1000 z-1000
|
||||
m6 t3 g43 h3
|
||||
g68.2 q121 i25 j-10
|
||||
g53.1
|
||||
o100 REPEAT[100]
|
||||
g68.4 q131 i-35 j-35 k0
|
||||
;g53.3 p0 x50y50z150
|
||||
g53.6
|
||||
x50y50z150
|
||||
g0 z100
|
||||
g0 x-50
|
||||
g0 y-50
|
||||
g0 x50
|
||||
g0 y50
|
||||
g0 x0y0z120
|
||||
o100 ENDREPEAT
|
||||
g69
|
||||
M2
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
g69
|
||||
g10 l2 p0 x1300 y-200 z-1400
|
||||
m6 t3 g43 h3
|
||||
g0 x0y0z100
|
||||
|
||||
g68.2 x50 y50 z-50 q121 i30 j15
|
||||
g53.3 x0y0z100
|
||||
|
||||
o<square> call
|
||||
|
||||
;g69
|
||||
M2
|
||||
@@ -0,0 +1,9 @@
|
||||
o<square>sub
|
||||
g0 x50y50z100
|
||||
g0 x-50
|
||||
g0 y-50
|
||||
g0 x50
|
||||
g0 y50
|
||||
g0 x0y0z120
|
||||
g52 x0y0z0
|
||||
o<square>endsub
|
||||
1676
configs/sim/axis/vismach/5axis/table-rotary_spindle-rotary-nutating/python/remap.py
Executable file
1676
configs/sim/axis/vismach/5axis/table-rotary_spindle-rotary-nutating/python/remap.py
Executable file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,20 @@
|
||||
# This is a component of LinuxCNC
|
||||
# Copyright 2011, 2012, 2013 Dewey Garrett <dgarrett@panix.com>,
|
||||
# Michael Haberler <git@mah.priv.at>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
import remap
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import hal
|
||||
import linuxcnc
|
||||
|
||||
h = hal.component("twp-helper-comp")
|
||||
|
||||
# this pin reflects the machine.analog pin used for the
|
||||
# twp-status
|
||||
h.newpin("twp-status", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# these pins are created here from 'twp-status''
|
||||
h.newpin("twp-is-redefined", hal.HAL_BIT, hal.HAL_OUT)
|
||||
h.newpin("twp-is-defined", hal.HAL_BIT, hal.HAL_OUT)
|
||||
h.newpin("twp-is-active", hal.HAL_BIT, hal.HAL_OUT)
|
||||
|
||||
# twp origin vector
|
||||
h.newpin("twp-ox-in", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
h.newpin("twp-oy-in", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
h.newpin("twp-oz-in", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
h.newpin("twp-ox", hal.HAL_FLOAT, hal.HAL_OUT)
|
||||
h.newpin("twp-oy", hal.HAL_FLOAT, hal.HAL_OUT)
|
||||
h.newpin("twp-oz", hal.HAL_FLOAT, hal.HAL_OUT)
|
||||
# twp x-orientation vector
|
||||
h.newpin("twp-xx-in", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
h.newpin("twp-xy-in", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
h.newpin("twp-xz-in", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
h.newpin("twp-xx", hal.HAL_FLOAT, hal.HAL_OUT)
|
||||
h.newpin("twp-xy", hal.HAL_FLOAT, hal.HAL_OUT)
|
||||
h.newpin("twp-xz", hal.HAL_FLOAT, hal.HAL_OUT)
|
||||
# twp z-orientation vector
|
||||
h.newpin("twp-zx-in", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
h.newpin("twp-zy-in", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
h.newpin("twp-zz-in", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
h.newpin("twp-zx", hal.HAL_FLOAT, hal.HAL_OUT)
|
||||
h.newpin("twp-zy", hal.HAL_FLOAT, hal.HAL_OUT)
|
||||
h.newpin("twp-zz", hal.HAL_FLOAT, hal.HAL_OUT)
|
||||
# twp origin vector in machine coordinate system
|
||||
h.newpin("twp-ox-world-in", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
h.newpin("twp-oy-world-in", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
h.newpin("twp-oz-world-in", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
h.newpin("twp-ox-world", hal.HAL_FLOAT, hal.HAL_OUT)
|
||||
h.newpin("twp-oy-world", hal.HAL_FLOAT, hal.HAL_OUT)
|
||||
h.newpin("twp-oz-world", hal.HAL_FLOAT, hal.HAL_OUT)
|
||||
|
||||
h.ready()
|
||||
|
||||
# create a connection to the status channel
|
||||
s = linuxcnc.stat()
|
||||
|
||||
try:
|
||||
while 1:
|
||||
# publish twp-status
|
||||
if h['twp-status'] == 1:
|
||||
h['twp-is-defined'] = 1
|
||||
h['twp-is-active'] = 0
|
||||
elif h['twp-status'] == 2:
|
||||
h['twp-is-defined'] = 1
|
||||
h['twp-is-active'] = 1
|
||||
else:
|
||||
h['twp-is-defined'] = 0
|
||||
h['twp-is-active'] = 0
|
||||
|
||||
# passthrough the twp arguments
|
||||
h['twp-ox'] = h['twp-ox-in']
|
||||
h['twp-oy'] = h['twp-oy-in']
|
||||
h['twp-oz'] = h['twp-oz-in']
|
||||
h['twp-xx'] = h['twp-xx-in']
|
||||
h['twp-xy'] = h['twp-xy-in']
|
||||
h['twp-xz'] = h['twp-xz-in']
|
||||
h['twp-zx'] = h['twp-zx-in']
|
||||
h['twp-zy'] = h['twp-zy-in']
|
||||
h['twp-zz'] = h['twp-zz-in']
|
||||
|
||||
# we only want to expose offsets when twp is not defined
|
||||
if not h['twp-is-defined']:
|
||||
s.poll() # get current values
|
||||
g5x_offset = s.g5x_offset
|
||||
h['twp-ox-world'] = g5x_offset[0]
|
||||
h['twp-oy-world'] = g5x_offset[1]
|
||||
h['twp-oz-world'] = g5x_offset[2]
|
||||
else : # use the values from the remap
|
||||
h['twp-ox-world'] = h['twp-ox-world-in']
|
||||
h['twp-oy-world'] = h['twp-oy-world-in']
|
||||
h['twp-oz-world'] = h['twp-oz-world-in']
|
||||
|
||||
except KeyboardInterrupt:
|
||||
raise SystemExit
|
||||
@@ -0,0 +1,67 @@
|
||||
# This is a component of LinuxCNC
|
||||
# Copyright 2011, 2013 Dewey Garrett <dgarrett@panix.com>, Michael
|
||||
# Haberler <git@mah.priv.at>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
import inspect
|
||||
import emccanon
|
||||
|
||||
# O-word procedure to trap into the Pydevd debugger
|
||||
# start debug server in Eclipse, then
|
||||
# call as 'O<pydevd> call' from MDI
|
||||
|
||||
# example setup for debugging embedded Python code
|
||||
# see http://pydev.org/manual_adv_remote_debugger.html
|
||||
# if this points to a valid directory,
|
||||
|
||||
def call_pydevd():
|
||||
""" trap into the pydevd debugger"""
|
||||
|
||||
import os,sys
|
||||
|
||||
pydevdir= '/home/mah/.eclipse/org.eclipse.platform_3.5.0_155965261/plugins/org.python.pydev.debug_2.0.0.2011040403/pysrc/'
|
||||
|
||||
# the 'emctask' module is present only in the milltask instance, otherwise both the UI and
|
||||
# milltask would try to connect to the debug server.
|
||||
|
||||
if os.path.isdir(pydevdir) and 'emctask' in sys.builtin_module_names:
|
||||
sys.path.append(pydevdir)
|
||||
sys.path.insert(0,pydevdir)
|
||||
try:
|
||||
import pydevd
|
||||
emccanon.MESSAGE("pydevd imported, connecting to Eclipse debug server...")
|
||||
pydevd.settrace()
|
||||
except:
|
||||
emccanon.MESSAGE("no pydevd module found")
|
||||
pass
|
||||
|
||||
|
||||
|
||||
def lineno():
|
||||
""" return line number in the current Python script """
|
||||
return inspect.currentframe().f_back.f_lineno
|
||||
|
||||
def error_stack(self):
|
||||
""" print the Interpreters error stack (function names) """
|
||||
print("error stack level=%d" % (self.stack_index))
|
||||
for s in self.stack():
|
||||
print("--'%s'" % (s))
|
||||
|
||||
def callstack(self):
|
||||
""" print the O-Word call stack """
|
||||
for i in range(self.call_level):
|
||||
c = self.sub_context[i]
|
||||
print("%d: pos=%d seq=%d filename=%s sub=%s" % (i,c.position, c.sequence_number,c.filename,c.subname))
|
||||
@@ -0,0 +1,24 @@
|
||||
;M428 by remap: kinstype==0 (IDENTITY kinematics)
|
||||
o<428remap>sub
|
||||
#<kinstype> = 0
|
||||
#<SWITCHKINS_PIN> = 3 ; set N as required: motion.analog-out-0N
|
||||
|
||||
o1 if [exists [#<_hal[motion.switchkins-type]>]]
|
||||
o1 else
|
||||
(debug,M428:Missing [RS274NGC]HAL_PIN_VARS=1)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o1 endif
|
||||
M66 E0 L0 ; force synch
|
||||
M68 E#<SWITCHKINS_PIN> Q#<kinstype> ; set kinstype value
|
||||
M66 E0 L0 ; force synch
|
||||
|
||||
o2 if [[#<_task> EQ 1] AND [#<_hal[motion.switchkins-type]> NE #<kinstype>]]
|
||||
(debug,M428: Wrong motion.switchkins-type)
|
||||
(debug,or missing hal net to analog-out-0x)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o2 else
|
||||
o2 endif
|
||||
|
||||
o<428remap>endsub
|
||||
@@ -0,0 +1,24 @@
|
||||
;M429 by remap: kinstype==1 TCP kinematics
|
||||
o<429remap>sub
|
||||
#<kinstype> = 1
|
||||
#<SWITCHKINS_PIN> = 3 ; set N as required: motion.analog-out-0N
|
||||
|
||||
o1 if [exists [#<_hal[motion.switchkins-type]>]]
|
||||
o1 else
|
||||
(debug,M429:Missing [RS274NGC]HAL_PIN_VARS=1)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o1 endif
|
||||
M66 E0 L0 ; force synch
|
||||
M68 E#<SWITCHKINS_PIN> Q#<kinstype> ; set kinstype value
|
||||
M66 E0 L0 ; force synch
|
||||
|
||||
o2 if [[#<_task> EQ 1] AND [#<_hal[motion.switchkins-type]> NE #<kinstype>]]
|
||||
(debug,M429:Wrong motion.switchkins-type)
|
||||
(debug,or missing hal net to analog-out-0x)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o2 else
|
||||
o2 endif
|
||||
|
||||
o<429remap>endsub
|
||||
@@ -0,0 +1,24 @@
|
||||
;M430 by remap: kinstype==2 Tool kinematics
|
||||
o<430remap>sub
|
||||
#<kinstype> = 2
|
||||
#<SWITCHKINS_PIN> = 3 ; set N as required: motion.analog-out-0N
|
||||
|
||||
o1 if [exists [#<_hal[motion.switchkins-type]>]]
|
||||
o1 else
|
||||
(debug,M430:Missing [RS274NGC]HAL_PIN_VARS=1)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o1 endif
|
||||
M66 E0 L0 ; force synch
|
||||
M68 E#<SWITCHKINS_PIN> Q#<kinstype> ; set kinstype value
|
||||
M66 E0 L0 ; force synch
|
||||
|
||||
o2 if [[#<_task> EQ 1] AND [#<_hal[motion.switchkins-type]> NE #<kinstype>]]
|
||||
(debug,M430:Wrong motion.switchkins-type)
|
||||
(debug,or missing hal net to analog-out-0x)
|
||||
(debug,STOP)
|
||||
M2
|
||||
o2 else
|
||||
o2 endif
|
||||
|
||||
o<430remap>endsub
|
||||
@@ -0,0 +1,14 @@
|
||||
; this is the wrapper remap to orient the spindle using IDENTITY kinematics G53.1
|
||||
|
||||
o<g531remap>sub
|
||||
M66 L0 E0 ;force sync, stop read ahead
|
||||
o100 if [EXISTS [#<P>]]
|
||||
o100 else
|
||||
#<P> = 0 ;if no P word has been passed we use the default (0)
|
||||
o100 endif
|
||||
M68 E3 Q0 ;switch to identity kinematic
|
||||
M66 L0 E0
|
||||
M530 P#<P> ;orient the spindle with P word
|
||||
M66 L0 E0
|
||||
o<g531remap>endsub
|
||||
m2
|
||||
@@ -0,0 +1,20 @@
|
||||
; this is the wrapper remap to orient the spindle using IDENTITY kinematics G53.3 with simultaneous move to XYZ (in tool coordinates)
|
||||
|
||||
o<g533remap>sub
|
||||
M66 L0 E0 ;force sync, stop read ahead
|
||||
o100 if [[EXISTS [#<X>]] AND [EXISTS [#<Y>]] AND [EXISTS [#<Z>]]]
|
||||
M68 E3 Q0 ;switch to identity kinematic
|
||||
o100 else
|
||||
(abort, G53.3: X,Y and Z words are required) ;it is an error if X,Y or Z word is missing
|
||||
o100 endif
|
||||
o105 if [EXISTS [#<P>]] ;check if a P word has been passed
|
||||
;(print, P=#<P>)
|
||||
o105 else
|
||||
#<P> = 0 ;if no P word has been passed we use the default (0)
|
||||
o105 endif
|
||||
M66 L0 E0
|
||||
;Note we can not pass XYZ words to an m-code so we send coords as ijk and handle it in remap.py
|
||||
M530 P#<P> I#<X> J#<Y> K#<Z> ;orient the spindle with P word and xyz as ijk
|
||||
M66 L0 E0
|
||||
o<g533remap>endsub
|
||||
m2
|
||||
@@ -0,0 +1,14 @@
|
||||
; this is the wrapper remap to orient the spindle using TCP kinematics G53.6
|
||||
|
||||
o<g536remap>sub
|
||||
M66 L0 E0 ;force sync, stop read ahead
|
||||
o100 if [EXISTS [#<P>]]
|
||||
o100 else
|
||||
#<P> = 0 ;if no P word has been passed we use the default (0)
|
||||
o100 endif
|
||||
M68 E3 Q1 ;switch to tcp kinematic
|
||||
M66 L0 E0
|
||||
M530 P#<P> ;orient the spindle with P word
|
||||
M66 L0 E0
|
||||
o<g536remap>endsub
|
||||
m2
|
||||
@@ -0,0 +1,11 @@
|
||||
; this is the wrapper remap to cancel TWP
|
||||
|
||||
o<g69remap>sub
|
||||
M66 L0 E0 ; force sync, stop read ahead
|
||||
M469 ; call the python G69_core code
|
||||
M68 E3 Q0 ; switch to identity kins
|
||||
M68 E2 Q0 ; reset twp-state to 'undefined' (0)
|
||||
G54 ; switch to G54
|
||||
M66 L0 E0 ; force sync, stop read ahead
|
||||
o<g69remap>endsub
|
||||
m2
|
||||
@@ -0,0 +1,26 @@
|
||||
;This is a workaround for a bug that leads to stat.gcodes and parameter[5250]
|
||||
;to get out of sync after some program aborts
|
||||
;in [RS274NGC] section of the ini add: ON_ABORT_COMMAND = o <on_abort> call
|
||||
;save this to a path specified in SUBROUTINE_PATH =
|
||||
;NOTE: we cannot run remapped codes here only custom Mcodes (ie M100..M199)
|
||||
|
||||
o<on_abort_no_twp_reset> sub
|
||||
;Workaround for
|
||||
;https://github.com/LinuxCNC/linuxcnc/issues/2745
|
||||
;https://github.com/LinuxCNC/linuxcnc/issues/2908
|
||||
;store current offset index
|
||||
#1 = #5220
|
||||
; we must switch through at least 3 indexes
|
||||
G59.3
|
||||
G59.2
|
||||
G59.1
|
||||
; restore the index from above
|
||||
o101 if [#1 GT 6]
|
||||
(print, Code [#1-6])
|
||||
G[59+[#1-6]/10]
|
||||
o101 else
|
||||
G[53+#1]
|
||||
o101 endif
|
||||
;(msg, on_abort sub executed)
|
||||
o<on_abort_no_twp_reset> endsub
|
||||
m2
|
||||
@@ -0,0 +1,15 @@
|
||||
;This is a workaround for a bug that leads to stat.gcodes and parameter[5250]
|
||||
;to get out of sync after some program aborts
|
||||
;in [RS274NGC] section of the ini add: ON_ABORT_COMMAND = o <on_abort> call
|
||||
;save this to a path specified in SUBROUTINE_PATH =
|
||||
;NOTE: we cannot run remapped codes here only custom Mcodes (ie M100..M199)
|
||||
|
||||
o<on_abort_with_twp_reset> sub
|
||||
;(msg, on_abort START)
|
||||
M68 E2 Q0 ; reset twp-state to 'undefined' (0)
|
||||
M68 E3 Q0 ; set IDENTITY kins
|
||||
G64 P0.01 ; reset the toolpath tolerance as this sometimes gets set to zero on estop events
|
||||
G54 ; switch to G54
|
||||
(msg, on_abort END)
|
||||
o<on_abort_with_twp_reset> endsub
|
||||
M2
|
||||
@@ -0,0 +1,11 @@
|
||||
# switchkins pyvcp connections
|
||||
|
||||
net :kinstype.is-0 <= kinstype.is-0 => pyvcp.multilabel.0.legend0
|
||||
net :kinstype.is-1 <= kinstype.is-1 => pyvcp.multilabel.0.legend1
|
||||
net :kinstype.is-2 <= kinstype.is-2 => pyvcp.multilabel.0.legend2
|
||||
|
||||
net :vismach-clear <= pyvcp.vismach-clear => vismach.plotclear
|
||||
|
||||
net :type0-button <= pyvcp.type0-button => halui.mdi-command-00
|
||||
net :type1-button <= pyvcp.type1-button => halui.mdi-command-01
|
||||
net :type2-button <= pyvcp.type2-button => halui.mdi-command-02
|
||||
@@ -0,0 +1,566 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# This is a machine simulation for the 'xyzacb-trsrn' simulation config in linuxcnc
|
||||
# Author: David mueller
|
||||
# email: mueller_david@hotmail.com
|
||||
|
||||
import hal
|
||||
import math
|
||||
import sys
|
||||
import os
|
||||
from vismach import *
|
||||
|
||||
# getting the name of the directory
|
||||
# where the this file is present.
|
||||
current = os.path.dirname(os.path.realpath(__file__))
|
||||
# Getting the parent directory name
|
||||
# where the current directory is present.
|
||||
parent = os.path.dirname(current)
|
||||
# adding the parent directory to
|
||||
# the sys.path.
|
||||
sys.path.append(parent)
|
||||
# now we can import the module in the parent
|
||||
# directory.
|
||||
|
||||
|
||||
# Machine zero as measured from center surface of the rotary c table
|
||||
machine_zero_x = -1000
|
||||
machine_zero_y = 1000
|
||||
machine_zero_z = 2000
|
||||
|
||||
'''
|
||||
try: # Expect files in working directory
|
||||
# NOTE to run this file as standalone python script absolute paths might have to be used to find the stl files
|
||||
# create the work piece from file
|
||||
work_piece = AsciiSTL(filename="./work_piece_1.stl")
|
||||
|
||||
except Exception as detail:
|
||||
print(detail)
|
||||
raise SystemExit("gen-xyzacb-trsrn-gui requires stl files in working directory")
|
||||
'''
|
||||
|
||||
for setting in sys.argv[1:]: exec(setting)
|
||||
|
||||
c = hal.component("xyzacb-trsrn-gui")
|
||||
# axis_x
|
||||
c.newpin("axis_x", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# axis_y
|
||||
c.newpin("axis_y", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# head vertical slide
|
||||
c.newpin("axis_z", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# rotary_a
|
||||
c.newpin("rotary_a", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# rotary_b
|
||||
c.newpin("rotary_b", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# rotary_c
|
||||
c.newpin("rotary_c", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# nutation-angle
|
||||
c.newpin("nutation_angle", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# tool offsets
|
||||
c.newpin("tool_length", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("tool_diameter", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# geometric offsets in the spindle-rotary-assembly
|
||||
c.newpin("pivot_y", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("pivot_z", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("offset_x", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("offset_y", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# rot-point offsets distances from pivot point ( spindle AB)
|
||||
# to rotation axis ( table C)
|
||||
c.newpin("rot_axis_y", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("rot_axis_z", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# selected kinematics
|
||||
c.newpin("kinstype_select", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# work piece show/hide
|
||||
c.newpin("hide_work_piece_1", hal.HAL_BIT, hal.HAL_IN)
|
||||
# spindle body show/hide
|
||||
c.newpin("hide_spindle_body", hal.HAL_BIT, hal.HAL_IN)
|
||||
# work piece show/hide
|
||||
c.newpin("hide_somethingelse", hal.HAL_BIT, hal.HAL_IN)
|
||||
# scale coordinate system indicators
|
||||
c.newpin("scale_coords", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# twp pins
|
||||
c.newpin("twp_status", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_defined", hal.HAL_BIT, hal.HAL_IN)
|
||||
c.newpin("twp_active", hal.HAL_BIT, hal.HAL_IN)
|
||||
# the origin of the twp plane display needs to be independent of the work offsets
|
||||
# because those offsets change as the kinematic switches between world and tool
|
||||
c.newpin("twp_ox_world", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_oy_world", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_oz_world", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# origin of the twp
|
||||
c.newpin("twp_ox", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_oy", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_oz", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# normal vector defining the temporary work plane as set by user with G68.2
|
||||
c.newpin("twp_zx", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_zy", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_zz", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_xx", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_xy", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_xz", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.ready()
|
||||
|
||||
|
||||
# give endpoint Z values and radii
|
||||
# resulting cylinder is on the Z axis
|
||||
class HalToolCylinder(CylinderZ):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 6 # default if hal pin not set
|
||||
if (c.tool_diameter > 0): r = c.tool_diameter/2
|
||||
return -c.tool_length, r, 0, r
|
||||
|
||||
# used to create the spindle housing as set by the variable 'pivot_z'
|
||||
class HalSpindleHousingZ(CylinderZ):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 140
|
||||
length = c.pivot_z + 200
|
||||
# start the spindle housing at height 100 above the spindle nose
|
||||
return length, r, 100, r
|
||||
|
||||
# used to create the spindle rotary as set by the variable 'pivot_y'
|
||||
class HalSpindleHousingY(CylinderY):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 120
|
||||
length = c.pivot_y + 150
|
||||
return length, r-30, 0, r
|
||||
|
||||
# used to create an indicator for the variable 'pivot_z'
|
||||
class HalPivotZ(CylinderZ):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 2
|
||||
length = c.pivot_z
|
||||
# start the spindle housing at height 100 above the spindle nose
|
||||
return length, 1, 0, r
|
||||
|
||||
# used to create an indicator for the variable 'pivot_y'
|
||||
class HalPivotY(CylinderY):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 2
|
||||
length = -c.pivot_y
|
||||
return length, r, 0, 1
|
||||
|
||||
# used to create an indicator for the variable 'offset_x'
|
||||
class HalOffsetX(CylinderX):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderX.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 2
|
||||
length = -c.offset_x
|
||||
return length, r, 0, 1
|
||||
|
||||
# used to create an indicator for the variable 'offset_y'
|
||||
class HalOffsetY(CylinderY):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 2
|
||||
length = -c.offset_y
|
||||
return length, r, 0, 1
|
||||
|
||||
# used to create a thin tool-offset indicator
|
||||
class HalToolOffset(CylinderZ):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 2
|
||||
return -c.tool_length, 1, 0, r
|
||||
|
||||
class CoordSystem(Collection):
|
||||
# creates a visual object for a coordinate system
|
||||
def __init__(self, comp, r=4, l=500):
|
||||
# set arrow length
|
||||
al = l/10
|
||||
self.parts = [Color([1,0,0,1],[CylinderX(0,r,l,r)]),
|
||||
Color([1,0,0,1],[CylinderX(l,2*r,l+al,1)]),
|
||||
Color([0,1,0,1],[CylinderY(0,r,l,r)]),
|
||||
Color([0,1,0,1],[CylinderY(l,2*r,l+al,1)]),
|
||||
Color([0,0,1,1],[CylinderZ(0,r,l,r)]),
|
||||
Color([0,0,1,1],[CylinderZ(l,2*r,l+al,1)]),
|
||||
]
|
||||
|
||||
class Point(Collection):
|
||||
# creates a visual object for a point
|
||||
def __init__(self, comp, r=1, l=20, color=[1,1,1,1]):
|
||||
self.parts = [Color(color,[CylinderX(-l,r,l,r)]),
|
||||
Color(color,[CylinderY(-l,r,l,r)]),
|
||||
Color(color,[CylinderZ(-l,r,l,r)])
|
||||
]
|
||||
|
||||
# used to rotate parts around the nutation axis
|
||||
class HalRotateNutation(HalVectorRotate):
|
||||
def __init__(self, parts, comp, var, th, x, y, z):
|
||||
HalVectorRotate.__init__(self, parts, comp, var, th, x, y, z)
|
||||
self.parts = parts
|
||||
self.comp = c
|
||||
self.var = var
|
||||
self.th = th
|
||||
|
||||
def get_values(self):
|
||||
th = self.th
|
||||
x = 0
|
||||
y = th*sin(radians(c.nutation_angle))
|
||||
z = th*cos(radians(c.nutation_angle))
|
||||
|
||||
return th, x, y, z
|
||||
|
||||
|
||||
#indicators
|
||||
# create vismach coordinates to show the origin during construction of the model
|
||||
vismach_coords = CoordSystem(c,2,5000)
|
||||
|
||||
# create absolute coordinates
|
||||
abs_coords = CoordSystem(c,8,300)
|
||||
abs_coords = HalScale([abs_coords],c,1,1,1,"scale_coords")
|
||||
# create work coordinates that represent work_offset offset
|
||||
work_coords = CoordSystem(c,2,100)
|
||||
work_coords = HalScale([work_coords],c,1,1,1,"scale_coords")
|
||||
# work coordinates for identity mode
|
||||
work_coords_ident = HalShow([work_coords],c,0,"kinstype_select")
|
||||
# work coordinates for tcp mode
|
||||
work_coords_tcp = HalShow([work_coords],c,1,"kinstype_select")
|
||||
# work coordinates for tool mode
|
||||
work_coords_tool = HalShow([work_coords],c,2,"kinstype_select")
|
||||
# rotate to match the current tool orientation
|
||||
work_coords_tool = HalRotateNutation([work_coords_tool],c,"rotary_b",-1,0,0,0)
|
||||
work_coords_tool = HalRotate([work_coords_tool],c,"rotary_c",1,0,0,1)
|
||||
|
||||
# move the coords to the designated (x,y,z)-home position
|
||||
abs_coords = Translate([abs_coords], machine_zero_x, machine_zero_y, machine_zero_z)
|
||||
work_coords_ident = Translate([work_coords_ident], machine_zero_x, machine_zero_y, machine_zero_z)
|
||||
work_coords_tcp = Translate([work_coords_tcp] , machine_zero_x, machine_zero_y, machine_zero_z)
|
||||
work_coords_tool = Translate([work_coords_tool] , machine_zero_x, machine_zero_y, machine_zero_z)
|
||||
|
||||
# move the work offsets by the work_offset
|
||||
work_coords_ident = HalVectorTranslate([work_coords_ident],c,"twp_ox_world","twp_oy_world","twp_oz_world")
|
||||
work_coords_tcp = HalVectorTranslate([work_coords_tcp] ,c,"twp_ox_world","twp_oy_world","twp_oz_world")
|
||||
work_coords_tool = HalVectorTranslate([work_coords_tool] ,c,"twp_ox_world","twp_oy_world","twp_oz_world")
|
||||
|
||||
# create a visual indicator for the position of the control point
|
||||
ctrl_pt = Point(c)
|
||||
# move the control point indicator to the control-position
|
||||
#ctrl_pt = HalVectorTranslate([ctrl_pt],c,"abs_pos_x","abs_pos_y","abs_pos_z")
|
||||
ctrl_pt = HalTranslate([ctrl_pt],c,"tool_length",0,0,-1)
|
||||
# create an indicator line from the reference point to the work_offset position
|
||||
line_work_offset = Color([1,1,1,1],[HalLine(c,0,0,0,"twp_ox_world","twp_oy_world","twp_oz_world",1,1)])
|
||||
line_work_offset = Translate([line_work_offset], machine_zero_x, machine_zero_y, machine_zero_z)
|
||||
coords = Collection([
|
||||
abs_coords,
|
||||
work_coords_ident,
|
||||
work_coords_tool,
|
||||
#ctrl_pt,
|
||||
line_work_offset,
|
||||
])
|
||||
|
||||
|
||||
# create a visual for the position of the rotational axis of the rotary C table
|
||||
# as set by the user with the "rot-axis-x" and "rot-axis-y" sliders in the axis gui
|
||||
rot_axis = Color([1,1,0.3,1],[CylinderX(0,2,-2000,2)])
|
||||
# move the rot_axis indicator by the designated (x,y)-home offset
|
||||
rot_axis= Translate([rot_axis], 0, machine_zero_y, machine_zero_z)
|
||||
# now move it to the position set by the user
|
||||
rot_axis = HalVectorTranslate([rot_axis],c,0,"rot_axis_y","rot_axis_z")
|
||||
#/indicators
|
||||
|
||||
#tool-side
|
||||
tooltip = Capture()
|
||||
tool_cylinder = Collection([
|
||||
HalToolCylinder(c),
|
||||
# this indicates the spindle nose when no tool-offset is active
|
||||
CylinderZ(-0.1, 0, 0.1, 10),
|
||||
])
|
||||
tool_cylinder = HalShow([tool_cylinder],c,True,"hide_spindle_body",0,1)
|
||||
# create an indicator for the tool-offset when spindle-body is hidden
|
||||
ind_tool_offset = Color([1,0,1,0],[HalToolOffset(c)])
|
||||
tool = Collection([
|
||||
HalTranslate([tooltip], c, "tool_length", 0,0,-1),
|
||||
tool_cylinder,
|
||||
ind_tool_offset
|
||||
])
|
||||
tool = Color([1,0,1,0], [tool] )
|
||||
# create an indicator for the variable pivot_z
|
||||
ind_pivot_z = Color([0,0,0.75,1],[HalPivotZ(CylinderZ)])
|
||||
# create an indicator for the variable pivot_y
|
||||
ind_pivot_y = Color([0,0.75,0,1],[HalPivotY(CylinderY)])
|
||||
# move the pivot_y indicator so it extends from the pivot point
|
||||
ind_pivot_y = HalVectorTranslate([ind_pivot_y],c,0,"pivot_y","pivot_z",1)
|
||||
# create the spindle housing that contains the spindle
|
||||
spindle_housing = Collection([
|
||||
# spindle
|
||||
Color([0.7,0.7,0,1],[CylinderZ(0,50,50,100)]),
|
||||
Color([0.7,0.7,0,1],[CylinderZ(50,100,100,100)]),
|
||||
# spindle housing vertical length as set by 'pivot_z'
|
||||
Color([0.7,0.7,0,1],[HalSpindleHousingZ(CylinderZ)])
|
||||
])
|
||||
spindle_housing = HalShow([spindle_housing],c,True,"hide_spindle_body",0,1)
|
||||
spindle_housing = Collection([
|
||||
tool,
|
||||
spindle_housing,
|
||||
ind_pivot_z
|
||||
])
|
||||
|
||||
# spindle housing horizontal length as set by 'pivot_y'
|
||||
spindle_housing_horizontal = Color([0.7,0.7,0,1],[HalSpindleHousingY(c)])
|
||||
# move up along the spindle housing
|
||||
spindle_housing_horizontal = Translate([spindle_housing_horizontal],0,0,50)
|
||||
# move farther up by the pivot_z value
|
||||
spindle_housing_horizontal = HalVectorTranslate([spindle_housing_horizontal],c,0,0,"pivot_z",1)
|
||||
# make it hidable
|
||||
spindle_housing_horizontal = HalShow([spindle_housing_horizontal],c,True,"hide_spindle_body",0,1)
|
||||
|
||||
spindle_housing = Collection([
|
||||
spindle_housing,
|
||||
spindle_housing_horizontal,
|
||||
ind_pivot_y
|
||||
])
|
||||
# move the spindle and it's vertical housing by the values set for the pivot lengths
|
||||
# so the vismach origin is in the pivot point
|
||||
spindle_housing = HalVectorTranslate([spindle_housing],c,0,"pivot_y","pivot_z",-1)
|
||||
|
||||
# create a visual for the rotary c axis
|
||||
ind_axis_c = Color([1,1,0.3,1],[CylinderZ(0,1,400,1)])
|
||||
ind_pivot_point = Collection([
|
||||
Color([1,1,1,1],[CylinderX(-200,1,200,1)]),
|
||||
Color([1,1,1,1],[CylinderY(-200,1,200,1)]),
|
||||
# arrow indicating the up position
|
||||
Color([1,1,1,1],[CylinderY(200,5,210,1)]),
|
||||
# sphere for the actual pivot point
|
||||
Color([1,1,0.3,1],[Sphere(0,0,0,5)]),
|
||||
ind_axis_c
|
||||
])
|
||||
|
||||
# create the part of joint b that attaches to the spindle body
|
||||
spindle_housing_nut = Collection([
|
||||
Color([0.7,0.7,0,1],[CylinderZ(0,60,150,145)]),
|
||||
Color([0.7,0.7,0,1],[CylinderZ(150,145,180,145)])
|
||||
])
|
||||
# rotate the nutation joint to the nutation angle
|
||||
spindle_housing_nut = HalRotate([spindle_housing_nut],c,"nutation_angle",-1,1,0,0)
|
||||
spindle_housing_nut = HalShow([spindle_housing_nut],c,True,"hide_spindle_body",0,1)
|
||||
# create HAL-link for a-axis rotational joint"
|
||||
spindle_housing = HalRotateNutation([spindle_housing],c,"rotary_b",-1,0,1,0)
|
||||
# move the joint using the offset values as set by the user in the gui panel
|
||||
spindle_housing = HalVectorTranslate([spindle_housing],c,"offset_x","offset_y",0,-1)
|
||||
spindle_housing = Collection([
|
||||
spindle_housing,
|
||||
spindle_housing_nut
|
||||
])
|
||||
|
||||
# create an indicator for x-offset
|
||||
ind_offset_x = Color([1,0,0,1],[HalOffsetX(c)])
|
||||
# create an indicator for y-offset
|
||||
ind_offset_y = Color([0,1,0,1],[HalOffsetY(c)])
|
||||
ind_offset_y = HalTranslate([ind_offset_y],c,"offset_x", -1,0,0)
|
||||
|
||||
# create an indicator for rotational axis B
|
||||
ind_axis_a = Color([1,1,0.3,1],[CylinderZ(0,1,400,1)])
|
||||
ind_axis_a = HalRotate([ind_axis_a],c,"nutation_angle",-1,1,0,0)
|
||||
# move the indicator by the offset values as set by the user in the gui panel
|
||||
ind_axis_a = HalVectorTranslate([ind_axis_a],c,"offset_x","offset_y",0,-1)
|
||||
spindle_indicators = Collection([
|
||||
ind_offset_x,
|
||||
ind_offset_y,
|
||||
ind_pivot_point,
|
||||
ind_axis_a,
|
||||
])
|
||||
|
||||
# create part of joint B that attaches to the body of rotary c
|
||||
spindle_rotary_nut = Collection([
|
||||
Color([1,0.5,0,0],[CylinderZ(180,145,300,145)]),
|
||||
Color([1,0.5,0,0],[CylinderZ(300,145,310,125)]),
|
||||
])
|
||||
# rotate the nutation joint to the nutation angle
|
||||
spindle_rotary_nut = HalRotate([spindle_rotary_nut],c,"nutation_angle",-1,1,0,0)
|
||||
|
||||
# create the part that connects the nutation joint to the rotary C
|
||||
spindle_rotary_arm = Color([1,0.5,0,0],[BoxCenteredXY(300, 600, 100)])
|
||||
spindle_rotary_arm = Rotate([spindle_rotary_arm],50,-1,0,0)
|
||||
spindle_rotary_arm = Translate([spindle_rotary_arm],0,120,200)
|
||||
# create where the plate the arm connects to the xyz-slide
|
||||
spindle_rotary_plate = Color([1,0.5,0,0],[CylinderZ(0,160,50,180)])
|
||||
# move the plate up where it connects to the arm
|
||||
spindle_rotary_plate = Translate([spindle_rotary_plate],0,0,400)
|
||||
spindle_rotary = Collection([
|
||||
spindle_rotary_nut,
|
||||
spindle_rotary_arm,
|
||||
spindle_rotary_plate
|
||||
])
|
||||
# make it hidable
|
||||
spindle_rotary = HalShow([spindle_rotary],c,True,"hide_spindle_body",0,1)
|
||||
# join the two parts to a spindle assembly
|
||||
spindle_assembly = Collection([
|
||||
spindle_housing,
|
||||
spindle_rotary,
|
||||
spindle_indicators
|
||||
])
|
||||
# create HAL-link for c-axis rotational joint"
|
||||
spindle_assembly = HalRotate([spindle_assembly],c,"rotary_c",1,0,0,1)
|
||||
|
||||
|
||||
# add a block for the y-axis to the spindle_assembly
|
||||
slide_xyz = Color([0.6,0.8,0.3,0], [Box(-250, -200, 0, 250, 3000, 500)])
|
||||
# move so the spindle assembly attaches to the bottom front
|
||||
slide_xyz = Translate([slide_xyz],0,0,450)
|
||||
slide_xyz = HalShow([slide_xyz],c,True,"hide_spindle_body",0,1)
|
||||
spindle_xyz = Collection([
|
||||
spindle_assembly,
|
||||
slide_xyz
|
||||
])
|
||||
# move the spindle and it's vertical housing by the values set for the pivot lengths
|
||||
# so the vismach origin is in the center of the spindle nose
|
||||
spindle_xyz = HalVectorTranslate([spindle_xyz],c,0,"pivot_y","pivot_z")
|
||||
spindle_xyz = HalVectorTranslate([spindle_xyz],c,"offset_x","offset_y",0)
|
||||
# spindle head and y-slide move with x
|
||||
spindle_xyz = HalTranslate([spindle_xyz],c,"axis_x",1,0,0)
|
||||
# spindle head and y-slide move with y
|
||||
spindle_xyz = HalTranslate([spindle_xyz],c,"axis_y",0,1,0)
|
||||
# spindle head and y-slide move with z
|
||||
spindle_xyz = HalTranslate([spindle_xyz],c,"axis_z",0,0,1)
|
||||
# move the spindle_xyz to it's designated home position
|
||||
spindle_xyz = Translate([spindle_xyz], machine_zero_x, machine_zero_y, machine_zero_z)
|
||||
#/tool-side
|
||||
|
||||
#work-side
|
||||
work = Capture()
|
||||
# create a simple cube
|
||||
work_piece = BoxCenteredXY(600, 600, 600)
|
||||
# create a more complex work piece from stl
|
||||
#work_piece = Translate([work_piece],0,0,0)
|
||||
work_piece = Color([0.5,0.5,0.5,0.9], [work_piece])
|
||||
# move the workpiece
|
||||
work_piece = Translate([work_piece],0,300,300)
|
||||
work_piece = HalShow([work_piece],c,1,"hide_work_piece_1",0,1)
|
||||
# create a block that holds the rotary a table
|
||||
rotary_table_housing = Color([0.2,0.2,0.2,0],[BoxCenteredXY(2000, 2000, -1000)])
|
||||
# move so the surface set below from the current XY plane
|
||||
rotary_table_housing = Translate([rotary_table_housing],0,0,-20)
|
||||
# create rotary_table_a
|
||||
rotary_table_a = Color([0.1,0.7,0.9,0],[CylinderZ(0,920,-800,920)])
|
||||
# create 'slots' in x and y on the rotary table
|
||||
table_console = Color([0.5,0.5,0.5,0.9],[BoxCenteredXY(1840, 200, 1200)])
|
||||
# move so the surface is on the rotation axis
|
||||
table_console = Translate([table_console],0,-100,0)
|
||||
slot_z_w = Color([1,1,1,1],[BoxCenteredXY(10, 1840, 0.9)])
|
||||
# create indicator of at positive end of x slot
|
||||
slot_pocket = Color([1,1,1,1],[CylinderZ(0,20,1,20)])
|
||||
slot_pocket = Translate([slot_pocket],900,0,0)
|
||||
rotary_table_a = Collection([
|
||||
work,
|
||||
work_piece,
|
||||
rotary_table_a,
|
||||
table_console,
|
||||
slot_z_w
|
||||
])
|
||||
# create HAL-link for a-axis rotational joint"
|
||||
rotary_table_a = HalRotate([rotary_table_a],c,"rotary_a",-1,0,0,1)
|
||||
rotary_table_a = Collection([
|
||||
rotary_table_a,
|
||||
rotary_table_housing
|
||||
])
|
||||
# rotate into the yz plane
|
||||
rotary_table_a = Rotate([rotary_table_a],90,0,1,0)
|
||||
# rotate so the table_console is horizontal
|
||||
rotary_table_a = Rotate([rotary_table_a],90,1,0,0)
|
||||
rotary_table_a = Translate([rotary_table_a ],-1700,0,0)
|
||||
|
||||
# rotate the tcp coords with the rotary table
|
||||
work_coords_tcp = HalRotate([work_coords_tcp],c,"rotary_a",-1,1,0,0)
|
||||
|
||||
# create the work_plane using the origin (as measured from current work offset (world),
|
||||
# normal vector vz(zx,zy,zz) and x-orientation vector vx(xx,xy,xz)
|
||||
# these are used to create a transformation matrix
|
||||
# with y-orientation vector being the cross_product(vz, vx)
|
||||
work_plane = HalGridFromNormalAndDirection(c,
|
||||
"twp_ox", "twp_oy", "twp_oz",
|
||||
"twp_xx", "twp_xy", "twp_xz",
|
||||
"twp_zx", "twp_zy", "twp_zz"
|
||||
)
|
||||
# for twp-defined = true, we show the plane in gray
|
||||
work_plane_defined = Color([0.7,0.7,0.7,1],[work_plane])
|
||||
work_plane_defined = HalShow([work_plane_defined],c,0,"twp_active")
|
||||
# for twp-active = true, we show the plane in pink
|
||||
work_plane_active = Color([1,0,1,1],[work_plane])
|
||||
work_plane_active = HalShow([work_plane_active],c,1,"twp_active")
|
||||
# create a coordinate system for the twp-plane
|
||||
work_plane_coords = HalCoordsFromNormalAndDirection(c,
|
||||
"twp_ox", "twp_oy", "twp_oz",
|
||||
"twp_xx", "twp_xy", "twp_xz",
|
||||
"twp_zx", "twp_zy", "twp_zz",
|
||||
10,3
|
||||
)
|
||||
work_plane = Collection([work_plane_defined, work_plane_active, work_plane_coords])
|
||||
# make the work_plane hidable
|
||||
work_plane = HalShow([work_plane],c,1,"twp_defined")
|
||||
# move plane by home offset
|
||||
work_plane = Translate([work_plane], machine_zero_x, machine_zero_y, machine_zero_z)
|
||||
# move plane to current work offset
|
||||
work_plane = HalVectorTranslate([work_plane],c,"twp_ox_world","twp_oy_world","twp_oz_world")
|
||||
table = Collection([
|
||||
rotary_table_a,
|
||||
rot_axis,
|
||||
work_coords_tcp,
|
||||
coords,
|
||||
work_plane
|
||||
])
|
||||
#/work-side
|
||||
|
||||
#base
|
||||
base = Collection([
|
||||
# base
|
||||
Box(-3500, -1000, -1500, 3500, 3000, -1300),
|
||||
# column back
|
||||
Box(-2000, 1800, -1500, 2000, 4000, 3500)
|
||||
])
|
||||
base = Color([0.2,0.2,0.2,1], [base] )
|
||||
#/base
|
||||
|
||||
model = Collection([table, spindle_xyz, base])
|
||||
|
||||
#hud
|
||||
myhud = Hud()
|
||||
myhud.show("XYZACB-trsrn")
|
||||
myhud.show("----------------")
|
||||
myhud.show("TWP-Status:")
|
||||
myhud.add_txt("Undefined",0)
|
||||
myhud.add_txt("Defined",1)
|
||||
myhud.add_txt("Tool oriented",2)
|
||||
myhud.add_txt("",[1,2,3])
|
||||
myhud.add_txt("TWP-Orientation Vector X:",[1,2,3])
|
||||
myhud.add_pin("Xx: {:8.3f}","xyzacb-trsrn-gui.twp_xx",[1,2,3])
|
||||
myhud.add_pin("Xy: {:8.3f}","xyzacb-trsrn-gui.twp_xy",[1,2,3])
|
||||
myhud.add_pin("Xz: {:8.3f}","xyzacb-trsrn-gui.twp_xz",[1,2,3])
|
||||
myhud.add_txt("",[1,2,3])
|
||||
myhud.add_txt("TWP-Orientation Vector Z:",[1,2,3])
|
||||
myhud.add_pin("Zx: {:8.3f}","xyzacb-trsrn-gui.twp_zx",[1,2,3])
|
||||
myhud.add_pin("Zy: {:8.3f}","xyzacb-trsrn-gui.twp_zy",[1,2,3])
|
||||
myhud.add_pin("Zz: {:8.3f}","xyzacb-trsrn-gui.twp_zz",[1,2,3])
|
||||
myhud.add_txt("",[1,2,3])
|
||||
myhud.show_tags_in_pin("xyzacb-trsrn-gui.twp_status")
|
||||
#/hud
|
||||
|
||||
main(model, tooltip, work, size=4000, hud=myhud, lat=-60, lon=25)
|
||||
@@ -0,0 +1,560 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# This is a machine simulation for the 'xyzbca-trsrn' simulation config in linuxcnc
|
||||
# Author: David mueller
|
||||
# email: mueller_david@hotmail.com
|
||||
|
||||
import hal
|
||||
import math
|
||||
import sys
|
||||
import os
|
||||
from vismach import *
|
||||
|
||||
# getting the name of the directory
|
||||
# where the this file is present.
|
||||
current = os.path.dirname(os.path.realpath(__file__))
|
||||
# Getting the parent directory name
|
||||
# where the current directory is present.
|
||||
parent = os.path.dirname(current)
|
||||
# adding the parent directory to
|
||||
# the sys.path.
|
||||
sys.path.append(parent)
|
||||
# now we can import the module in the parent
|
||||
# directory.
|
||||
|
||||
# Machine zero as measured from center surface of the rotary c table
|
||||
machine_zero_x = -1000
|
||||
machine_zero_y = 1000
|
||||
machine_zero_z = 2000
|
||||
|
||||
'''
|
||||
try: # Expect files in working directory
|
||||
# NOTE to run this file as standalone python script absolute paths might have to be used to find the stl files
|
||||
# create the work piece from file
|
||||
work_piece = AsciiSTL(filename="./work_piece_1.stl")
|
||||
|
||||
except Exception as detail:
|
||||
print(detail)
|
||||
raise SystemExit("xyzbca-trsrn-gui requires stl files in working directory")
|
||||
'''
|
||||
|
||||
for setting in sys.argv[1:]: exec(setting)
|
||||
|
||||
c = hal.component("xyzbca-trsrn-gui")
|
||||
# axis_x
|
||||
c.newpin("axis_x", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# axis_y
|
||||
c.newpin("axis_y", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# head vertical slide
|
||||
c.newpin("axis_z", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# rotary_a
|
||||
c.newpin("rotary_a", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# rotary_b
|
||||
c.newpin("rotary_b", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# rotary_c
|
||||
c.newpin("rotary_c", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# nutation-angle
|
||||
c.newpin("nutation_angle", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# tool offsets
|
||||
c.newpin("tool_length", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("tool_diameter", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# geometric offsets in the spindle-rotary-assembly
|
||||
c.newpin("pivot_x", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("pivot_z", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("offset_x", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("offset_y", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# rot-point offsets distances from pivot point ( spindle AB)
|
||||
# to rotation axis ( table C)
|
||||
c.newpin("rot_axis_x", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("rot_axis_z", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# selected kinematics
|
||||
c.newpin("kinstype_select", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# work piece show/hide
|
||||
c.newpin("hide_work_piece_1", hal.HAL_BIT, hal.HAL_IN)
|
||||
# spindle body show/hide
|
||||
c.newpin("hide_spindle_body", hal.HAL_BIT, hal.HAL_IN)
|
||||
# work piece show/hide
|
||||
c.newpin("hide_somethingelse", hal.HAL_BIT, hal.HAL_IN)
|
||||
# scale coordinate system indicators
|
||||
c.newpin("scale_coords", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# twp pins
|
||||
c.newpin("twp_status", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_defined", hal.HAL_BIT, hal.HAL_IN)
|
||||
c.newpin("twp_active", hal.HAL_BIT, hal.HAL_IN)
|
||||
# the origin of the twp plane display needs to be independent of the work offsets
|
||||
# because those offsets change as the kinematic switches between world and tool
|
||||
c.newpin("twp_ox_world", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_oy_world", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_oz_world", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# origin of the twp
|
||||
c.newpin("twp_ox", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_oy", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_oz", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
# normal vector defining the temporary work plane as set by user with G68.2
|
||||
c.newpin("twp_zx", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_zy", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_zz", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_xx", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_xy", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
c.newpin("twp_xz", hal.HAL_FLOAT, hal.HAL_IN)
|
||||
|
||||
c.ready()
|
||||
|
||||
|
||||
# give endpoint Z values and radii
|
||||
# resulting cylinder is on the Z axis
|
||||
class HalToolCylinder(CylinderZ):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 6 # default if hal pin not set
|
||||
if (c.tool_diameter > 0): r = c.tool_diameter/2
|
||||
return -c.tool_length, r, 0, r
|
||||
|
||||
# used to create the spindle housing as set by the variable 'pivot_z'
|
||||
class HalSpindleHousingZ(CylinderZ):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 140
|
||||
length = c.pivot_z + 200
|
||||
# start the spindle housing at height 100 above the spindle nose
|
||||
return length, r, 100, r
|
||||
|
||||
# used to create the spindle rotary as set by the variable 'pivot_x'
|
||||
class HalSpindleHousingX(CylinderX):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 120
|
||||
length = c.pivot_x + 150
|
||||
return length, r-30, 0, r
|
||||
|
||||
# used to create an indicator for the variable 'pivot_z'
|
||||
class HalPivotZ(CylinderZ):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 2
|
||||
length = c.pivot_z
|
||||
# start the spindle housing at height 100 above the spindle nose
|
||||
return length, 1, 0, r
|
||||
|
||||
# used to create an indicator for the variable 'pivot_x'
|
||||
class HalPivotX(CylinderX):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 2
|
||||
length = -c.pivot_x
|
||||
return length, r, 0, 1
|
||||
|
||||
# used to create an indicator for the variable 'offset_x'
|
||||
class HalOffsetX(CylinderX):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderX.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 2
|
||||
length = -c.offset_x
|
||||
return length, r, 0, 1
|
||||
|
||||
# used to create an indicator for the variable 'offset_y'
|
||||
class HalOffsetY(CylinderY):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 2
|
||||
length = -c.offset_y
|
||||
return length, r, 0, 1
|
||||
|
||||
# used to create a thin tool-offset indicator
|
||||
class HalToolOffset(CylinderZ):
|
||||
def __init__(self, comp, *args):
|
||||
CylinderZ.__init__(self, *args)
|
||||
self.comp = c
|
||||
|
||||
def coords(self):
|
||||
r = 2
|
||||
return -c.tool_length, 1, 0, r
|
||||
|
||||
class CoordSystem(Collection):
|
||||
# creates a visual object for a coordinate system
|
||||
def __init__(self, comp, r=4, l=500):
|
||||
# set arrow length
|
||||
al = l/10
|
||||
self.parts = [Color([1,0,0,1],[CylinderX(0,r,l,r)]),
|
||||
Color([1,0,0,1],[CylinderX(l,2*r,l+al,1)]),
|
||||
Color([0,1,0,1],[CylinderY(0,r,l,r)]),
|
||||
Color([0,1,0,1],[CylinderY(l,2*r,l+al,1)]),
|
||||
Color([0,0,1,1],[CylinderZ(0,r,l,r)]),
|
||||
Color([0,0,1,1],[CylinderZ(l,2*r,l+al,1)]),
|
||||
]
|
||||
|
||||
class Point(Collection):
|
||||
# creates a visual object for a point
|
||||
def __init__(self, comp, r=1, l=20, color=[1,1,1,1]):
|
||||
self.parts = [Color(color,[CylinderX(-l,r,l,r)]),
|
||||
Color(color,[CylinderY(-l,r,l,r)]),
|
||||
Color(color,[CylinderZ(-l,r,l,r)])
|
||||
]
|
||||
|
||||
# used to rotate parts around the nutation axis
|
||||
class HalRotateNutation(HalVectorRotate):
|
||||
def __init__(self, parts, comp, var, th, x, y, z):
|
||||
HalVectorRotate.__init__(self, parts, comp, var, th, x, y, z)
|
||||
self.parts = parts
|
||||
self.comp = c
|
||||
self.var = var
|
||||
self.th = th
|
||||
|
||||
def get_values(self):
|
||||
th = self.th
|
||||
x = th*sin(radians(c.nutation_angle))
|
||||
y = 0
|
||||
z = th*cos(radians(c.nutation_angle))
|
||||
|
||||
return th, x, y, z
|
||||
|
||||
|
||||
#indicators
|
||||
# create vismach coordinates to show the origin during construction of the model
|
||||
vismach_coords = CoordSystem(c,2,5000)
|
||||
|
||||
# create absolute coordinates
|
||||
abs_coords = CoordSystem(c,8,300)
|
||||
abs_coords = HalScale([abs_coords],c,1,1,1,"scale_coords")
|
||||
# create work coordinates that represent work_offset offset
|
||||
work_coords = CoordSystem(c,2,100)
|
||||
work_coords = HalScale([work_coords],c,1,1,1,"scale_coords")
|
||||
# work coordinates for identity mode
|
||||
work_coords_ident = HalShow([work_coords],c,0,"kinstype_select")
|
||||
# work coordinates for tcp mode
|
||||
work_coords_tcp = HalShow([work_coords],c,1,"kinstype_select")
|
||||
# work coordinates for tool mode
|
||||
work_coords_tool = HalShow([work_coords],c,2,"kinstype_select")
|
||||
# rotate to match the current tool orientation
|
||||
work_coords_tool = HalRotateNutation([work_coords_tool],c,"rotary_a",-1,0,0,0)
|
||||
work_coords_tool = HalRotate([work_coords_tool],c,"rotary_c",1,0,0,1)
|
||||
|
||||
# move the coords to the designated (x,y,z)-home position
|
||||
abs_coords = Translate([abs_coords], machine_zero_x, machine_zero_y, machine_zero_z)
|
||||
work_coords_ident = Translate([work_coords_ident], machine_zero_x, machine_zero_y, machine_zero_z)
|
||||
work_coords_tcp = Translate([work_coords_tcp] , machine_zero_x, machine_zero_y, machine_zero_z)
|
||||
work_coords_tool = Translate([work_coords_tool] , machine_zero_x, machine_zero_y, machine_zero_z)
|
||||
|
||||
# move the work offsets by the work_offset
|
||||
work_coords_ident = HalVectorTranslate([work_coords_ident],c,"twp_ox_world","twp_oy_world","twp_oz_world")
|
||||
work_coords_tcp = HalVectorTranslate([work_coords_tcp] ,c,"twp_ox_world","twp_oy_world","twp_oz_world")
|
||||
work_coords_tool = HalVectorTranslate([work_coords_tool] ,c,"twp_ox_world","twp_oy_world","twp_oz_world")
|
||||
|
||||
# create a visual indicator for the position of the control point
|
||||
ctrl_pt = Point(c)
|
||||
# move the control point indicator to the control-position
|
||||
#ctrl_pt = HalVectorTranslate([ctrl_pt],c,"abs_pos_x","abs_pos_y","abs_pos_z")
|
||||
ctrl_pt = HalTranslate([ctrl_pt],c,"tool_length",0,0,-1)
|
||||
# create an indicator line from the reference point to the work_offset position
|
||||
line_work_offset = Color([1,1,1,1],[HalLine(c,0,0,0,"twp_ox_world","twp_oy_world","twp_oz_world",1,1)])
|
||||
line_work_offset = Translate([line_work_offset], machine_zero_x, machine_zero_y, machine_zero_z)
|
||||
coords = Collection([
|
||||
abs_coords,
|
||||
work_coords_ident,
|
||||
work_coords_tool,
|
||||
#ctrl_pt,
|
||||
line_work_offset,
|
||||
])
|
||||
|
||||
|
||||
# create a visual for the position of the rotational axis of the rotary C table
|
||||
# as set by the user with the "rot-axis-x" and "rot-axis-y" sliders in the axis gui
|
||||
rot_axis = Color([1,1,0.3,1],[CylinderY(0,2,2000,2)])
|
||||
# move the rot_axis indicator by the designated (x,y)-home offset
|
||||
rot_axis= Translate([rot_axis], machine_zero_x, 0, machine_zero_z)
|
||||
# now move it to the position set by the user
|
||||
rot_axis = HalVectorTranslate([rot_axis],c,"rot_axis_x",0,"rot_axis_z")
|
||||
#/indicators
|
||||
|
||||
#tool-side
|
||||
tooltip = Capture()
|
||||
tool_cylinder = Collection([
|
||||
HalToolCylinder(c),
|
||||
# this indicates the spindle nose when no tool-offset is active
|
||||
CylinderZ(-0.1, 0, 0.1, 10),
|
||||
])
|
||||
tool_cylinder = HalShow([tool_cylinder],c,True,"hide_spindle_body",0,1)
|
||||
# create an indicator for the tool-offset when spindle-body is hidden
|
||||
ind_tool_offset = Color([1,0,1,0],[HalToolOffset(c)])
|
||||
tool = Collection([
|
||||
HalTranslate([tooltip], c, "tool_length", 0,0,-1),
|
||||
tool_cylinder,
|
||||
ind_tool_offset
|
||||
])
|
||||
tool = Color([1,0,1,0], [tool] )
|
||||
# create an indicator for the variable pivot_z
|
||||
ind_pivot_z = Color([0,0,0.75,1],[HalPivotZ(CylinderZ)])
|
||||
# create an indicator for the variable pivot_x
|
||||
ind_pivot_x = Color([0.75,0,0,1],[HalPivotX(CylinderX)])
|
||||
# move the pivot_x indicator so it extends from the pivot point
|
||||
ind_pivot_x = HalVectorTranslate([ind_pivot_x],c,"pivot_x",0,"pivot_z",1)
|
||||
# create the spindle housing that contains the spindle
|
||||
spindle_housing = Collection([
|
||||
# spindle
|
||||
Color([0.7,0.7,0,1],[CylinderZ(0,50,50,100)]),
|
||||
Color([0.7,0.7,0,1],[CylinderZ(50,100,100,100)]),
|
||||
# spindle housing vertical length as set by 'pivot_z'
|
||||
Color([0.7,0.7,0,1],[HalSpindleHousingZ(CylinderZ)])
|
||||
])
|
||||
spindle_housing = HalShow([spindle_housing],c,True,"hide_spindle_body",0,1)
|
||||
spindle_housing = Collection([
|
||||
tool,
|
||||
spindle_housing,
|
||||
ind_pivot_z
|
||||
])
|
||||
|
||||
# spindle housing horizontal length as set by 'pivot_x'
|
||||
spindle_housing_horizontal = Color([0.7,0.7,0,1],[HalSpindleHousingX(c)])
|
||||
# move up along the spindle housing
|
||||
spindle_housing_horizontal = Translate([spindle_housing_horizontal],0,0,50)
|
||||
# move farther up by the pivot_z value
|
||||
spindle_housing_horizontal = HalVectorTranslate([spindle_housing_horizontal],c,0,0,"pivot_z",1)
|
||||
# make it hidable
|
||||
spindle_housing_horizontal = HalShow([spindle_housing_horizontal],c,True,"hide_spindle_body",0,1)
|
||||
|
||||
spindle_housing = Collection([
|
||||
spindle_housing,
|
||||
spindle_housing_horizontal,
|
||||
ind_pivot_x
|
||||
])
|
||||
# move the spindle and it's vertical housing by the values set for the pivot lengths
|
||||
# so the vismach origin is in the pivot point
|
||||
spindle_housing = HalVectorTranslate([spindle_housing],c,"pivot_x",0,"pivot_z",-1)
|
||||
|
||||
# create a visual for the rotary c axis
|
||||
ind_axis_c = Color([1,1,0.3,1],[CylinderZ(0,1,400,1)])
|
||||
ind_pivot_point = Collection([
|
||||
Color([1,1,1,1],[CylinderX(-200,1,200,1)]),
|
||||
Color([1,1,1,1],[CylinderY(-200,1,200,1)]),
|
||||
# arrow indicating the up position
|
||||
Color([1,1,1,1],[CylinderY(200,5,210,1)]),
|
||||
# sphere for the actual pivot point
|
||||
Color([1,1,0.3,1],[Sphere(0,0,0,5)]),
|
||||
ind_axis_c
|
||||
])
|
||||
|
||||
# create the part of joint A that attaches to the spindle body
|
||||
spindle_housing_nut = Collection([
|
||||
Color([0.7,0.7,0,1],[CylinderZ(0,60,150,145)]),
|
||||
Color([0.7,0.7,0,1],[CylinderZ(150,145,180,145)])
|
||||
])
|
||||
# rotate the nutation joint to the nutation angle
|
||||
spindle_housing_nut = HalRotate([spindle_housing_nut],c,"nutation_angle",1,0,1,0)
|
||||
spindle_housing_nut = HalShow([spindle_housing_nut],c,True,"hide_spindle_body",0,1)
|
||||
# create HAL-link for a-axis rotational joint"
|
||||
spindle_housing = HalRotateNutation([spindle_housing],c,"rotary_a",-1,0,0,0)
|
||||
# move the joint using the offset values as set by the user in the gui panel
|
||||
spindle_housing = HalVectorTranslate([spindle_housing],c,"offset_x","offset_y",0,-1)
|
||||
spindle_housing = Collection([
|
||||
spindle_housing,
|
||||
spindle_housing_nut
|
||||
])
|
||||
|
||||
# create an indicator for x-offset
|
||||
ind_offset_x = Color([1,0,0,1],[HalOffsetX(c)])
|
||||
# create an indicator for y-offset
|
||||
ind_offset_y = Color([0,1,0,1],[HalOffsetY(c)])
|
||||
ind_offset_y = HalTranslate([ind_offset_y],c,"offset_x", -1,0,0)
|
||||
|
||||
# create an indicator for rotational axis A
|
||||
ind_axis_a = Color([1,1,0.3,1],[CylinderZ(0,1,400,1)])
|
||||
ind_axis_a = HalRotate([ind_axis_a],c,"nutation_angle",1,0,1,0)
|
||||
# move the indicator by the offset values as set by the user in the gui panel
|
||||
ind_axis_a = HalVectorTranslate([ind_axis_a],c,"offset_x","offset_y",0,-1)
|
||||
spindle_indicators = Collection([
|
||||
ind_offset_x,
|
||||
ind_offset_y,
|
||||
ind_pivot_point,
|
||||
ind_axis_a,
|
||||
])
|
||||
|
||||
# create part of joint A that attaches to the body of rotary c
|
||||
spindle_rotary_nut = Collection([
|
||||
Color([1,0.5,0,0],[CylinderZ(180,145,300,145)]),
|
||||
Color([1,0.5,0,0],[CylinderZ(300,145,310,125)]),
|
||||
])
|
||||
# rotate the nutation joint to the nutation angle
|
||||
spindle_rotary_nut = HalRotate([spindle_rotary_nut],c,"nutation_angle",1,0,1,0)
|
||||
|
||||
# create the part that connects the nutation joint to the rotary C
|
||||
spindle_rotary_arm = Color([1,0.5,0,0],[BoxCenteredXY(300, 600, 100)])
|
||||
spindle_rotary_arm = Rotate([spindle_rotary_arm],50,-1,0,0)
|
||||
spindle_rotary_arm = Translate([spindle_rotary_arm],0,120,200)
|
||||
# rotate so it slants in the machine-x direction
|
||||
spindle_rotary_arm = Rotate([spindle_rotary_arm],90,0,0,-1)
|
||||
# create where the plate the arm connects to the xyz-slide
|
||||
spindle_rotary_plate = Color([1,0.5,0,0],[CylinderZ(0,160,50,180)])
|
||||
# move the plate up where it connects to the arm
|
||||
spindle_rotary_plate = Translate([spindle_rotary_plate],0,0,400)
|
||||
spindle_rotary = Collection([
|
||||
spindle_rotary_nut,
|
||||
spindle_rotary_arm,
|
||||
spindle_rotary_plate
|
||||
])
|
||||
# make it hidable
|
||||
spindle_rotary = HalShow([spindle_rotary],c,True,"hide_spindle_body",0,1)
|
||||
# join the two parts to a spindle assembly
|
||||
spindle_assembly = Collection([
|
||||
spindle_housing,
|
||||
spindle_rotary,
|
||||
spindle_indicators
|
||||
])
|
||||
# create HAL-link for c-axis rotational joint"
|
||||
spindle_assembly = HalRotate([spindle_assembly],c,"rotary_c",1,0,0,1)
|
||||
|
||||
|
||||
# add a block for the y-axis to the spindle_assembly
|
||||
slide_xyz = Color([0.6,0.8,0.3,0], [Box(-250, -200, 0, 250, 3000, 500)])
|
||||
# move so the spindle assembly attaches to the bottom front
|
||||
slide_xyz = Translate([slide_xyz],0,0,450)
|
||||
slide_xyz = HalShow([slide_xyz],c,True,"hide_spindle_body",0,1)
|
||||
spindle_xyz = Collection([
|
||||
spindle_assembly,
|
||||
slide_xyz
|
||||
])
|
||||
# move the spindle and it's vertical housing by the values set for the pivot lengths
|
||||
# so the vismach origin is in the center of the spindle nose
|
||||
spindle_xyz = HalVectorTranslate([spindle_xyz],c,"pivot_x",0,"pivot_z")
|
||||
spindle_xyz = HalVectorTranslate([spindle_xyz],c,"offset_x","offset_y",0)
|
||||
# spindle head and y-slide move with x
|
||||
spindle_xyz = HalTranslate([spindle_xyz],c,"axis_x",1,0,0)
|
||||
# spindle head and y-slide move with y
|
||||
spindle_xyz = HalTranslate([spindle_xyz],c,"axis_y",0,1,0)
|
||||
# spindle head and y-slide move with z
|
||||
spindle_xyz = HalTranslate([spindle_xyz],c,"axis_z",0,0,1)
|
||||
# move the spindle_xyz to it's designated home position
|
||||
spindle_xyz = Translate([spindle_xyz], machine_zero_x, machine_zero_y, machine_zero_z)
|
||||
#/tool-side
|
||||
|
||||
#work-side
|
||||
work = Capture()
|
||||
# create a simple cube
|
||||
work_piece = BoxCenteredXY(600, 600, 600)
|
||||
# create a more complex work piece from stl
|
||||
#work_piece = Translate([work_piece],0,0,0)
|
||||
work_piece = Color([0.5,0.5,0.5,0.9], [work_piece])
|
||||
# move the workpiece
|
||||
work_piece = Translate([work_piece],0,300,300)
|
||||
work_piece = HalShow([work_piece],c,1,"hide_work_piece_1",0,1)
|
||||
# create rotary_table_c
|
||||
rotary_table_b = Color([0.1,0.7,0.9,0],[CylinderZ(0,920,-800,920)])
|
||||
# create 'slots' in x and y on the rotary table
|
||||
table_console = Color([0.5,0.5,0.5,0.9],[BoxCenteredXY(1840, 200, 1200)])
|
||||
# move so the surface is on the rotation axis
|
||||
table_console = Translate([table_console],0,-100,0)
|
||||
slot_z_w = Color([1,1,1,1],[BoxCenteredXY(10, 1840, 0.9)])
|
||||
# create indicator of at positive end of x slot
|
||||
slot_pocket = Color([1,1,1,1],[CylinderZ(0,20,1,20)])
|
||||
slot_pocket = Translate([slot_pocket],900,0,0)
|
||||
rotary_table_b = Collection([
|
||||
work,
|
||||
work_piece,
|
||||
rotary_table_b,
|
||||
table_console,
|
||||
slot_z_w,
|
||||
])
|
||||
# rotate into the xz plane
|
||||
rotary_table_b = Rotate([rotary_table_b],90,1,0,0)
|
||||
# create HAL-link for rotary table
|
||||
rotary_table_b = HalRotate([rotary_table_b],c,"rotary_b",-1,0,1,0)
|
||||
rotary_table_b = Translate([rotary_table_b ],0,1700,0)
|
||||
|
||||
# rotate the tcp coords with the rotary table
|
||||
work_coords_tcp = HalRotate([work_coords_tcp],c,"rotary_b",-1,0,1,0)
|
||||
|
||||
# create the work_plane using the origin (as measured from current work offset (world),
|
||||
# normal vector vz(zx,zy,zz) and x-orientation vector vx(xx,xy,xz)
|
||||
# these are used to create a transformation matrix
|
||||
# with y-orientation vector being the cross_product(vz, vx)
|
||||
work_plane = HalGridFromNormalAndDirection(c,
|
||||
"twp_ox", "twp_oy", "twp_oz",
|
||||
"twp_xx", "twp_xy", "twp_xz",
|
||||
"twp_zx", "twp_zy", "twp_zz"
|
||||
)
|
||||
# for twp-defined = true, we show the plane in gray
|
||||
work_plane_defined = Color([0.7,0.7,0.7,1],[work_plane])
|
||||
work_plane_defined = HalShow([work_plane_defined],c,0,"twp_active")
|
||||
# for twp-active = true, we show the plane in pink
|
||||
work_plane_active = Color([1,0,1,1],[work_plane])
|
||||
work_plane_active = HalShow([work_plane_active],c,1,"twp_active")
|
||||
# create a coordinate system for the twp-plane
|
||||
work_plane_coords = HalCoordsFromNormalAndDirection(c,
|
||||
"twp_ox", "twp_oy", "twp_oz",
|
||||
"twp_xx", "twp_xy", "twp_xz",
|
||||
"twp_zx", "twp_zy", "twp_zz",
|
||||
10,3
|
||||
)
|
||||
work_plane = Collection([work_plane_defined, work_plane_active, work_plane_coords])
|
||||
# make the work_plane hidable
|
||||
work_plane = HalShow([work_plane],c,1,"twp_defined")
|
||||
# move plane by home offset
|
||||
work_plane = Translate([work_plane], machine_zero_x, machine_zero_y, machine_zero_z)
|
||||
# move plane to current work offset
|
||||
work_plane = HalVectorTranslate([work_plane],c,"twp_ox_world","twp_oy_world","twp_oz_world")
|
||||
table = Collection([
|
||||
rotary_table_b,
|
||||
rot_axis,
|
||||
work_coords_tcp,
|
||||
coords,
|
||||
work_plane,
|
||||
])
|
||||
|
||||
#/work-side
|
||||
|
||||
#base
|
||||
base = Collection([
|
||||
# base
|
||||
Box(-3500, -1000, -1500, 3500, 3000, -1300),
|
||||
# column back
|
||||
Box(-2000, 1800, -1500, 2000, 4000, 3500)
|
||||
])
|
||||
base = Color([0.2,0.2,0.2,1], [base] )
|
||||
#/base
|
||||
|
||||
model = Collection([table, spindle_xyz, base,])
|
||||
|
||||
#hud
|
||||
myhud = Hud()
|
||||
myhud.show("XYZBCA-trsrn")
|
||||
myhud.show("----------------")
|
||||
myhud.show("TWP-Status:")
|
||||
myhud.add_txt("Undefined",0)
|
||||
myhud.add_txt("Defined",1)
|
||||
myhud.add_txt("Tool oriented",2)
|
||||
myhud.add_txt("",[1,2,3])
|
||||
myhud.add_txt("TWP-Orientation Vector X:",[1,2,3])
|
||||
myhud.add_pin("Xx: {:8.3f}","xyzbca-trsrn-gui.twp_xx",[1,2,3])
|
||||
myhud.add_pin("Xy: {:8.3f}","xyzbca-trsrn-gui.twp_xy",[1,2,3])
|
||||
myhud.add_pin("Xz: {:8.3f}","xyzbca-trsrn-gui.twp_xz",[1,2,3])
|
||||
myhud.add_txt("",[1,2,3])
|
||||
myhud.add_txt("TWP-Orientation Vector Z:",[1,2,3])
|
||||
myhud.add_pin("Zx: {:8.3f}","xyzbca-trsrn-gui.twp_zx",[1,2,3])
|
||||
myhud.add_pin("Zy: {:8.3f}","xyzbca-trsrn-gui.twp_zy",[1,2,3])
|
||||
myhud.add_pin("Zz: {:8.3f}","xyzbca-trsrn-gui.twp_zz",[1,2,3])
|
||||
myhud.add_txt("",[1,2,3])
|
||||
myhud.show_tags_in_pin("xyzbca-trsrn-gui.twp_status")
|
||||
|
||||
#/hud
|
||||
|
||||
main(model, tooltip, work, size=4000, hud=myhud, lat=-60, lon=25)
|
||||
@@ -0,0 +1,16 @@
|
||||
This is a simulation configuration for a 6 axis machine with the following kinematic:
|
||||
|
||||
XYZ - linear cartesian
|
||||
A - table rotary
|
||||
C - spindle rotary
|
||||
B - spindle nutating
|
||||
|
||||
The spindle rotary assembly is fully configurable using sliders in the side panel of the gui
|
||||
|
||||
The kinematic component includes the following modes:
|
||||
|
||||
IDENTITY: Trivial kinematics with a one-to-one mapping of joints to axes
|
||||
TCP: Coordinated xyz motion with rotation around the tool center point
|
||||
TOOL: Coordinated xyz motion in the current tool coordinate system
|
||||
|
||||
Also see the README in the parent directory.
|
||||
@@ -0,0 +1,102 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<pyvcp>
|
||||
<vbox>
|
||||
<vbox>
|
||||
<labelframe text="A Rotation Axis Offset">
|
||||
<font>("Helvetica",14)</font>
|
||||
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" "</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>"Physical location of rotation-axis in the model\n in absolute machine coordinates:"</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" y: -1000\n z: -2000"</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" "</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>"these are also the correct 'rot-axis' settings\n for this model"</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"y-rot-axis: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"y-rot-axis"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>-1000</initval>
|
||||
<min_>-1900</min_>
|
||||
<max_>1000</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"z-rot-axis: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"z-rot-axis"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>-2000</initval>
|
||||
<min_>-2900</min_>
|
||||
<max_>1100</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" "</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"Use hover + mouse wheel to change values"</text>
|
||||
<font>("Helvetica",6)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</labelframe>
|
||||
</vbox>
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" To test change values above\n reload and restart\n the demo gcode "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</vbox>
|
||||
</pyvcp>
|
||||
@@ -0,0 +1,632 @@
|
||||
solid Part2
|
||||
facet normal -1.000000e+00 0.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex -2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
vertex -2.500000e+02 2.500000e+02 0.000000e+00
|
||||
vertex -2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+00 -1.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
vertex -2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
vertex -2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 -1.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex 2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
vertex -2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
|
||||
outer loop
|
||||
vertex -2.500000e+02 2.500000e+02 0.000000e+00
|
||||
vertex 2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
vertex -2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1.000000e+00 0.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1.000000e+00 0.000000e+00 -0.000000e+00
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 0.000000e+00
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
|
||||
outer loop
|
||||
vertex -2.500000e+02 2.500000e+02 0.000000e+00
|
||||
vertex 2.500000e+02 2.500000e+02 0.000000e+00
|
||||
vertex 2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.000000e+00 -0.000000e+00 -0.000000e+00
|
||||
outer loop
|
||||
vertex -2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex -2.500000e+02 2.500000e+02 0.000000e+00
|
||||
vertex -2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 -7.071068e-01 7.071068e-01
|
||||
outer loop
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
vertex -5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
vertex -2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 -7.071068e-01 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
vertex -2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -7.071068e-01 0.000000e+00 7.071068e-01
|
||||
outer loop
|
||||
vertex -5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
vertex -2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex -2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 0.000000e+00 7.071069e-01
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 2.032670e+02 -6.905210e-16 3.467330e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 1.745782e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.032670e+02 -6.905210e-16 3.467330e+02
|
||||
vertex 2.006929e+02 -1.947439e+01 3.493071e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 3.070633e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.006929e+02 -1.947439e+01 3.493071e+02
|
||||
vertex 1.933181e+02 -3.631866e+01 3.566819e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 3.842491e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.933181e+02 -3.631866e+01 3.566819e+02
|
||||
vertex 1.821387e+02 -4.825789e+01 3.678613e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 4.600219e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.821387e+02 -4.825789e+01 3.678613e+02
|
||||
vertex 1.686644e+02 -5.367963e+01 3.813356e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 5.675223e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.686644e+02 -5.367963e+01 3.813356e+02
|
||||
vertex 1.547152e+02 -5.185163e+01 3.952848e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 6.583240e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.547152e+02 -5.185163e+01 3.952848e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.524362e-02 9.957342e-01 -6.524364e-02
|
||||
outer loop
|
||||
vertex 1.193599e+02 -5.185163e+01 3.599295e+02
|
||||
vertex 1.547152e+02 -5.185163e+01 3.952848e+02
|
||||
vertex 1.333091e+02 -5.367963e+01 3.459802e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.524360e-02 9.957342e-01 -6.524363e-02
|
||||
outer loop
|
||||
vertex 1.547152e+02 -5.185163e+01 3.952848e+02
|
||||
vertex 1.686644e+02 -5.367963e+01 3.813356e+02
|
||||
vertex 1.333091e+02 -5.367963e+01 3.459802e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.935088e-01 9.618257e-01 1.935089e-01
|
||||
outer loop
|
||||
vertex 1.686644e+02 -5.367963e+01 3.813356e+02
|
||||
vertex 1.467833e+02 -4.825789e+01 3.325060e+02
|
||||
vertex 1.333091e+02 -5.367963e+01 3.459802e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 1.912466e-07 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.467833e+02 -4.825789e+01 3.325060e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 1.333091e+02 -5.367963e+01 3.459802e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071070e-01 2.229500e-07 7.071066e-01
|
||||
outer loop
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 1.193599e+02 -5.185163e+01 3.599295e+02
|
||||
vertex 1.333091e+02 -5.367963e+01 3.459802e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.935088e-01 9.618257e-01 1.935089e-01
|
||||
outer loop
|
||||
vertex 1.821387e+02 -4.825789e+01 3.678613e+02
|
||||
vertex 1.467833e+02 -4.825789e+01 3.325060e+02
|
||||
vertex 1.686644e+02 -5.367963e+01 3.813356e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 3.151846e-01 8.951633e-01 -3.151847e-01
|
||||
outer loop
|
||||
vertex 1.068195e+02 -4.302078e+01 3.724698e+02
|
||||
vertex 1.421749e+02 -4.302078e+01 4.078251e+02
|
||||
vertex 1.193599e+02 -5.185163e+01 3.599295e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 3.151847e-01 8.951632e-01 -3.151848e-01
|
||||
outer loop
|
||||
vertex 1.421749e+02 -4.302078e+01 4.078251e+02
|
||||
vertex 1.547152e+02 -5.185163e+01 3.952848e+02
|
||||
vertex 1.193599e+02 -5.185163e+01 3.599295e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 3.410209e-07 7.071069e-01
|
||||
outer loop
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 1.068195e+02 -4.302078e+01 3.724698e+02
|
||||
vertex 1.193599e+02 -5.185163e+01 3.599295e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 3.664266e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.421749e+02 -4.302078e+01 4.078251e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
vertex 1.547152e+02 -5.185163e+01 3.952848e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 0.000000e+00 1.000000e+00
|
||||
outer loop
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
vertex -5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex -5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -7.071068e-01 0.000000e+00 7.071068e-01
|
||||
outer loop
|
||||
vertex -5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex -2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex -5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 0.000000e+00 1.000000e+00
|
||||
outer loop
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex -5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 7.037430e-07 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.421749e+02 -4.302078e+01 4.078251e+02
|
||||
vertex 1.327370e+02 -2.837975e+01 4.172629e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071069e-01 -4.915623e-07 7.071066e-01
|
||||
outer loop
|
||||
vertex 1.327370e+02 -2.837975e+01 4.172629e+02
|
||||
vertex 1.276764e+02 -9.905863e+00 4.223236e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 -0.000000e+00 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.276764e+02 -9.905863e+00 4.223236e+02
|
||||
vertex 1.276764e+02 9.905863e+00 4.223236e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 0.000000e+00 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.276764e+02 9.905863e+00 4.223236e+02
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -4.261270e-01 7.980172e-01 4.261272e-01
|
||||
outer loop
|
||||
vertex 1.821387e+02 -4.825789e+01 3.678613e+02
|
||||
vertex 1.579628e+02 -3.631866e+01 3.213266e+02
|
||||
vertex 1.467833e+02 -4.825789e+01 3.325060e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071064e-01 -8.249345e-08 7.071072e-01
|
||||
outer loop
|
||||
vertex 1.579628e+02 -3.631866e+01 3.213266e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 1.467833e+02 -4.825789e+01 3.325060e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -4.261273e-01 7.980170e-01 4.261273e-01
|
||||
outer loop
|
||||
vertex 1.933181e+02 -3.631866e+01 3.566819e+02
|
||||
vertex 1.579628e+02 -3.631866e+01 3.213266e+02
|
||||
vertex 1.821387e+02 -4.825789e+01 3.678613e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 5.225582e-01 6.736956e-01 -5.225583e-01
|
||||
outer loop
|
||||
vertex 9.738170e+01 -2.837975e+01 3.819076e+02
|
||||
vertex 1.327370e+02 -2.837975e+01 4.172629e+02
|
||||
vertex 1.068195e+02 -4.302078e+01 3.724698e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 5.225580e-01 6.736957e-01 -5.225583e-01
|
||||
outer loop
|
||||
vertex 1.327370e+02 -2.837975e+01 4.172629e+02
|
||||
vertex 1.421749e+02 -4.302078e+01 4.078251e+02
|
||||
vertex 1.068195e+02 -4.302078e+01 3.724698e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 2.969849e-07 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 9.738170e+01 -2.837975e+01 3.819076e+02
|
||||
vertex 1.068195e+02 -4.302078e+01 3.724698e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.011944e-01 5.264319e-01 6.011944e-01
|
||||
outer loop
|
||||
vertex 1.933181e+02 -3.631866e+01 3.566819e+02
|
||||
vertex 1.653375e+02 -1.947439e+01 3.139518e+02
|
||||
vertex 1.579628e+02 -3.631866e+01 3.213266e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 6.091928e-07 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.653375e+02 -1.947439e+01 3.139518e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 1.579628e+02 -3.631866e+01 3.213266e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.011941e-01 5.264323e-01 6.011944e-01
|
||||
outer loop
|
||||
vertex 2.006929e+02 -1.947439e+01 3.493071e+02
|
||||
vertex 1.653375e+02 -1.947439e+01 3.139518e+02
|
||||
vertex 1.933181e+02 -3.631866e+01 3.566819e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.593572e-01 3.612418e-01 -6.593575e-01
|
||||
outer loop
|
||||
vertex 9.232107e+01 -9.905863e+00 3.869683e+02
|
||||
vertex 1.276764e+02 -9.905863e+00 4.223236e+02
|
||||
vertex 9.738170e+01 -2.837975e+01 3.819076e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.593574e-01 3.612416e-01 -6.593575e-01
|
||||
outer loop
|
||||
vertex 1.276764e+02 -9.905863e+00 4.223236e+02
|
||||
vertex 1.327370e+02 -2.837975e+01 4.172629e+02
|
||||
vertex 9.738170e+01 -2.837975e+01 3.819076e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071069e-01 -1.940928e-07 7.071066e-01
|
||||
outer loop
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 9.232107e+01 -9.905863e+00 3.869683e+02
|
||||
vertex 9.738170e+01 -2.837975e+01 3.819076e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.950667e-01 1.837499e-01 6.950670e-01
|
||||
outer loop
|
||||
vertex 2.006929e+02 -1.947439e+01 3.493071e+02
|
||||
vertex 1.679117e+02 -1.781979e-14 3.113776e+02
|
||||
vertex 1.653375e+02 -1.947439e+01 3.139518e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071065e-01 -4.679821e-07 7.071071e-01
|
||||
outer loop
|
||||
vertex 1.679117e+02 -1.781979e-14 3.113776e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 1.653375e+02 -1.947439e+01 3.139518e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.950670e-01 1.837494e-01 6.950670e-01
|
||||
outer loop
|
||||
vertex 2.032670e+02 -6.905210e-16 3.467330e+02
|
||||
vertex 1.679117e+02 -1.781979e-14 3.113776e+02
|
||||
vertex 2.006929e+02 -1.947439e+01 3.493071e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071066e-01 0.000000e+00 -7.071069e-01
|
||||
outer loop
|
||||
vertex 9.232107e+01 9.905863e+00 3.869683e+02
|
||||
vertex 1.276764e+02 9.905863e+00 4.223236e+02
|
||||
vertex 9.232107e+01 -9.905863e+00 3.869683e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071066e-01 0.000000e+00 -7.071069e-01
|
||||
outer loop
|
||||
vertex 1.276764e+02 9.905863e+00 4.223236e+02
|
||||
vertex 1.276764e+02 -9.905863e+00 4.223236e+02
|
||||
vertex 9.232107e+01 -9.905863e+00 3.869683e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071069e-01 0.000000e+00 7.071066e-01
|
||||
outer loop
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 9.232107e+01 9.905863e+00 3.869683e+02
|
||||
vertex 9.232107e+01 -9.905863e+00 3.869683e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.950669e-01 -1.837499e-01 6.950669e-01
|
||||
outer loop
|
||||
vertex 2.032670e+02 -6.905210e-16 3.467330e+02
|
||||
vertex 1.653375e+02 1.947439e+01 3.139518e+02
|
||||
vertex 1.679117e+02 -1.781979e-14 3.113776e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071065e-01 4.679821e-07 7.071071e-01
|
||||
outer loop
|
||||
vertex 1.653375e+02 1.947439e+01 3.139518e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 1.679117e+02 -1.781979e-14 3.113776e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.950668e-01 -1.837494e-01 6.950671e-01
|
||||
outer loop
|
||||
vertex 2.006929e+02 1.947439e+01 3.493071e+02
|
||||
vertex 1.653375e+02 1.947439e+01 3.139518e+02
|
||||
vertex 2.032670e+02 -6.905210e-16 3.467330e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071069e-01 1.940928e-07 7.071066e-01
|
||||
outer loop
|
||||
vertex 9.738170e+01 2.837975e+01 3.819076e+02
|
||||
vertex 9.232107e+01 9.905863e+00 3.869683e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071070e-01 -2.229500e-07 7.071066e-01
|
||||
outer loop
|
||||
vertex 1.333091e+02 5.367963e+01 3.459802e+02
|
||||
vertex 1.193599e+02 5.185163e+01 3.599295e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 -3.410209e-07 7.071069e-01
|
||||
outer loop
|
||||
vertex 1.193599e+02 5.185163e+01 3.599295e+02
|
||||
vertex 1.068195e+02 4.302078e+01 3.724698e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 -2.969849e-07 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.068195e+02 4.302078e+01 3.724698e+02
|
||||
vertex 9.738170e+01 2.837975e+01 3.819076e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 -6.091928e-07 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.653375e+02 1.947439e+01 3.139518e+02
|
||||
vertex 1.579628e+02 3.631866e+01 3.213266e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071064e-01 8.249345e-08 7.071072e-01
|
||||
outer loop
|
||||
vertex 1.579628e+02 3.631866e+01 3.213266e+02
|
||||
vertex 1.467833e+02 4.825789e+01 3.325060e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 -1.912466e-07 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.467833e+02 4.825789e+01 3.325060e+02
|
||||
vertex 1.333091e+02 5.367963e+01 3.459802e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 -1.745782e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 2.006929e+02 1.947439e+01 3.493071e+02
|
||||
vertex 2.032670e+02 -6.905210e-16 3.467330e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.593573e-01 -3.612418e-01 -6.593575e-01
|
||||
outer loop
|
||||
vertex 9.738170e+01 2.837975e+01 3.819076e+02
|
||||
vertex 1.327370e+02 2.837975e+01 4.172629e+02
|
||||
vertex 9.232107e+01 9.905863e+00 3.869683e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.593573e-01 -3.612416e-01 -6.593576e-01
|
||||
outer loop
|
||||
vertex 1.327370e+02 2.837975e+01 4.172629e+02
|
||||
vertex 1.276764e+02 9.905863e+00 4.223236e+02
|
||||
vertex 9.232107e+01 9.905863e+00 3.869683e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071073e-01 3.038186e-07 7.071063e-01
|
||||
outer loop
|
||||
vertex 1.327370e+02 2.837975e+01 4.172629e+02
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 1.276764e+02 9.905863e+00 4.223236e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.011943e-01 -5.264319e-01 6.011945e-01
|
||||
outer loop
|
||||
vertex 2.006929e+02 1.947439e+01 3.493071e+02
|
||||
vertex 1.579628e+02 3.631866e+01 3.213266e+02
|
||||
vertex 1.653375e+02 1.947439e+01 3.139518e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 -3.070633e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 1.933181e+02 3.631866e+01 3.566819e+02
|
||||
vertex 2.006929e+02 1.947439e+01 3.493071e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.011942e-01 -5.264323e-01 6.011942e-01
|
||||
outer loop
|
||||
vertex 1.933181e+02 3.631866e+01 3.566819e+02
|
||||
vertex 1.579628e+02 3.631866e+01 3.213266e+02
|
||||
vertex 2.006929e+02 1.947439e+01 3.493071e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 5.225581e-01 -6.736956e-01 -5.225584e-01
|
||||
outer loop
|
||||
vertex 1.068195e+02 4.302078e+01 3.724698e+02
|
||||
vertex 1.421749e+02 4.302078e+01 4.078251e+02
|
||||
vertex 9.738170e+01 2.837975e+01 3.819076e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 5.225581e-01 -6.736957e-01 -5.225582e-01
|
||||
outer loop
|
||||
vertex 1.421749e+02 4.302078e+01 4.078251e+02
|
||||
vertex 1.327370e+02 2.837975e+01 4.172629e+02
|
||||
vertex 9.738170e+01 2.837975e+01 3.819076e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071065e-01 -3.015717e-07 7.071071e-01
|
||||
outer loop
|
||||
vertex 1.421749e+02 4.302078e+01 4.078251e+02
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 1.327370e+02 2.837975e+01 4.172629e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -4.261271e-01 -7.980172e-01 4.261271e-01
|
||||
outer loop
|
||||
vertex 1.933181e+02 3.631866e+01 3.566819e+02
|
||||
vertex 1.467833e+02 4.825789e+01 3.325060e+02
|
||||
vertex 1.579628e+02 3.631866e+01 3.213266e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 -3.842491e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 1.821387e+02 4.825789e+01 3.678613e+02
|
||||
vertex 1.933181e+02 3.631866e+01 3.566819e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -4.261272e-01 -7.980170e-01 4.261274e-01
|
||||
outer loop
|
||||
vertex 1.821387e+02 4.825789e+01 3.678613e+02
|
||||
vertex 1.467833e+02 4.825789e+01 3.325060e+02
|
||||
vertex 1.933181e+02 3.631866e+01 3.566819e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 3.151846e-01 -8.951633e-01 -3.151847e-01
|
||||
outer loop
|
||||
vertex 1.193599e+02 5.185163e+01 3.599295e+02
|
||||
vertex 1.547152e+02 5.185163e+01 3.952848e+02
|
||||
vertex 1.068195e+02 4.302078e+01 3.724698e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 3.151847e-01 -8.951632e-01 -3.151848e-01
|
||||
outer loop
|
||||
vertex 1.547152e+02 5.185163e+01 3.952848e+02
|
||||
vertex 1.421749e+02 4.302078e+01 4.078251e+02
|
||||
vertex 1.068195e+02 4.302078e+01 3.724698e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 -9.688457e-09 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.547152e+02 5.185163e+01 3.952848e+02
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 1.421749e+02 4.302078e+01 4.078251e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.935088e-01 -9.618257e-01 1.935089e-01
|
||||
outer loop
|
||||
vertex 1.821387e+02 4.825789e+01 3.678613e+02
|
||||
vertex 1.333091e+02 5.367963e+01 3.459802e+02
|
||||
vertex 1.467833e+02 4.825789e+01 3.325060e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 -4.600219e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 1.686644e+02 5.367963e+01 3.813356e+02
|
||||
vertex 1.821387e+02 4.825789e+01 3.678613e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.935088e-01 -9.618257e-01 1.935089e-01
|
||||
outer loop
|
||||
vertex 1.686644e+02 5.367963e+01 3.813356e+02
|
||||
vertex 1.333091e+02 5.367963e+01 3.459802e+02
|
||||
vertex 1.821387e+02 4.825789e+01 3.678613e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.524362e-02 -9.957342e-01 -6.524364e-02
|
||||
outer loop
|
||||
vertex 1.333091e+02 5.367963e+01 3.459802e+02
|
||||
vertex 1.686644e+02 5.367963e+01 3.813356e+02
|
||||
vertex 1.193599e+02 5.185163e+01 3.599295e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.524361e-02 -9.957342e-01 -6.524362e-02
|
||||
outer loop
|
||||
vertex 1.686644e+02 5.367963e+01 3.813356e+02
|
||||
vertex 1.547152e+02 5.185163e+01 3.952848e+02
|
||||
vertex 1.193599e+02 5.185163e+01 3.599295e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 -3.417517e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 1.547152e+02 5.185163e+01 3.952848e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 -5.675223e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.686644e+02 5.367963e+01 3.813356e+02
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 1.547152e+02 5.185163e+01 3.952848e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 1.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex -2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 2.500000e+02 2.500000e+02 0.000000e+00
|
||||
vertex -2.500000e+02 2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+00 1.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex -2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 2.500000e+02 2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+00 1.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex -5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex -2.500000e+02 2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 1.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex -2.500000e+02 2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
endsolid
|
||||
@@ -0,0 +1,290 @@
|
||||
[EMC]
|
||||
VERSION = 1.1
|
||||
MACHINE = xyzacb-trsrn (switchkins)
|
||||
DEBUG = 0
|
||||
|
||||
[DISPLAY]
|
||||
EMBED_TAB_NAME = TCP
|
||||
EMBED_TAB_COMMAND = pyvcp pyvcp_embed_tab_tcp.xml
|
||||
|
||||
GEOMETRY = XYZABC
|
||||
OPEN_FILE = ../demos/incremental_repetition.ngc
|
||||
PYVCP = ./xyzacb-trsrn.xml
|
||||
JOG_AXES = XYZABC
|
||||
DISPLAY = axis
|
||||
MAX_ANGULAR_VELOCITY = 360
|
||||
MAX_LINEAR_VELOCITY = 1500
|
||||
POSITION_OFFSET = RELATIVE
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
MAX_FEED_OVERRIDE = 2
|
||||
PROGRAM_PREFIX = ../demos
|
||||
INTRO_GRAPHIC = emc2.gif
|
||||
INTRO_TIME = 1
|
||||
#EDITOR = gedit
|
||||
TOOL_EDITOR = tooledit z diam
|
||||
|
||||
TKPKG = Ngcgui 1.0
|
||||
NGCGUI_FONT = Helvetica -12 normal
|
||||
|
||||
[RS274NGC]
|
||||
RS274NGC_STARTUP_CODE = G17 G21 G40 G49 G54 G64 P0.001 G80 G90 G92.1 G94 G97 G98
|
||||
ON_ABORT_COMMAND = o <on_abort_no_twp_reset> call
|
||||
#ON_ABORT_COMMAND = o <on_abort_with_twp_reset> call
|
||||
SUBROUTINE_PATH = ../remap_subs:../demos
|
||||
HAL_PIN_VARS = 1
|
||||
REMAP = M428 modalgroup=10 ngc=428remap
|
||||
REMAP = M429 modalgroup=10 ngc=429remap
|
||||
REMAP = M430 modalgroup=10 ngc=430remap
|
||||
|
||||
REMAP = G53.1 modalgroup=1 argspec=p ngc=g531remap
|
||||
REMAP = G53.3 modalgroup=1 argspec=pxyz ngc=g533remap
|
||||
REMAP = G53.6 modalgroup=1 argspec=p ngc=g536remap
|
||||
REMAP = M530 modalgroup=10 python=g53x_core
|
||||
|
||||
REMAP = G68.2 modalgroup=1 argspec=pqxyzijkr python=g682
|
||||
REMAP = G68.3 modalgroup=1 argspec=xyzr python=g683
|
||||
REMAP = G68.4 modalgroup=1 argspec=pqxyzijkr python=g684
|
||||
|
||||
REMAP = G69 modalgroup=1 ngc=g69remap
|
||||
REMAP = M469 modalgroup=10 python=g69_core
|
||||
|
||||
PARAMETER_FILE = xyzacb-trsrn.var
|
||||
|
||||
[PYTHON]
|
||||
# where to find the Python code:
|
||||
# code specific for this configuration
|
||||
PATH_APPEND = ../python
|
||||
# import the following Python module
|
||||
TOPLEVEL = ../python/toplevel.py
|
||||
# the higher the more verbose tracing of the Python plugin
|
||||
LOG_LEVEL = 3
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = xyzacb_trsrn
|
||||
JOINTS = 6
|
||||
|
||||
[TWP]
|
||||
# this defines the primary spindle rotation
|
||||
PRIMARY = C
|
||||
# this defines the secnodary spindle rotation (ie the one closest to the tool)
|
||||
SECONDARY = B
|
||||
|
||||
[HAL]
|
||||
HALUI = halui
|
||||
HALFILE = LIB:basic_sim.tcl
|
||||
POSTGUI_HALFILE = xyzacb-trsrn_postgui.hal
|
||||
|
||||
#HALCMD = loadusr ../python/feed_zero.py
|
||||
|
||||
|
||||
# signal reflecting twp states (0=undefined, 1=defined, 2=active)
|
||||
HALCMD = net twp-status <= motion.analog-out-02
|
||||
|
||||
# connection required for control of motion.switchkins-type
|
||||
HALCMD = net :kinstype-select <= motion.analog-out-03 => motion.switchkins-type
|
||||
|
||||
# connections required for the kinematics component
|
||||
HALCMD = net :tool-offset motion.tooloffset.z xyzacb_trsrn_kins.tool-offset-z
|
||||
HALCMD = net :rot-axis-y xyzacb_trsrn_kins.y-rot-axis
|
||||
HALCMD = net :rot-axis-z xyzacb_trsrn_kins.z-rot-axis
|
||||
HALCMD = net :nutation-angle xyzacb_trsrn_kins.nut-angle
|
||||
HALCMD = net :pivot-y xyzacb_trsrn_kins.y-pivot
|
||||
HALCMD = net :pivot-z xyzacb_trsrn_kins.z-pivot
|
||||
HALCMD = net :offset-x xyzacb_trsrn_kins.x-offset
|
||||
HALCMD = net :offset-y xyzacb_trsrn_kins.y-offset
|
||||
|
||||
# load the required twp-helper component and its hal connections
|
||||
HALCMD = loadusr -W ../python/twp-helper-comp.py
|
||||
#twp-status
|
||||
HALCMD = net twp-status => twp-helper-comp.twp-status
|
||||
HALCMD = net twp-is-defined <= twp-helper-comp.twp-is-defined
|
||||
HALCMD = net twp-is-active <= twp-helper-comp.twp-is-active
|
||||
# current twp parameters
|
||||
HALCMD = net twp-ox-world <= twp-helper-comp.twp-ox-world
|
||||
HALCMD = net twp-oy-world <= twp-helper-comp.twp-oy-world
|
||||
HALCMD = net twp-oz-world <= twp-helper-comp.twp-oz-world
|
||||
HALCMD = net twp-ox <= twp-helper-comp.twp-ox
|
||||
HALCMD = net twp-oy <= twp-helper-comp.twp-oy
|
||||
HALCMD = net twp-oz <= twp-helper-comp.twp-oz
|
||||
HALCMD = net twp-zx <= twp-helper-comp.twp-zx
|
||||
HALCMD = net twp-zy <= twp-helper-comp.twp-zy
|
||||
HALCMD = net twp-zz <= twp-helper-comp.twp-zz
|
||||
HALCMD = net twp-xx <= twp-helper-comp.twp-xx
|
||||
HALCMD = net twp-xy <= twp-helper-comp.twp-xy
|
||||
HALCMD = net twp-xz <= twp-helper-comp.twp-xz
|
||||
|
||||
# load the optional vismach-gui and its hal connections
|
||||
HALCMD = loadusr -W ../vismach/xyzacb-trsrn-gui.py
|
||||
# vismach machine signals
|
||||
HALCMD = net :axis-x joint.0.pos-fb xyzacb-trsrn-gui.axis_x
|
||||
HALCMD = net :axis-y joint.1.pos-fb xyzacb-trsrn-gui.axis_y
|
||||
HALCMD = net :axis-z joint.2.pos-fb xyzacb-trsrn-gui.axis_z
|
||||
HALCMD = net :rotary-a joint.3.pos-fb xyzacb-trsrn-gui.rotary_a
|
||||
HALCMD = net :rotary-b joint.4.pos-fb xyzacb-trsrn-gui.rotary_b
|
||||
HALCMD = net :rotary-c joint.5.pos-fb xyzacb-trsrn-gui.rotary_c
|
||||
HALCMD = net :tool-diam halui.tool.diameter xyzacb-trsrn-gui.tool_diameter
|
||||
HALCMD = net :tool-offset xyzacb-trsrn-gui.tool_length
|
||||
HALCMD = net :kinstype-select xyzacb-trsrn-gui.kinstype_select
|
||||
HALCMD = net :nutation-angle xyzacb-trsrn-gui.nutation_angle
|
||||
HALCMD = net :pivot-y xyzacb-trsrn-gui.pivot_y
|
||||
HALCMD = net :pivot-z xyzacb-trsrn-gui.pivot_z
|
||||
HALCMD = net :offset-x xyzacb-trsrn-gui.offset_x
|
||||
HALCMD = net :offset-y xyzacb-trsrn-gui.offset_y
|
||||
HALCMD = net :rot-axis-y xyzacb-trsrn-gui.rot_axis_y
|
||||
HALCMD = net :rot-axis-z xyzacb-trsrn-gui.rot_axis_z
|
||||
HALCMD = net :hide-work-piece-1 xyzacb-trsrn-gui.hide_work_piece_1
|
||||
HALCMD = net :hide-spindle-body xyzacb-trsrn-gui.hide_spindle_body
|
||||
HALCMD = net :scale-coords xyzacb-trsrn-gui.scale_coords
|
||||
# vismach twp signals
|
||||
HALCMD = net twp-ox-world xyzacb-trsrn-gui.twp_ox_world
|
||||
HALCMD = net twp-oy-world xyzacb-trsrn-gui.twp_oy_world
|
||||
HALCMD = net twp-oz-world xyzacb-trsrn-gui.twp_oz_world
|
||||
HALCMD = net twp-ox xyzacb-trsrn-gui.twp_ox
|
||||
HALCMD = net twp-oy xyzacb-trsrn-gui.twp_oy
|
||||
HALCMD = net twp-oz xyzacb-trsrn-gui.twp_oz
|
||||
HALCMD = net twp-zx xyzacb-trsrn-gui.twp_zx
|
||||
HALCMD = net twp-zy xyzacb-trsrn-gui.twp_zy
|
||||
HALCMD = net twp-zz xyzacb-trsrn-gui.twp_zz
|
||||
HALCMD = net twp-xx xyzacb-trsrn-gui.twp_xx
|
||||
HALCMD = net twp-xy xyzacb-trsrn-gui.twp_xy
|
||||
HALCMD = net twp-xz xyzacb-trsrn-gui.twp_xz
|
||||
HALCMD = net twp-status xyzacb-trsrn-gui.twp_status
|
||||
HALCMD = net twp-is-defined xyzacb-trsrn-gui.twp_defined
|
||||
HALCMD = net twp-is-active xyzacb-trsrn-gui.twp_active
|
||||
|
||||
|
||||
[HALUI]
|
||||
# NOTE: kinstype==0 is identity kins because sparm=identityfirst
|
||||
# M428:identity kins (motion.switchkins-type==0 startupDEFAULT)
|
||||
# M429: tcp kins (motion.switchkins-type==1)
|
||||
# M430: tool kins (motion.switchkins-type==2)
|
||||
MDI_COMMAND = M428
|
||||
MDI_COMMAND = M429
|
||||
MDI_COMMAND = M430
|
||||
|
||||
[TRAJ]
|
||||
COORDINATES = XYZABC
|
||||
LINEAR_UNITS = mm
|
||||
ANGULAR_UNITS = deg
|
||||
DEFAULT_LINEAR_VELOCITY = 100
|
||||
MAX_LINEAR_VELOCITY = 120
|
||||
MAX_LINEAR_ACCELERATION = 700
|
||||
DEFAULT_LINEAR_ACCELERATION = 300
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
SERVO_PERIOD = 1000000
|
||||
COMM_TIMEOUT = 1
|
||||
|
||||
[TASK]
|
||||
TASK = milltask
|
||||
CYCLE_TIME = 0.010
|
||||
|
||||
[EMCIO]
|
||||
TOOL_TABLE = xyzacb-trsrn.tbl
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -5000
|
||||
MAX_LIMIT = 5000
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 700
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -5000
|
||||
MAX_LIMIT = 5000
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 700
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -5000
|
||||
MAX_LIMIT = 5000
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 700
|
||||
|
||||
# table rotary axis
|
||||
[AXIS_A]
|
||||
MIN_LIMIT = -360
|
||||
MAX_LIMIT = 360
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
# spindle secondary axis
|
||||
[AXIS_B]
|
||||
MIN_LIMIT = -185
|
||||
MAX_LIMIT = 185
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 302
|
||||
|
||||
# spindle primary axis
|
||||
[AXIS_C]
|
||||
MIN_LIMIT = -320
|
||||
MAX_LIMIT = 320
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 301
|
||||
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 700
|
||||
MIN_LIMIT = -5000
|
||||
MAX_LIMIT = 5000
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 700
|
||||
MIN_LIMIT = -5000
|
||||
MAX_LIMIT = 5000
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 700
|
||||
MIN_LIMIT = -5000
|
||||
MAX_LIMIT = 5000
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
|
||||
#table rotary
|
||||
[JOINT_3]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -360
|
||||
MAX_LIMIT = 360
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
# spindle secondary axis
|
||||
[JOINT_4]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -185
|
||||
MAX_LIMIT = 185
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
# spindle primary axis
|
||||
[JOINT_5]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -320
|
||||
MAX_LIMIT = 320
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
T1 P1 D1
|
||||
T2 P2 Z50 D8
|
||||
T3 P3 Z100 D20
|
||||
T4 P4 Z120 D40
|
||||
@@ -0,0 +1,301 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<pyvcp>
|
||||
|
||||
<relief>"ridge"</relief>
|
||||
<bd>5</bd>
|
||||
<label>
|
||||
<text>"SWITCHKINS"</text>
|
||||
<relief>RIDGE</relief>
|
||||
<bd>3</bd>
|
||||
</label>
|
||||
<multilabel>
|
||||
<legends>["0: IDENTITY", "1: TCP ", "2: TOOL "]</legends>
|
||||
<font>("Helvetica",16)</font>
|
||||
<bg>"black"</bg>
|
||||
<fg>"yellow"</fg>
|
||||
</multilabel>
|
||||
<button>
|
||||
<halpin>"type0-button"</halpin>
|
||||
<text>" IDENTITY "</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
<button>
|
||||
<halpin>"type1-button"</halpin>
|
||||
<text>" TCP "</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
<button>
|
||||
<halpin>"type2-button"</halpin>
|
||||
<text>" TOOL "</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<labelframe text="Joint position">
|
||||
<font>("Helvetica",14)</font>
|
||||
<hbox>
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"0: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint0"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"1: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint1"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"2: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint2"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"3: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint3"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"4: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint4"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"5: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint5"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</hbox>
|
||||
</labelframe>
|
||||
</vbox>
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<relief>"ridge"</relief>
|
||||
<bd>5</bd>
|
||||
<button>
|
||||
<halpin>"vismach-clear"</halpin>
|
||||
<text>"vismach-clear"</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<checkbutton>
|
||||
<halpin>"hide-work-piece-1"</halpin>
|
||||
<text>"Hide work piece 1"</text>
|
||||
</checkbutton>
|
||||
<checkbutton>
|
||||
<halpin>"hide-spindle-body"</halpin>
|
||||
<text>"Hide spindle body"</text>
|
||||
</checkbutton>
|
||||
</vbox>
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
<!-- create another vertical panel -->
|
||||
<vbox>
|
||||
<relief>"ridge"</relief>
|
||||
<bd>5</bd>
|
||||
|
||||
<vbox>
|
||||
<labelframe text="Spindle Offsets">
|
||||
<font>("Helvetica",14)</font>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"nutation-angle: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"nut-angle"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>55</initval>
|
||||
<min_>0</min_>
|
||||
<max_>90</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"y-pivot-length: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"y-pivot"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>50</initval>
|
||||
<min_>0</min_>
|
||||
<max_>300</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"z-pivot-length: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"z-pivot"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>120</initval>
|
||||
<min_>0</min_>
|
||||
<max_>300</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"x-offset: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"x-offset"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>0</initval>
|
||||
<min_>-20</min_>
|
||||
<max_>20</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"y-offset: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"y-offset"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>0</initval>
|
||||
<min_>-20</min_>
|
||||
<max_>40</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" "</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"Scale Coords: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"scale-coords"</halpin>
|
||||
<resolution>0.05</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>1</initval>
|
||||
<min_>0</min_>
|
||||
<max_>2</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"Use hover + mouse wheel to change values"</text>
|
||||
<font>("Helvetica",6)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</labelframe>
|
||||
</vbox>
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" To test change values above\n reload and restart\n the demo gcode "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</vbox>
|
||||
</pyvcp>
|
||||
@@ -0,0 +1,32 @@
|
||||
# switchkins pyvcp connections for:
|
||||
# xyzbca-trsrn.ini
|
||||
|
||||
net :kinstype.is-0 <= kinstype.is-0 => pyvcp.multilabel.0.legend0
|
||||
net :kinstype.is-1 <= kinstype.is-1 => pyvcp.multilabel.0.legend1
|
||||
net :kinstype.is-2 <= kinstype.is-2 => pyvcp.multilabel.0.legend2
|
||||
|
||||
net :vismach-clear <= pyvcp.vismach-clear => vismach.plotclear
|
||||
|
||||
net :type0-button <= pyvcp.type0-button => halui.mdi-command-00
|
||||
net :type1-button <= pyvcp.type1-button => halui.mdi-command-01
|
||||
net :type2-button <= pyvcp.type2-button => halui.mdi-command-02
|
||||
|
||||
|
||||
net :axis-x => pyvcp.joint0
|
||||
net :axis-y => pyvcp.joint1
|
||||
net :axis-z => pyvcp.joint2
|
||||
net :rotary-a => pyvcp.joint3
|
||||
net :rotary-b => pyvcp.joint4
|
||||
|
||||
net :hide-work-piece-1 <= pyvcp.hide-work-piece-1
|
||||
net :hide-spindle-body <= pyvcp.hide-spindle-body
|
||||
|
||||
net :nutation-angle <= pyvcp.nut-angle-f
|
||||
net :pivot-y <= pyvcp.y-pivot-f
|
||||
net :pivot-z <= pyvcp.z-pivot-f
|
||||
net :offset-x <= pyvcp.x-offset-f
|
||||
net :offset-y <= pyvcp.y-offset-f
|
||||
net :rot-axis-y <= tcp.y-rot-axis-f
|
||||
net :rot-axis-z <= tcp.z-rot-axis-f
|
||||
|
||||
net :scale-coords <= pyvcp.scale-coords-f
|
||||
@@ -0,0 +1,16 @@
|
||||
This is a simulation configuration for a 6 axis machine with the following kinematic:
|
||||
|
||||
XYZ - linear cartesian
|
||||
B - table rotary
|
||||
C - spindle rotary
|
||||
A - spindle nutating
|
||||
|
||||
The spindle rotary assembly is fully configurable using sliders in the side panel of the gui
|
||||
|
||||
The kinematic component includes the following modes:
|
||||
|
||||
IDENTITY: Trivial kinematics with a one-to-one mapping of joints to axes
|
||||
TCP: Coordinated xyz motion with rotation around the tool center point
|
||||
TOOL: Coordinated xyz motion in the current tool coordinate system
|
||||
|
||||
Also see the README in the parent directory.
|
||||
@@ -0,0 +1,102 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<pyvcp>
|
||||
<vbox>
|
||||
<vbox>
|
||||
<labelframe text="C Rotation Axis Offset">
|
||||
<font>("Helvetica",14)</font>
|
||||
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" "</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>"Physical location of rotation-axis in the model\n in absolute machine coordinates:"</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" x: 1000\n z: -1000"</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" "</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>"these are also the correct 'rot-axis' settings\n for this model"</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"x-rot-axis: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"x-rot-axis"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>1000</initval>
|
||||
<min_>-1900</min_>
|
||||
<max_>1900</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"z-rot-axis: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"z-rot-axis"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>-2000</initval>
|
||||
<min_>-2900</min_>
|
||||
<max_>1100</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" "</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"Use hover + mouse wheel to change values"</text>
|
||||
<font>("Helvetica",6)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</labelframe>
|
||||
</vbox>
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" To test change values above\n reload and restart\n the demo gcode "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</vbox>
|
||||
</pyvcp>
|
||||
@@ -0,0 +1,632 @@
|
||||
solid Part2
|
||||
facet normal -1.000000e+00 0.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex -2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
vertex -2.500000e+02 2.500000e+02 0.000000e+00
|
||||
vertex -2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+00 -1.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
vertex -2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
vertex -2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 -1.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex 2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
vertex -2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
|
||||
outer loop
|
||||
vertex -2.500000e+02 2.500000e+02 0.000000e+00
|
||||
vertex 2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
vertex -2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1.000000e+00 0.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1.000000e+00 0.000000e+00 -0.000000e+00
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 0.000000e+00
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
|
||||
outer loop
|
||||
vertex -2.500000e+02 2.500000e+02 0.000000e+00
|
||||
vertex 2.500000e+02 2.500000e+02 0.000000e+00
|
||||
vertex 2.500000e+02 -2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.000000e+00 -0.000000e+00 -0.000000e+00
|
||||
outer loop
|
||||
vertex -2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex -2.500000e+02 2.500000e+02 0.000000e+00
|
||||
vertex -2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 -7.071068e-01 7.071068e-01
|
||||
outer loop
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
vertex -5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
vertex -2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 -7.071068e-01 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
vertex -2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -7.071068e-01 0.000000e+00 7.071068e-01
|
||||
outer loop
|
||||
vertex -5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
vertex -2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex -2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 0.000000e+00 7.071069e-01
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 2.032670e+02 -6.905210e-16 3.467330e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 1.745782e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.032670e+02 -6.905210e-16 3.467330e+02
|
||||
vertex 2.006929e+02 -1.947439e+01 3.493071e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 3.070633e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.006929e+02 -1.947439e+01 3.493071e+02
|
||||
vertex 1.933181e+02 -3.631866e+01 3.566819e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 3.842491e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.933181e+02 -3.631866e+01 3.566819e+02
|
||||
vertex 1.821387e+02 -4.825789e+01 3.678613e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 4.600219e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.821387e+02 -4.825789e+01 3.678613e+02
|
||||
vertex 1.686644e+02 -5.367963e+01 3.813356e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 5.675223e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.686644e+02 -5.367963e+01 3.813356e+02
|
||||
vertex 1.547152e+02 -5.185163e+01 3.952848e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 6.583240e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.547152e+02 -5.185163e+01 3.952848e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
vertex 2.500000e+02 -2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.524362e-02 9.957342e-01 -6.524364e-02
|
||||
outer loop
|
||||
vertex 1.193599e+02 -5.185163e+01 3.599295e+02
|
||||
vertex 1.547152e+02 -5.185163e+01 3.952848e+02
|
||||
vertex 1.333091e+02 -5.367963e+01 3.459802e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.524360e-02 9.957342e-01 -6.524363e-02
|
||||
outer loop
|
||||
vertex 1.547152e+02 -5.185163e+01 3.952848e+02
|
||||
vertex 1.686644e+02 -5.367963e+01 3.813356e+02
|
||||
vertex 1.333091e+02 -5.367963e+01 3.459802e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.935088e-01 9.618257e-01 1.935089e-01
|
||||
outer loop
|
||||
vertex 1.686644e+02 -5.367963e+01 3.813356e+02
|
||||
vertex 1.467833e+02 -4.825789e+01 3.325060e+02
|
||||
vertex 1.333091e+02 -5.367963e+01 3.459802e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 1.912466e-07 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.467833e+02 -4.825789e+01 3.325060e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 1.333091e+02 -5.367963e+01 3.459802e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071070e-01 2.229500e-07 7.071066e-01
|
||||
outer loop
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 1.193599e+02 -5.185163e+01 3.599295e+02
|
||||
vertex 1.333091e+02 -5.367963e+01 3.459802e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.935088e-01 9.618257e-01 1.935089e-01
|
||||
outer loop
|
||||
vertex 1.821387e+02 -4.825789e+01 3.678613e+02
|
||||
vertex 1.467833e+02 -4.825789e+01 3.325060e+02
|
||||
vertex 1.686644e+02 -5.367963e+01 3.813356e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 3.151846e-01 8.951633e-01 -3.151847e-01
|
||||
outer loop
|
||||
vertex 1.068195e+02 -4.302078e+01 3.724698e+02
|
||||
vertex 1.421749e+02 -4.302078e+01 4.078251e+02
|
||||
vertex 1.193599e+02 -5.185163e+01 3.599295e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 3.151847e-01 8.951632e-01 -3.151848e-01
|
||||
outer loop
|
||||
vertex 1.421749e+02 -4.302078e+01 4.078251e+02
|
||||
vertex 1.547152e+02 -5.185163e+01 3.952848e+02
|
||||
vertex 1.193599e+02 -5.185163e+01 3.599295e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 3.410209e-07 7.071069e-01
|
||||
outer loop
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 1.068195e+02 -4.302078e+01 3.724698e+02
|
||||
vertex 1.193599e+02 -5.185163e+01 3.599295e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 3.664266e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.421749e+02 -4.302078e+01 4.078251e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
vertex 1.547152e+02 -5.185163e+01 3.952848e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 0.000000e+00 1.000000e+00
|
||||
outer loop
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
vertex -5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex -5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -7.071068e-01 0.000000e+00 7.071068e-01
|
||||
outer loop
|
||||
vertex -5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex -2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex -5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 0.000000e+00 1.000000e+00
|
||||
outer loop
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex -5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 7.037430e-07 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.421749e+02 -4.302078e+01 4.078251e+02
|
||||
vertex 1.327370e+02 -2.837975e+01 4.172629e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071069e-01 -4.915623e-07 7.071066e-01
|
||||
outer loop
|
||||
vertex 1.327370e+02 -2.837975e+01 4.172629e+02
|
||||
vertex 1.276764e+02 -9.905863e+00 4.223236e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 -0.000000e+00 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.276764e+02 -9.905863e+00 4.223236e+02
|
||||
vertex 1.276764e+02 9.905863e+00 4.223236e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 0.000000e+00 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.276764e+02 9.905863e+00 4.223236e+02
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 5.000000e+01 -5.000000e+01 5.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -4.261270e-01 7.980172e-01 4.261272e-01
|
||||
outer loop
|
||||
vertex 1.821387e+02 -4.825789e+01 3.678613e+02
|
||||
vertex 1.579628e+02 -3.631866e+01 3.213266e+02
|
||||
vertex 1.467833e+02 -4.825789e+01 3.325060e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071064e-01 -8.249345e-08 7.071072e-01
|
||||
outer loop
|
||||
vertex 1.579628e+02 -3.631866e+01 3.213266e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 1.467833e+02 -4.825789e+01 3.325060e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -4.261273e-01 7.980170e-01 4.261273e-01
|
||||
outer loop
|
||||
vertex 1.933181e+02 -3.631866e+01 3.566819e+02
|
||||
vertex 1.579628e+02 -3.631866e+01 3.213266e+02
|
||||
vertex 1.821387e+02 -4.825789e+01 3.678613e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 5.225582e-01 6.736956e-01 -5.225583e-01
|
||||
outer loop
|
||||
vertex 9.738170e+01 -2.837975e+01 3.819076e+02
|
||||
vertex 1.327370e+02 -2.837975e+01 4.172629e+02
|
||||
vertex 1.068195e+02 -4.302078e+01 3.724698e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 5.225580e-01 6.736957e-01 -5.225583e-01
|
||||
outer loop
|
||||
vertex 1.327370e+02 -2.837975e+01 4.172629e+02
|
||||
vertex 1.421749e+02 -4.302078e+01 4.078251e+02
|
||||
vertex 1.068195e+02 -4.302078e+01 3.724698e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 2.969849e-07 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 9.738170e+01 -2.837975e+01 3.819076e+02
|
||||
vertex 1.068195e+02 -4.302078e+01 3.724698e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.011944e-01 5.264319e-01 6.011944e-01
|
||||
outer loop
|
||||
vertex 1.933181e+02 -3.631866e+01 3.566819e+02
|
||||
vertex 1.653375e+02 -1.947439e+01 3.139518e+02
|
||||
vertex 1.579628e+02 -3.631866e+01 3.213266e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 6.091928e-07 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.653375e+02 -1.947439e+01 3.139518e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 1.579628e+02 -3.631866e+01 3.213266e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.011941e-01 5.264323e-01 6.011944e-01
|
||||
outer loop
|
||||
vertex 2.006929e+02 -1.947439e+01 3.493071e+02
|
||||
vertex 1.653375e+02 -1.947439e+01 3.139518e+02
|
||||
vertex 1.933181e+02 -3.631866e+01 3.566819e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.593572e-01 3.612418e-01 -6.593575e-01
|
||||
outer loop
|
||||
vertex 9.232107e+01 -9.905863e+00 3.869683e+02
|
||||
vertex 1.276764e+02 -9.905863e+00 4.223236e+02
|
||||
vertex 9.738170e+01 -2.837975e+01 3.819076e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.593574e-01 3.612416e-01 -6.593575e-01
|
||||
outer loop
|
||||
vertex 1.276764e+02 -9.905863e+00 4.223236e+02
|
||||
vertex 1.327370e+02 -2.837975e+01 4.172629e+02
|
||||
vertex 9.738170e+01 -2.837975e+01 3.819076e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071069e-01 -1.940928e-07 7.071066e-01
|
||||
outer loop
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 9.232107e+01 -9.905863e+00 3.869683e+02
|
||||
vertex 9.738170e+01 -2.837975e+01 3.819076e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.950667e-01 1.837499e-01 6.950670e-01
|
||||
outer loop
|
||||
vertex 2.006929e+02 -1.947439e+01 3.493071e+02
|
||||
vertex 1.679117e+02 -1.781979e-14 3.113776e+02
|
||||
vertex 1.653375e+02 -1.947439e+01 3.139518e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071065e-01 -4.679821e-07 7.071071e-01
|
||||
outer loop
|
||||
vertex 1.679117e+02 -1.781979e-14 3.113776e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 1.653375e+02 -1.947439e+01 3.139518e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.950670e-01 1.837494e-01 6.950670e-01
|
||||
outer loop
|
||||
vertex 2.032670e+02 -6.905210e-16 3.467330e+02
|
||||
vertex 1.679117e+02 -1.781979e-14 3.113776e+02
|
||||
vertex 2.006929e+02 -1.947439e+01 3.493071e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071066e-01 0.000000e+00 -7.071069e-01
|
||||
outer loop
|
||||
vertex 9.232107e+01 9.905863e+00 3.869683e+02
|
||||
vertex 1.276764e+02 9.905863e+00 4.223236e+02
|
||||
vertex 9.232107e+01 -9.905863e+00 3.869683e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071066e-01 0.000000e+00 -7.071069e-01
|
||||
outer loop
|
||||
vertex 1.276764e+02 9.905863e+00 4.223236e+02
|
||||
vertex 1.276764e+02 -9.905863e+00 4.223236e+02
|
||||
vertex 9.232107e+01 -9.905863e+00 3.869683e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071069e-01 0.000000e+00 7.071066e-01
|
||||
outer loop
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 9.232107e+01 9.905863e+00 3.869683e+02
|
||||
vertex 9.232107e+01 -9.905863e+00 3.869683e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.950669e-01 -1.837499e-01 6.950669e-01
|
||||
outer loop
|
||||
vertex 2.032670e+02 -6.905210e-16 3.467330e+02
|
||||
vertex 1.653375e+02 1.947439e+01 3.139518e+02
|
||||
vertex 1.679117e+02 -1.781979e-14 3.113776e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071065e-01 4.679821e-07 7.071071e-01
|
||||
outer loop
|
||||
vertex 1.653375e+02 1.947439e+01 3.139518e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
vertex 1.679117e+02 -1.781979e-14 3.113776e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.950668e-01 -1.837494e-01 6.950671e-01
|
||||
outer loop
|
||||
vertex 2.006929e+02 1.947439e+01 3.493071e+02
|
||||
vertex 1.653375e+02 1.947439e+01 3.139518e+02
|
||||
vertex 2.032670e+02 -6.905210e-16 3.467330e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071069e-01 1.940928e-07 7.071066e-01
|
||||
outer loop
|
||||
vertex 9.738170e+01 2.837975e+01 3.819076e+02
|
||||
vertex 9.232107e+01 9.905863e+00 3.869683e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071070e-01 -2.229500e-07 7.071066e-01
|
||||
outer loop
|
||||
vertex 1.333091e+02 5.367963e+01 3.459802e+02
|
||||
vertex 1.193599e+02 5.185163e+01 3.599295e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 -3.410209e-07 7.071069e-01
|
||||
outer loop
|
||||
vertex 1.193599e+02 5.185163e+01 3.599295e+02
|
||||
vertex 1.068195e+02 4.302078e+01 3.724698e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 -2.969849e-07 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.068195e+02 4.302078e+01 3.724698e+02
|
||||
vertex 9.738170e+01 2.837975e+01 3.819076e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 -6.091928e-07 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.653375e+02 1.947439e+01 3.139518e+02
|
||||
vertex 1.579628e+02 3.631866e+01 3.213266e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071064e-01 8.249345e-08 7.071072e-01
|
||||
outer loop
|
||||
vertex 1.579628e+02 3.631866e+01 3.213266e+02
|
||||
vertex 1.467833e+02 4.825789e+01 3.325060e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 -1.912466e-07 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.467833e+02 4.825789e+01 3.325060e+02
|
||||
vertex 1.333091e+02 5.367963e+01 3.459802e+02
|
||||
vertex 1.297918e+02 -4.615752e-15 3.494975e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 -1.745782e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 2.006929e+02 1.947439e+01 3.493071e+02
|
||||
vertex 2.032670e+02 -6.905210e-16 3.467330e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.593573e-01 -3.612418e-01 -6.593575e-01
|
||||
outer loop
|
||||
vertex 9.738170e+01 2.837975e+01 3.819076e+02
|
||||
vertex 1.327370e+02 2.837975e+01 4.172629e+02
|
||||
vertex 9.232107e+01 9.905863e+00 3.869683e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.593573e-01 -3.612416e-01 -6.593576e-01
|
||||
outer loop
|
||||
vertex 1.327370e+02 2.837975e+01 4.172629e+02
|
||||
vertex 1.276764e+02 9.905863e+00 4.223236e+02
|
||||
vertex 9.232107e+01 9.905863e+00 3.869683e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071073e-01 3.038186e-07 7.071063e-01
|
||||
outer loop
|
||||
vertex 1.327370e+02 2.837975e+01 4.172629e+02
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 1.276764e+02 9.905863e+00 4.223236e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.011943e-01 -5.264319e-01 6.011945e-01
|
||||
outer loop
|
||||
vertex 2.006929e+02 1.947439e+01 3.493071e+02
|
||||
vertex 1.579628e+02 3.631866e+01 3.213266e+02
|
||||
vertex 1.653375e+02 1.947439e+01 3.139518e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071067e-01 -3.070633e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 1.933181e+02 3.631866e+01 3.566819e+02
|
||||
vertex 2.006929e+02 1.947439e+01 3.493071e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -6.011942e-01 -5.264323e-01 6.011942e-01
|
||||
outer loop
|
||||
vertex 1.933181e+02 3.631866e+01 3.566819e+02
|
||||
vertex 1.579628e+02 3.631866e+01 3.213266e+02
|
||||
vertex 2.006929e+02 1.947439e+01 3.493071e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 5.225581e-01 -6.736956e-01 -5.225584e-01
|
||||
outer loop
|
||||
vertex 1.068195e+02 4.302078e+01 3.724698e+02
|
||||
vertex 1.421749e+02 4.302078e+01 4.078251e+02
|
||||
vertex 9.738170e+01 2.837975e+01 3.819076e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 5.225581e-01 -6.736957e-01 -5.225582e-01
|
||||
outer loop
|
||||
vertex 1.421749e+02 4.302078e+01 4.078251e+02
|
||||
vertex 1.327370e+02 2.837975e+01 4.172629e+02
|
||||
vertex 9.738170e+01 2.837975e+01 3.819076e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071065e-01 -3.015717e-07 7.071071e-01
|
||||
outer loop
|
||||
vertex 1.421749e+02 4.302078e+01 4.078251e+02
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 1.327370e+02 2.837975e+01 4.172629e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -4.261271e-01 -7.980172e-01 4.261271e-01
|
||||
outer loop
|
||||
vertex 1.933181e+02 3.631866e+01 3.566819e+02
|
||||
vertex 1.467833e+02 4.825789e+01 3.325060e+02
|
||||
vertex 1.579628e+02 3.631866e+01 3.213266e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 -3.842491e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 1.821387e+02 4.825789e+01 3.678613e+02
|
||||
vertex 1.933181e+02 3.631866e+01 3.566819e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -4.261272e-01 -7.980170e-01 4.261274e-01
|
||||
outer loop
|
||||
vertex 1.821387e+02 4.825789e+01 3.678613e+02
|
||||
vertex 1.467833e+02 4.825789e+01 3.325060e+02
|
||||
vertex 1.933181e+02 3.631866e+01 3.566819e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 3.151846e-01 -8.951633e-01 -3.151847e-01
|
||||
outer loop
|
||||
vertex 1.193599e+02 5.185163e+01 3.599295e+02
|
||||
vertex 1.547152e+02 5.185163e+01 3.952848e+02
|
||||
vertex 1.068195e+02 4.302078e+01 3.724698e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 3.151847e-01 -8.951632e-01 -3.151848e-01
|
||||
outer loop
|
||||
vertex 1.547152e+02 5.185163e+01 3.952848e+02
|
||||
vertex 1.421749e+02 4.302078e+01 4.078251e+02
|
||||
vertex 1.068195e+02 4.302078e+01 3.724698e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 -9.688457e-09 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.547152e+02 5.185163e+01 3.952848e+02
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 1.421749e+02 4.302078e+01 4.078251e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.935088e-01 -9.618257e-01 1.935089e-01
|
||||
outer loop
|
||||
vertex 1.821387e+02 4.825789e+01 3.678613e+02
|
||||
vertex 1.333091e+02 5.367963e+01 3.459802e+02
|
||||
vertex 1.467833e+02 4.825789e+01 3.325060e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 -4.600219e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 1.686644e+02 5.367963e+01 3.813356e+02
|
||||
vertex 1.821387e+02 4.825789e+01 3.678613e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.935088e-01 -9.618257e-01 1.935089e-01
|
||||
outer loop
|
||||
vertex 1.686644e+02 5.367963e+01 3.813356e+02
|
||||
vertex 1.333091e+02 5.367963e+01 3.459802e+02
|
||||
vertex 1.821387e+02 4.825789e+01 3.678613e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.524362e-02 -9.957342e-01 -6.524364e-02
|
||||
outer loop
|
||||
vertex 1.333091e+02 5.367963e+01 3.459802e+02
|
||||
vertex 1.686644e+02 5.367963e+01 3.813356e+02
|
||||
vertex 1.193599e+02 5.185163e+01 3.599295e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 6.524361e-02 -9.957342e-01 -6.524362e-02
|
||||
outer loop
|
||||
vertex 1.686644e+02 5.367963e+01 3.813356e+02
|
||||
vertex 1.547152e+02 5.185163e+01 3.952848e+02
|
||||
vertex 1.193599e+02 5.185163e+01 3.599295e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 -3.417517e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 1.547152e+02 5.185163e+01 3.952848e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-01 -5.675223e-08 7.071068e-01
|
||||
outer loop
|
||||
vertex 1.686644e+02 5.367963e+01 3.813356e+02
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 1.547152e+02 5.185163e+01 3.952848e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 1.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex -2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 2.500000e+02 2.500000e+02 0.000000e+00
|
||||
vertex -2.500000e+02 2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+00 1.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex -2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex 2.500000e+02 2.500000e+02 0.000000e+00
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+00 1.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex -5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex -2.500000e+02 2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+00 1.000000e+00 0.000000e+00
|
||||
outer loop
|
||||
vertex 5.000000e+01 2.500000e+02 5.000000e+02
|
||||
vertex 2.500000e+02 2.500000e+02 3.000000e+02
|
||||
vertex -2.500000e+02 2.500000e+02 3.000000e+02
|
||||
endloop
|
||||
endfacet
|
||||
endsolid
|
||||
@@ -0,0 +1,287 @@
|
||||
[EMC]
|
||||
VERSION = 1.1
|
||||
MACHINE = xyzbca-trsrn (switchkins)
|
||||
DEBUG = 0
|
||||
|
||||
[DISPLAY]
|
||||
EMBED_TAB_NAME = TCP
|
||||
EMBED_TAB_COMMAND = pyvcp pyvcp_embed_tab_tcp.xml
|
||||
|
||||
GEOMETRY = XYZABC
|
||||
OPEN_FILE = ../demos/incremental_repetition.ngc
|
||||
PYVCP = ./xyzbca-trsrn.xml
|
||||
JOG_AXES = XYZABC
|
||||
DISPLAY = axis
|
||||
MAX_ANGULAR_VELOCITY = 360
|
||||
MAX_LINEAR_VELOCITY = 1500
|
||||
POSITION_OFFSET = RELATIVE
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
MAX_FEED_OVERRIDE = 2
|
||||
PROGRAM_PREFIX = ../demos
|
||||
INTRO_GRAPHIC = emc2.gif
|
||||
INTRO_TIME = 1
|
||||
#EDITOR = gedit
|
||||
TOOL_EDITOR = tooledit z diam
|
||||
|
||||
TKPKG = Ngcgui 1.0
|
||||
NGCGUI_FONT = Helvetica -12 normal
|
||||
|
||||
[RS274NGC]
|
||||
RS274NGC_STARTUP_CODE = G17 G21 G40 G49 G54 G64 P0.001 G80 G90 G92.1 G94 G97 G98
|
||||
#ON_ABORT_COMMAND = o <on_abort_no_twp_reset> call
|
||||
ON_ABORT_COMMAND = o <on_abort_with_twp_reset> call
|
||||
SUBROUTINE_PATH = ../remap_subs:../demos
|
||||
HAL_PIN_VARS = 1
|
||||
REMAP = M428 modalgroup=10 ngc=428remap
|
||||
REMAP = M429 modalgroup=10 ngc=429remap
|
||||
REMAP = M430 modalgroup=10 ngc=430remap
|
||||
|
||||
REMAP = G53.1 modalgroup=1 argspec=p ngc=g531remap
|
||||
REMAP = G53.3 modalgroup=1 argspec=pxyz ngc=g533remap
|
||||
REMAP = G53.6 modalgroup=1 argspec=p ngc=g536remap
|
||||
REMAP = M530 modalgroup=10 python=g53x_core
|
||||
|
||||
REMAP = G68.2 modalgroup=1 argspec=pqxyzijkr python=g682
|
||||
REMAP = G68.3 modalgroup=1 argspec=xyzr python=g683
|
||||
REMAP = G68.4 modalgroup=1 argspec=pqxyzijkr python=g684
|
||||
|
||||
REMAP = G69 modalgroup=1 ngc=g69remap
|
||||
REMAP = M469 modalgroup=10 python=g69_core
|
||||
|
||||
PARAMETER_FILE = xyzbca-trsrn.var
|
||||
|
||||
[PYTHON]
|
||||
# where to find the Python code:
|
||||
# code specific for this configuration
|
||||
PATH_APPEND = ../python
|
||||
# import the following Python module
|
||||
TOPLEVEL = ../python/toplevel.py
|
||||
# the higher the more verbose tracing of the Python plugin
|
||||
LOG_LEVEL = 3
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = xyzbca_trsrn
|
||||
JOINTS = 6
|
||||
|
||||
[TWP]
|
||||
# this defines the primary spindle rotation
|
||||
PRIMARY = C
|
||||
# this defines the secnodary spindle rotation (ie the one closest to the tool)
|
||||
SECONDARY = A
|
||||
|
||||
[HAL]
|
||||
HALUI = halui
|
||||
HALFILE = LIB:basic_sim.tcl
|
||||
POSTGUI_HALFILE = xyzbca-trsrn_postgui.hal
|
||||
|
||||
# signal reflecting twp states (0=undefined, 1=defined, 2=active)
|
||||
HALCMD = net twp-status <= motion.analog-out-02
|
||||
|
||||
# connection required for control of motion.switchkins-type
|
||||
HALCMD = net :kinstype-select <= motion.analog-out-03 => motion.switchkins-type
|
||||
|
||||
# connections required for the kinematics component
|
||||
HALCMD = net :tool-offset motion.tooloffset.z xyzbca_trsrn_kins.tool-offset-z
|
||||
HALCMD = net :rot-axis-x xyzbca_trsrn_kins.x-rot-axis
|
||||
HALCMD = net :rot-axis-z xyzbca_trsrn_kins.z-rot-axis
|
||||
HALCMD = net :nutation-angle xyzbca_trsrn_kins.nut-angle
|
||||
HALCMD = net :pivot-x xyzbca_trsrn_kins.x-pivot
|
||||
HALCMD = net :pivot-z xyzbca_trsrn_kins.z-pivot
|
||||
HALCMD = net :offset-x xyzbca_trsrn_kins.x-offset
|
||||
HALCMD = net :offset-y xyzbca_trsrn_kins.y-offset
|
||||
|
||||
# load the required twp-helper component and its hal connections
|
||||
HALCMD = loadusr -W ../python/twp-helper-comp.py
|
||||
#twp-status
|
||||
HALCMD = net twp-status => twp-helper-comp.twp-status
|
||||
HALCMD = net twp-is-defined <= twp-helper-comp.twp-is-defined
|
||||
HALCMD = net twp-is-active <= twp-helper-comp.twp-is-active
|
||||
# current twp parameters
|
||||
HALCMD = net twp-ox-world <= twp-helper-comp.twp-ox-world
|
||||
HALCMD = net twp-oy-world <= twp-helper-comp.twp-oy-world
|
||||
HALCMD = net twp-oz-world <= twp-helper-comp.twp-oz-world
|
||||
HALCMD = net twp-ox <= twp-helper-comp.twp-ox
|
||||
HALCMD = net twp-oy <= twp-helper-comp.twp-oy
|
||||
HALCMD = net twp-oz <= twp-helper-comp.twp-oz
|
||||
HALCMD = net twp-zx <= twp-helper-comp.twp-zx
|
||||
HALCMD = net twp-zy <= twp-helper-comp.twp-zy
|
||||
HALCMD = net twp-zz <= twp-helper-comp.twp-zz
|
||||
HALCMD = net twp-xx <= twp-helper-comp.twp-xx
|
||||
HALCMD = net twp-xy <= twp-helper-comp.twp-xy
|
||||
HALCMD = net twp-xz <= twp-helper-comp.twp-xz
|
||||
|
||||
# load the optional vismach-gui and its hal connections
|
||||
HALCMD = loadusr -W ../vismach/xyzbca-trsrn-gui.py
|
||||
|
||||
HALCMD = net :axis-x joint.0.pos-fb xyzbca-trsrn-gui.axis_x
|
||||
HALCMD = net :axis-y joint.1.pos-fb xyzbca-trsrn-gui.axis_y
|
||||
HALCMD = net :axis-z joint.2.pos-fb xyzbca-trsrn-gui.axis_z
|
||||
HALCMD = net :rotary-a joint.3.pos-fb xyzbca-trsrn-gui.rotary_a
|
||||
HALCMD = net :rotary-b joint.4.pos-fb xyzbca-trsrn-gui.rotary_b
|
||||
HALCMD = net :rotary-c joint.5.pos-fb xyzbca-trsrn-gui.rotary_c
|
||||
HALCMD = net :tool-diam halui.tool.diameter xyzbca-trsrn-gui.tool_diameter
|
||||
HALCMD = net :tool-offset xyzbca-trsrn-gui.tool_length
|
||||
HALCMD = net :kinstype-select xyzbca-trsrn-gui.kinstype_select
|
||||
HALCMD = net :nutation-angle xyzbca-trsrn-gui.nutation_angle
|
||||
HALCMD = net :pivot-x xyzbca-trsrn-gui.pivot_x
|
||||
HALCMD = net :pivot-z xyzbca-trsrn-gui.pivot_z
|
||||
HALCMD = net :offset-x xyzbca-trsrn-gui.offset_x
|
||||
HALCMD = net :offset-y xyzbca-trsrn-gui.offset_y
|
||||
HALCMD = net :rot-axis-x xyzbca-trsrn-gui.rot_axis_x
|
||||
HALCMD = net :rot-axis-z xyzbca-trsrn-gui.rot_axis_z
|
||||
HALCMD = net :hide-work-piece-1 xyzbca-trsrn-gui.hide_work_piece_1
|
||||
HALCMD = net :hide-spindle-body xyzbca-trsrn-gui.hide_spindle_body
|
||||
HALCMD = net :scale-coords xyzbca-trsrn-gui.scale_coords
|
||||
|
||||
HALCMD = net twp-ox-world xyzbca-trsrn-gui.twp_ox_world
|
||||
HALCMD = net twp-oy-world xyzbca-trsrn-gui.twp_oy_world
|
||||
HALCMD = net twp-oz-world xyzbca-trsrn-gui.twp_oz_world
|
||||
HALCMD = net twp-ox xyzbca-trsrn-gui.twp_ox
|
||||
HALCMD = net twp-oy xyzbca-trsrn-gui.twp_oy
|
||||
HALCMD = net twp-oz xyzbca-trsrn-gui.twp_oz
|
||||
HALCMD = net twp-zx xyzbca-trsrn-gui.twp_zx
|
||||
HALCMD = net twp-zy xyzbca-trsrn-gui.twp_zy
|
||||
HALCMD = net twp-zz xyzbca-trsrn-gui.twp_zz
|
||||
HALCMD = net twp-xx xyzbca-trsrn-gui.twp_xx
|
||||
HALCMD = net twp-xy xyzbca-trsrn-gui.twp_xy
|
||||
HALCMD = net twp-xz xyzbca-trsrn-gui.twp_xz
|
||||
HALCMD = net twp-status xyzbca-trsrn-gui.twp_status
|
||||
HALCMD = net twp-is-defined xyzbca-trsrn-gui.twp_defined
|
||||
HALCMD = net twp-is-active xyzbca-trsrn-gui.twp_active
|
||||
|
||||
|
||||
[HALUI]
|
||||
# NOTE: kinstype==0 is identity kins because sparm=identityfirst
|
||||
# M428:identity kins (motion.switchkins-type==0 startupDEFAULT)
|
||||
# M429: tcp kins (motion.switchkins-type==1)
|
||||
# M430: tool kins (motion.switchkins-type==2)
|
||||
MDI_COMMAND = M428
|
||||
MDI_COMMAND = M429
|
||||
MDI_COMMAND = M430
|
||||
|
||||
[TRAJ]
|
||||
COORDINATES = XYZABC
|
||||
LINEAR_UNITS = mm
|
||||
ANGULAR_UNITS = deg
|
||||
DEFAULT_LINEAR_VELOCITY = 100
|
||||
MAX_LINEAR_VELOCITY = 120
|
||||
MAX_LINEAR_ACCELERATION = 700
|
||||
DEFAULT_LINEAR_ACCELERATION = 300
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
SERVO_PERIOD = 1000000
|
||||
COMM_TIMEOUT = 1
|
||||
|
||||
[TASK]
|
||||
TASK = milltask
|
||||
CYCLE_TIME = 0.010
|
||||
|
||||
[EMCIO]
|
||||
TOOL_TABLE = xyzbca-trsrn.tbl
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -5000
|
||||
MAX_LIMIT = 5000
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 700
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -5000
|
||||
MAX_LIMIT = 5000
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 700
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -5000
|
||||
MAX_LIMIT = 5000
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 700
|
||||
|
||||
# spindle secondary axis
|
||||
[AXIS_A]
|
||||
MIN_LIMIT = -185
|
||||
MAX_LIMIT = 185
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
# table rotary axis
|
||||
[AXIS_B]
|
||||
MIN_LIMIT = -360
|
||||
MAX_LIMIT = 360
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 302
|
||||
|
||||
# spindle primary rotating axis
|
||||
[AXIS_C]
|
||||
MIN_LIMIT = -320
|
||||
MAX_LIMIT = 320
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 301
|
||||
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 700
|
||||
MIN_LIMIT = -5000
|
||||
MAX_LIMIT = 5000
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 700
|
||||
MIN_LIMIT = -5000
|
||||
MAX_LIMIT = 5000
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 200
|
||||
MAX_ACCELERATION = 700
|
||||
MIN_LIMIT = -5000
|
||||
MAX_LIMIT = 5000
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
|
||||
# spindle secondary joint
|
||||
[JOINT_3]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -185
|
||||
MAX_LIMIT = 185
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
# table rotating joint
|
||||
[JOINT_4]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -360
|
||||
MAX_LIMIT = 360
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
# spindle primary joint
|
||||
[JOINT_5]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -320
|
||||
MAX_LIMIT = 320
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
T1 P1 D1
|
||||
T2 P2 Z50 D8
|
||||
T3 P3 Z100 D20
|
||||
T4 P4 Z120 D40
|
||||
@@ -0,0 +1,301 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<pyvcp>
|
||||
|
||||
<relief>"ridge"</relief>
|
||||
<bd>5</bd>
|
||||
<label>
|
||||
<text>"SWITCHKINS"</text>
|
||||
<relief>RIDGE</relief>
|
||||
<bd>3</bd>
|
||||
</label>
|
||||
<multilabel>
|
||||
<legends>["0: IDENTITY", "1: TCP ", "2: TOOL "]</legends>
|
||||
<font>("Helvetica",16)</font>
|
||||
<bg>"black"</bg>
|
||||
<fg>"yellow"</fg>
|
||||
</multilabel>
|
||||
<button>
|
||||
<halpin>"type0-button"</halpin>
|
||||
<text>" IDENTITY "</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
<button>
|
||||
<halpin>"type1-button"</halpin>
|
||||
<text>" TCP "</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
<button>
|
||||
<halpin>"type2-button"</halpin>
|
||||
<text>" TOOL "</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<labelframe text="Joint position">
|
||||
<font>("Helvetica",14)</font>
|
||||
<hbox>
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"0: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint0"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"1: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint1"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"2: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint2"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"3: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint3"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"4: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint4"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"5: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<number>
|
||||
<halpin>"joint5"</halpin>
|
||||
<font>("Helvetica",10)</font>
|
||||
<format>"4.4f"</format>
|
||||
</number>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</hbox>
|
||||
</labelframe>
|
||||
</vbox>
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<relief>"ridge"</relief>
|
||||
<bd>5</bd>
|
||||
<button>
|
||||
<halpin>"vismach-clear"</halpin>
|
||||
<text>"vismach-clear"</text>
|
||||
<bd>3</bd>
|
||||
</button>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<checkbutton>
|
||||
<halpin>"hide-work-piece-1"</halpin>
|
||||
<text>"Hide work piece 1"</text>
|
||||
</checkbutton>
|
||||
<checkbutton>
|
||||
<halpin>"hide-spindle-body"</halpin>
|
||||
<text>"Hide spindle body"</text>
|
||||
</checkbutton>
|
||||
</vbox>
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
<!-- create another vertical panel -->
|
||||
<vbox>
|
||||
<relief>"ridge"</relief>
|
||||
<bd>5</bd>
|
||||
|
||||
<vbox>
|
||||
<labelframe text="Spindle Offsets">
|
||||
<font>("Helvetica",14)</font>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"nutation-angle: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"nut-angle"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>55</initval>
|
||||
<min_>0</min_>
|
||||
<max_>90</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"x-pivot-length: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"x-pivot"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>50</initval>
|
||||
<min_>0</min_>
|
||||
<max_>300</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"z-pivot-length: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"z-pivot"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>120</initval>
|
||||
<min_>0</min_>
|
||||
<max_>300</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"x-offset: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"x-offset"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>0</initval>
|
||||
<min_>-20</min_>
|
||||
<max_>20</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"y-offset: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"y-offset"</halpin>
|
||||
<resolution>1</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>0</initval>
|
||||
<min_>-20</min_>
|
||||
<max_>40</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<font>("Helvetica",8)</font>
|
||||
<text>" "</text>
|
||||
</label>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"Scale Coords: "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
<scale>
|
||||
<font>("Helvetica",10)</font>
|
||||
<width>"12"</width>
|
||||
<halpin>"scale-coords"</halpin>
|
||||
<resolution>0.05</resolution>
|
||||
<orient>HORIZONTAL</orient>
|
||||
<initval>1</initval>
|
||||
<min_>0</min_>
|
||||
<max_>2</max_>
|
||||
</scale>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>"Use hover + mouse wheel to change values"</text>
|
||||
<font>("Helvetica",6)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</labelframe>
|
||||
</vbox>
|
||||
<!-- create a space to the next element -->
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" "</text>
|
||||
<font>("Helvetica",4)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<hbox>
|
||||
<label>
|
||||
<text>" To test change values above\n reload and restart\n the demo gcode "</text>
|
||||
<font>("Helvetica",10)</font>
|
||||
</label>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</vbox>
|
||||
</pyvcp>
|
||||
@@ -0,0 +1,32 @@
|
||||
# switchkins pyvcp connections for:
|
||||
# xyzbca-trsrn.ini
|
||||
|
||||
net :kinstype.is-0 <= kinstype.is-0 => pyvcp.multilabel.0.legend0
|
||||
net :kinstype.is-1 <= kinstype.is-1 => pyvcp.multilabel.0.legend1
|
||||
net :kinstype.is-2 <= kinstype.is-2 => pyvcp.multilabel.0.legend2
|
||||
|
||||
net :vismach-clear <= pyvcp.vismach-clear => vismach.plotclear
|
||||
|
||||
net :type0-button <= pyvcp.type0-button => halui.mdi-command-00
|
||||
net :type1-button <= pyvcp.type1-button => halui.mdi-command-01
|
||||
net :type2-button <= pyvcp.type2-button => halui.mdi-command-02
|
||||
|
||||
|
||||
net :axis-x => pyvcp.joint0
|
||||
net :axis-y => pyvcp.joint1
|
||||
net :axis-z => pyvcp.joint2
|
||||
net :rotary-a => pyvcp.joint3
|
||||
net :rotary-b => pyvcp.joint4
|
||||
|
||||
net :hide-work-piece-1 <= pyvcp.hide-work-piece-1
|
||||
net :hide-spindle-body <= pyvcp.hide-spindle-body
|
||||
|
||||
net :nutation-angle <= pyvcp.nut-angle-f
|
||||
net :pivot-x <= pyvcp.x-pivot-f
|
||||
net :pivot-z <= pyvcp.z-pivot-f
|
||||
net :offset-x <= pyvcp.x-offset-f
|
||||
net :offset-y <= pyvcp.y-offset-f
|
||||
net :rot-axis-x <= tcp.x-rot-axis-f
|
||||
net :rot-axis-z <= tcp.z-rot-axis-f
|
||||
|
||||
net :scale-coords <= pyvcp.scale-coords-f
|
||||
7
configs/sim/axis/vismach/README
Normal file
7
configs/sim/axis/vismach/README
Normal file
@@ -0,0 +1,7 @@
|
||||
The 'vismach' directory contains a number of configurations that display a 3D model of the simulated machine.
|
||||
|
||||
These simulations are mostly intended for testing of complex kinematics code by people who don't have those somewhat exotic machines.
|
||||
|
||||
All of these configurations work without realtime and without hardware or drivers.
|
||||
|
||||
All of the simulations use the Axis GUI.
|
||||
55
configs/sim/axis/vismach/VMC_toolchange/README
Normal file
55
configs/sim/axis/vismach/VMC_toolchange/README
Normal file
@@ -0,0 +1,55 @@
|
||||
This is a Vismach simulator config intended for testing out tool-changer configurations
|
||||
The Vismach model combined with the sim_vmc.hal file features three axes
|
||||
with home and limit switches, a carousel with both gray-code and pulse/index outputs,
|
||||
a locking bar and a power drawbar.
|
||||
There are two alternative configs, one demonstrating gray-code carousel coding and the other demonstrating
|
||||
pulse/index.
|
||||
Note that the carousel component also supports straight-binary and individual sensors.
|
||||
|
||||
The "virtual" VMC is created by the sim_vmc.hal file and defines the following signals
|
||||
that my be used in the other HAL files
|
||||
|
||||
Axis positions
|
||||
x-pos
|
||||
y-pos
|
||||
z-pos
|
||||
|
||||
Axis limits
|
||||
x-pos-lim
|
||||
x-neg-lim
|
||||
y-pos-lim
|
||||
y-neg-llm
|
||||
z-pos-lim
|
||||
z-neg-lim
|
||||
|
||||
Simulated Spindle
|
||||
spindle-cmd - set spindle speed in rpm, negative for reverse
|
||||
spindle-pos - the simulated spindle position (revs)
|
||||
spindle-vel - the simulated spindle speed out
|
||||
|
||||
Toolchanger arm
|
||||
arm-act - actuate the arm
|
||||
arm-in - arm in limit switch
|
||||
arm-out - arm out limit switch
|
||||
|
||||
Carousel lock
|
||||
car-lock - activate the lock
|
||||
car-locked
|
||||
car-unlocked - limit switches
|
||||
|
||||
Drawbar
|
||||
tool-release
|
||||
tool-released
|
||||
tool-locked
|
||||
|
||||
Carousel
|
||||
car-fwd rotate clockwise
|
||||
car-rev rotate anticlockwise
|
||||
bit0
|
||||
bit1
|
||||
bit2
|
||||
bit3
|
||||
bit4 - Gray-coded carousel position
|
||||
|
||||
|
||||
|
||||
1780
configs/sim/axis/vismach/VMC_toolchange/arm.stl
Normal file
1780
configs/sim/axis/vismach/VMC_toolchange/arm.stl
Normal file
File diff suppressed because it is too large
Load Diff
772
configs/sim/axis/vismach/VMC_toolchange/base.stl
Normal file
772
configs/sim/axis/vismach/VMC_toolchange/base.stl
Normal file
@@ -0,0 +1,772 @@
|
||||
solid ascii
|
||||
facet normal -5.102026e-001 -1.367084e-001 8.491196e-001
|
||||
outer loop
|
||||
vertex -1.065900e+000 9.891434e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.816434e+000 1.241099e+002
|
||||
vertex -1.045804e+000 9.816434e+000 1.242000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -3.734942e-001 -3.734942e-001 8.491196e-001
|
||||
outer loop
|
||||
vertex -1.065900e+000 9.891434e+000 1.242000e+002
|
||||
vertex -1.120804e+000 9.946337e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.816434e+000 1.241099e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.367084e-001 -5.102026e-001 8.491196e-001
|
||||
outer loop
|
||||
vertex -1.120804e+000 9.946337e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.966434e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.816434e+000 1.241099e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1.367084e-001 -5.102026e-001 8.491196e-001
|
||||
outer loop
|
||||
vertex -1.195804e+000 9.966434e+000 1.242000e+002
|
||||
vertex -1.270804e+000 9.946337e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.816434e+000 1.241099e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 3.734942e-001 -3.734942e-001 8.491196e-001
|
||||
outer loop
|
||||
vertex -1.270804e+000 9.946337e+000 1.242000e+002
|
||||
vertex -1.325708e+000 9.891434e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.816434e+000 1.241099e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 5.102026e-001 -1.367084e-001 8.491196e-001
|
||||
outer loop
|
||||
vertex -1.325708e+000 9.891434e+000 1.242000e+002
|
||||
vertex -1.345804e+000 9.816434e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.816434e+000 1.241099e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 5.102026e-001 1.367084e-001 8.491196e-001
|
||||
outer loop
|
||||
vertex -1.345804e+000 9.816434e+000 1.242000e+002
|
||||
vertex -1.325708e+000 9.741434e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.816434e+000 1.241099e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 3.734942e-001 3.734942e-001 8.491196e-001
|
||||
outer loop
|
||||
vertex -1.325708e+000 9.741434e+000 1.242000e+002
|
||||
vertex -1.270804e+000 9.686530e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.816434e+000 1.241099e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1.367084e-001 5.102026e-001 8.491196e-001
|
||||
outer loop
|
||||
vertex -1.270804e+000 9.686530e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.666434e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.816434e+000 1.241099e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.367084e-001 5.102026e-001 8.491196e-001
|
||||
outer loop
|
||||
vertex -1.195804e+000 9.666434e+000 1.242000e+002
|
||||
vertex -1.120804e+000 9.686530e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.816434e+000 1.241099e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -3.734942e-001 3.734942e-001 8.491196e-001
|
||||
outer loop
|
||||
vertex -1.120804e+000 9.686530e+000 1.242000e+002
|
||||
vertex -1.065900e+000 9.741434e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.816434e+000 1.241099e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -5.102026e-001 1.367084e-001 8.491196e-001
|
||||
outer loop
|
||||
vertex -1.065900e+000 9.741434e+000 1.242000e+002
|
||||
vertex -1.045804e+000 9.816434e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.816434e+000 1.241099e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -9.659258e-001 -2.588190e-001 -0.000000e+000
|
||||
outer loop
|
||||
vertex -1.065900e+000 9.891434e+000 1.250000e+002
|
||||
vertex -1.065900e+000 9.891434e+000 1.242000e+002
|
||||
vertex -1.045804e+000 9.816434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -7.071068e-001 -7.071068e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.065900e+000 9.891434e+000 1.250000e+002
|
||||
vertex -1.120804e+000 9.946337e+000 1.242000e+002
|
||||
vertex -1.065900e+000 9.891434e+000 1.242000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -7.071068e-001 -7.071068e-001 -0.000000e+000
|
||||
outer loop
|
||||
vertex -1.065900e+000 9.891434e+000 1.250000e+002
|
||||
vertex -1.120804e+000 9.946337e+000 1.250000e+002
|
||||
vertex -1.120804e+000 9.946337e+000 1.242000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -2.588190e-001 -9.659258e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.120804e+000 9.946337e+000 1.242000e+002
|
||||
vertex -1.120804e+000 9.946337e+000 1.250000e+002
|
||||
vertex -1.195804e+000 9.966434e+000 1.242000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -2.588190e-001 -9.659258e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.195804e+000 9.966434e+000 1.242000e+002
|
||||
vertex -1.120804e+000 9.946337e+000 1.250000e+002
|
||||
vertex -1.195804e+000 9.966434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 2.588190e-001 -9.659258e-001 7.330812e-017
|
||||
outer loop
|
||||
vertex -1.270804e+000 9.946337e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.966434e+000 1.250000e+002
|
||||
vertex -1.270804e+000 9.946337e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-001 -7.071068e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.325708e+000 9.891434e+000 1.242000e+002
|
||||
vertex -1.270804e+000 9.946337e+000 1.250000e+002
|
||||
vertex -1.325708e+000 9.891434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 9.659258e-001 -2.588190e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.345804e+000 9.816434e+000 1.242000e+002
|
||||
vertex -1.325708e+000 9.891434e+000 1.250000e+002
|
||||
vertex -1.345804e+000 9.816434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 9.659258e-001 2.588190e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.325708e+000 9.741434e+000 1.242000e+002
|
||||
vertex -1.345804e+000 9.816434e+000 1.250000e+002
|
||||
vertex -1.325708e+000 9.741434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-001 7.071068e-001 -1.954883e-016
|
||||
outer loop
|
||||
vertex -1.270804e+000 9.686530e+000 1.242000e+002
|
||||
vertex -1.325708e+000 9.741434e+000 1.250000e+002
|
||||
vertex -1.270804e+000 9.686530e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 2.588190e-001 9.659258e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.195804e+000 9.666434e+000 1.242000e+002
|
||||
vertex -1.270804e+000 9.686530e+000 1.250000e+002
|
||||
vertex -1.195804e+000 9.666434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -2.588190e-001 9.659258e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.120804e+000 9.686530e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.666434e+000 1.250000e+002
|
||||
vertex -1.120804e+000 9.686530e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -7.071068e-001 7.071068e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.065900e+000 9.741434e+000 1.242000e+002
|
||||
vertex -1.120804e+000 9.686530e+000 1.250000e+002
|
||||
vertex -1.065900e+000 9.741434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -9.659258e-001 2.588190e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.045804e+000 9.816434e+000 1.242000e+002
|
||||
vertex -1.065900e+000 9.741434e+000 1.250000e+002
|
||||
vertex -1.045804e+000 9.816434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -9.659258e-001 -2.588190e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.065900e+000 9.891434e+000 1.242000e+002
|
||||
vertex -1.045804e+000 9.816434e+000 1.242000e+002
|
||||
vertex -1.045804e+000 9.816434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 2.588190e-001 -9.659258e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.195804e+000 9.966434e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.966434e+000 1.250000e+002
|
||||
vertex -1.270804e+000 9.946337e+000 1.242000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-001 -7.071068e-001 1.962616e-016
|
||||
outer loop
|
||||
vertex -1.270804e+000 9.946337e+000 1.242000e+002
|
||||
vertex -1.270804e+000 9.946337e+000 1.250000e+002
|
||||
vertex -1.325708e+000 9.891434e+000 1.242000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 9.659258e-001 -2.588190e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.325708e+000 9.891434e+000 1.242000e+002
|
||||
vertex -1.325708e+000 9.891434e+000 1.250000e+002
|
||||
vertex -1.345804e+000 9.816434e+000 1.242000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 9.659258e-001 2.588190e-001 -0.000000e+000
|
||||
outer loop
|
||||
vertex -1.345804e+000 9.816434e+000 1.242000e+002
|
||||
vertex -1.345804e+000 9.816434e+000 1.250000e+002
|
||||
vertex -1.325708e+000 9.741434e+000 1.242000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-001 7.071068e-001 -0.000000e+000
|
||||
outer loop
|
||||
vertex -1.325708e+000 9.741434e+000 1.242000e+002
|
||||
vertex -1.325708e+000 9.741434e+000 1.250000e+002
|
||||
vertex -1.270804e+000 9.686530e+000 1.242000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 2.588190e-001 9.659258e-001 -7.183672e-017
|
||||
outer loop
|
||||
vertex -1.270804e+000 9.686530e+000 1.242000e+002
|
||||
vertex -1.270804e+000 9.686530e+000 1.250000e+002
|
||||
vertex -1.195804e+000 9.666434e+000 1.242000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -2.588190e-001 9.659258e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.195804e+000 9.666434e+000 1.242000e+002
|
||||
vertex -1.195804e+000 9.666434e+000 1.250000e+002
|
||||
vertex -1.120804e+000 9.686530e+000 1.242000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -7.071068e-001 7.071068e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.120804e+000 9.686530e+000 1.242000e+002
|
||||
vertex -1.120804e+000 9.686530e+000 1.250000e+002
|
||||
vertex -1.065900e+000 9.741434e+000 1.242000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -9.659258e-001 2.588190e-001 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.065900e+000 9.741434e+000 1.242000e+002
|
||||
vertex -1.065900e+000 9.741434e+000 1.250000e+002
|
||||
vertex -1.045804e+000 9.816434e+000 1.242000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -7.071068e-001 0.000000e+000 -7.071068e-001
|
||||
outer loop
|
||||
vertex -6.195804e+000 2.406643e+001 2.150000e+001
|
||||
vertex -9.695804e+000 2.406643e+001 2.500000e+001
|
||||
vertex -6.195804e+000 7.406643e+001 2.150000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -7.071068e-001 0.000000e+000 -7.071068e-001
|
||||
outer loop
|
||||
vertex -6.195804e+000 7.406643e+001 2.150000e+001
|
||||
vertex -9.695804e+000 2.406643e+001 2.500000e+001
|
||||
vertex -9.695804e+000 7.406643e+001 2.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex -1.369580e+001 2.406643e+001 2.150000e+001
|
||||
vertex -6.195804e+000 2.406643e+001 2.150000e+001
|
||||
vertex -1.369580e+001 7.406643e+001 2.150000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+000 0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex -1.369580e+001 7.406643e+001 2.150000e+001
|
||||
vertex -6.195804e+000 2.406643e+001 2.150000e+001
|
||||
vertex -6.195804e+000 7.406643e+001 2.150000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex 3.804196e+000 2.406643e+001 2.150000e+001
|
||||
vertex 1.130420e+001 2.406643e+001 2.150000e+001
|
||||
vertex 3.804196e+000 7.406643e+001 2.150000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+000 0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex 3.804196e+000 7.406643e+001 2.150000e+001
|
||||
vertex 1.130420e+001 2.406643e+001 2.150000e+001
|
||||
vertex 1.130420e+001 7.406643e+001 2.150000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-001 0.000000e+000 -7.071068e-001
|
||||
outer loop
|
||||
vertex 7.304196e+000 2.406643e+001 2.500000e+001
|
||||
vertex 3.804196e+000 2.406643e+001 2.150000e+001
|
||||
vertex 7.304196e+000 7.406643e+001 2.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-001 0.000000e+000 -7.071068e-001
|
||||
outer loop
|
||||
vertex 7.304196e+000 7.406643e+001 2.500000e+001
|
||||
vertex 3.804196e+000 2.406643e+001 2.150000e+001
|
||||
vertex 3.804196e+000 7.406643e+001 2.150000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex -9.695804e+000 2.406643e+001 2.500000e+001
|
||||
vertex 7.304196e+000 2.406643e+001 2.500000e+001
|
||||
vertex -9.695804e+000 7.406643e+001 2.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+000 0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex -9.695804e+000 7.406643e+001 2.500000e+001
|
||||
vertex 7.304196e+000 2.406643e+001 2.500000e+001
|
||||
vertex 7.304196e+000 7.406643e+001 2.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1.000000e+000 0.000000e+000 0.000000e+000
|
||||
outer loop
|
||||
vertex 1.130420e+001 7.406643e+001 2.150000e+001
|
||||
vertex 1.130420e+001 2.406643e+001 2.150000e+001
|
||||
vertex 1.130420e+001 7.406643e+001 0.000000e+000
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1.000000e+000 0.000000e+000 0.000000e+000
|
||||
outer loop
|
||||
vertex 1.130420e+001 7.406643e+001 0.000000e+000
|
||||
vertex 1.130420e+001 2.406643e+001 2.150000e+001
|
||||
vertex 1.130420e+001 -9.335665e-001 0.000000e+000
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1.000000e+000 0.000000e+000 -0.000000e+000
|
||||
outer loop
|
||||
vertex 1.130420e+001 -9.335665e-001 0.000000e+000
|
||||
vertex 1.130420e+001 2.406643e+001 2.150000e+001
|
||||
vertex 1.130420e+001 2.056643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1.000000e+000 -0.000000e+000 -0.000000e+000
|
||||
outer loop
|
||||
vertex 1.130420e+001 -9.335665e-001 1.250000e+002
|
||||
vertex 1.130420e+001 2.056643e+001 3.500000e+001
|
||||
vertex 1.130420e+001 2.056643e+001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1.000000e+000 -0.000000e+000 0.000000e+000
|
||||
outer loop
|
||||
vertex 1.130420e+001 -9.335665e-001 1.250000e+002
|
||||
vertex 1.130420e+001 -9.335665e-001 0.000000e+000
|
||||
vertex 1.130420e+001 2.056643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1.000000e+000 0.000000e+000 -0.000000e+000
|
||||
outer loop
|
||||
vertex 1.130420e+001 2.406643e+001 2.150000e+001
|
||||
vertex 1.130420e+001 2.406643e+001 3.500000e+001
|
||||
vertex 1.130420e+001 2.056643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 1.000000e+000 5.526444e-016
|
||||
outer loop
|
||||
vertex -1.369580e+001 2.056643e+001 3.500000e+001
|
||||
vertex -1.369580e+001 2.056643e+001 1.250000e+002
|
||||
vertex -6.195804e+000 2.056643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+000 1.000000e+000 5.526444e-016
|
||||
outer loop
|
||||
vertex -6.195804e+000 2.056643e+001 3.500000e+001
|
||||
vertex -1.369580e+001 2.056643e+001 1.250000e+002
|
||||
vertex -6.195804e+000 2.056643e+001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -7.071068e-001 -7.071068e-001 -3.907786e-016
|
||||
outer loop
|
||||
vertex -6.195804e+000 2.056643e+001 3.500000e+001
|
||||
vertex -6.195804e+000 2.056643e+001 1.250000e+002
|
||||
vertex -9.695804e+000 2.406643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -7.071068e-001 -7.071068e-001 -3.907786e-016
|
||||
outer loop
|
||||
vertex -9.695804e+000 2.406643e+001 3.500000e+001
|
||||
vertex -6.195804e+000 2.056643e+001 1.250000e+002
|
||||
vertex -9.695804e+000 2.406643e+001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex -6.195804e+000 2.056643e+001 3.500000e+001
|
||||
vertex -9.695804e+000 2.406643e+001 3.500000e+001
|
||||
vertex -1.369580e+001 2.056643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex -1.369580e+001 2.056643e+001 3.500000e+001
|
||||
vertex -9.695804e+000 2.406643e+001 3.500000e+001
|
||||
vertex -1.369580e+001 2.406643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-001 -7.071068e-001 -3.907786e-016
|
||||
outer loop
|
||||
vertex 7.304196e+000 2.406643e+001 3.500000e+001
|
||||
vertex 7.304196e+000 2.406643e+001 1.250000e+002
|
||||
vertex 3.804196e+000 2.056643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 7.071068e-001 -7.071068e-001 -3.907786e-016
|
||||
outer loop
|
||||
vertex 3.804196e+000 2.056643e+001 3.500000e+001
|
||||
vertex 7.304196e+000 2.406643e+001 1.250000e+002
|
||||
vertex 3.804196e+000 2.056643e+001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 1.000000e+000 5.526444e-016
|
||||
outer loop
|
||||
vertex 3.804196e+000 2.056643e+001 3.500000e+001
|
||||
vertex 3.804196e+000 2.056643e+001 1.250000e+002
|
||||
vertex 1.130420e+001 2.056643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+000 1.000000e+000 5.526444e-016
|
||||
outer loop
|
||||
vertex 1.130420e+001 2.056643e+001 3.500000e+001
|
||||
vertex 3.804196e+000 2.056643e+001 1.250000e+002
|
||||
vertex 1.130420e+001 2.056643e+001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex 3.804196e+000 2.056643e+001 3.500000e+001
|
||||
vertex 1.130420e+001 2.056643e+001 3.500000e+001
|
||||
vertex 7.304196e+000 2.406643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+000 0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex 7.304196e+000 2.406643e+001 3.500000e+001
|
||||
vertex 1.130420e+001 2.056643e+001 3.500000e+001
|
||||
vertex 1.130420e+001 2.406643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000
|
||||
outer loop
|
||||
vertex -1.369580e+001 7.406643e+001 2.150000e+001
|
||||
vertex -1.369580e+001 7.406643e+001 0.000000e+000
|
||||
vertex -1.369580e+001 2.406643e+001 2.150000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000
|
||||
outer loop
|
||||
vertex -1.369580e+001 2.406643e+001 2.150000e+001
|
||||
vertex -1.369580e+001 7.406643e+001 0.000000e+000
|
||||
vertex -1.369580e+001 -9.335665e-001 0.000000e+000
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.000000e+000 -0.000000e+000 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.369580e+001 2.056643e+001 3.500000e+001
|
||||
vertex -1.369580e+001 -9.335665e-001 0.000000e+000
|
||||
vertex -1.369580e+001 -9.335665e-001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000
|
||||
outer loop
|
||||
vertex -1.369580e+001 2.056643e+001 1.250000e+002
|
||||
vertex -1.369580e+001 2.056643e+001 3.500000e+001
|
||||
vertex -1.369580e+001 -9.335665e-001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.000000e+000 -0.000000e+000 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.369580e+001 2.406643e+001 2.150000e+001
|
||||
vertex -1.369580e+001 -9.335665e-001 0.000000e+000
|
||||
vertex -1.369580e+001 2.056643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.000000e+000 -0.000000e+000 0.000000e+000
|
||||
outer loop
|
||||
vertex -1.369580e+001 2.406643e+001 3.500000e+001
|
||||
vertex -1.369580e+001 2.406643e+001 2.150000e+001
|
||||
vertex -1.369580e+001 2.056643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.328049e-013 -1.538931e-013 1.000000e+000
|
||||
outer loop
|
||||
vertex -1.065900e+000 9.741434e+000 1.250000e+002
|
||||
vertex 1.130420e+001 -9.335665e-001 1.250000e+002
|
||||
vertex -1.045804e+000 9.816434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex -1.065900e+000 9.741434e+000 1.250000e+002
|
||||
vertex -1.120804e+000 9.686530e+000 1.250000e+002
|
||||
vertex 1.130420e+001 -9.335665e-001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex 1.130420e+001 -9.335665e-001 1.250000e+002
|
||||
vertex -1.120804e+000 9.686530e+000 1.250000e+002
|
||||
vertex -1.195804e+000 9.666434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex -1.369580e+001 -9.335665e-001 1.250000e+002
|
||||
vertex -1.195804e+000 9.666434e+000 1.250000e+002
|
||||
vertex -1.270804e+000 9.686530e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+000 0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex -1.325708e+000 9.741434e+000 1.250000e+002
|
||||
vertex -1.369580e+001 -9.335665e-001 1.250000e+002
|
||||
vertex -1.270804e+000 9.686530e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex -1.325708e+000 9.741434e+000 1.250000e+002
|
||||
vertex -1.345804e+000 9.816434e+000 1.250000e+002
|
||||
vertex -1.369580e+001 -9.335665e-001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 5.753382e-016 -6.609700e-016 1.000000e+000
|
||||
outer loop
|
||||
vertex -1.369580e+001 -9.335665e-001 1.250000e+002
|
||||
vertex -1.345804e+000 9.816434e+000 1.250000e+002
|
||||
vertex -1.369580e+001 2.056643e+001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 9.330552e-016 -2.500114e-016 1.000000e+000
|
||||
outer loop
|
||||
vertex -1.369580e+001 2.056643e+001 1.250000e+002
|
||||
vertex -1.345804e+000 9.816434e+000 1.250000e+002
|
||||
vertex -1.325708e+000 9.891434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 9.141696e-016 -9.141696e-016 1.000000e+000
|
||||
outer loop
|
||||
vertex -6.195804e+000 2.056643e+001 1.250000e+002
|
||||
vertex -1.325708e+000 9.891434e+000 1.250000e+002
|
||||
vertex -1.270804e+000 9.946337e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 3.189169e-016 -1.190214e-015 1.000000e+000
|
||||
outer loop
|
||||
vertex -1.195804e+000 9.966434e+000 1.250000e+002
|
||||
vertex -6.195804e+000 2.056643e+001 1.250000e+002
|
||||
vertex -1.270804e+000 9.946337e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 -1.340647e-015 1.000000e+000
|
||||
outer loop
|
||||
vertex -1.195804e+000 9.966434e+000 1.250000e+002
|
||||
vertex 3.804196e+000 2.056643e+001 1.250000e+002
|
||||
vertex -6.195804e+000 2.056643e+001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -3.189169e-016 -1.190214e-015 1.000000e+000
|
||||
outer loop
|
||||
vertex -1.195804e+000 9.966434e+000 1.250000e+002
|
||||
vertex -1.120804e+000 9.946337e+000 1.250000e+002
|
||||
vertex 3.804196e+000 2.056643e+001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -9.141696e-016 -9.141696e-016 1.000000e+000
|
||||
outer loop
|
||||
vertex 3.804196e+000 2.056643e+001 1.250000e+002
|
||||
vertex -1.120804e+000 9.946337e+000 1.250000e+002
|
||||
vertex -1.065900e+000 9.891434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1.337379e-013 1.536431e-013 1.000000e+000
|
||||
outer loop
|
||||
vertex 1.130420e+001 2.056643e+001 1.250000e+002
|
||||
vertex -1.065900e+000 9.891434e+000 1.250000e+002
|
||||
vertex -1.045804e+000 9.816434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 5.753382e-016 -6.609700e-016 1.000000e+000
|
||||
outer loop
|
||||
vertex 1.130420e+001 -9.335665e-001 1.250000e+002
|
||||
vertex 1.130420e+001 2.056643e+001 1.250000e+002
|
||||
vertex -1.045804e+000 9.816434e+000 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex 1.130420e+001 -9.335665e-001 1.250000e+002
|
||||
vertex -1.195804e+000 9.666434e+000 1.250000e+002
|
||||
vertex -1.369580e+001 -9.335665e-001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 -1.331228e-015 1.000000e+000
|
||||
outer loop
|
||||
vertex -1.369580e+001 2.056643e+001 1.250000e+002
|
||||
vertex -1.325708e+000 9.891434e+000 1.250000e+002
|
||||
vertex -6.195804e+000 2.056643e+001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 -1.331228e-015 1.000000e+000
|
||||
outer loop
|
||||
vertex 3.804196e+000 2.056643e+001 1.250000e+002
|
||||
vertex -1.065900e+000 9.891434e+000 1.250000e+002
|
||||
vertex 1.130420e+001 2.056643e+001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex 7.304196e+000 2.406643e+001 1.250000e+002
|
||||
vertex -9.695804e+000 2.406643e+001 1.250000e+002
|
||||
vertex 3.804196e+000 2.056643e+001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 0.000000e+000 1.000000e+000
|
||||
outer loop
|
||||
vertex 3.804196e+000 2.056643e+001 1.250000e+002
|
||||
vertex -9.695804e+000 2.406643e+001 1.250000e+002
|
||||
vertex -6.195804e+000 2.056643e+001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 -1.000000e+000 -3.099743e-016
|
||||
outer loop
|
||||
vertex 1.130420e+001 -9.335665e-001 0.000000e+000
|
||||
vertex 1.130420e+001 -9.335665e-001 1.250000e+002
|
||||
vertex -1.369580e+001 -9.335665e-001 0.000000e+000
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+000 -1.000000e+000 -3.099743e-016
|
||||
outer loop
|
||||
vertex -1.369580e+001 -9.335665e-001 0.000000e+000
|
||||
vertex 1.130420e+001 -9.335665e-001 1.250000e+002
|
||||
vertex -1.369580e+001 -9.335665e-001 1.250000e+002
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 1.000000e+000 5.526444e-016
|
||||
outer loop
|
||||
vertex -9.695804e+000 2.406643e+001 1.250000e+002
|
||||
vertex 7.304196e+000 2.406643e+001 3.500000e+001
|
||||
vertex -9.695804e+000 2.406643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+000 1.000000e+000 5.526444e-016
|
||||
outer loop
|
||||
vertex -9.695804e+000 2.406643e+001 1.250000e+002
|
||||
vertex 7.304196e+000 2.406643e+001 1.250000e+002
|
||||
vertex 7.304196e+000 2.406643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 1.000000e+000 -4.973799e-015
|
||||
outer loop
|
||||
vertex -9.695804e+000 2.406643e+001 3.500000e+001
|
||||
vertex 7.304196e+000 2.406643e+001 3.500000e+001
|
||||
vertex 7.304196e+000 2.406643e+001 2.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 1.000000e+000 -4.973799e-015
|
||||
outer loop
|
||||
vertex -9.695804e+000 2.406643e+001 2.500000e+001
|
||||
vertex -9.695804e+000 2.406643e+001 3.500000e+001
|
||||
vertex 7.304196e+000 2.406643e+001 2.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 1.000000e+000 -4.973799e-015
|
||||
outer loop
|
||||
vertex -9.695804e+000 2.406643e+001 2.500000e+001
|
||||
vertex -1.369580e+001 2.406643e+001 3.500000e+001
|
||||
vertex -9.695804e+000 2.406643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 3.223759e-015 1.000000e+000 -3.684296e-015
|
||||
outer loop
|
||||
vertex -9.695804e+000 2.406643e+001 2.500000e+001
|
||||
vertex -1.369580e+001 2.406643e+001 2.150000e+001
|
||||
vertex -1.369580e+001 2.406643e+001 3.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 1.000000e+000 0.000000e+000
|
||||
outer loop
|
||||
vertex -9.695804e+000 2.406643e+001 2.500000e+001
|
||||
vertex -6.195804e+000 2.406643e+001 2.150000e+001
|
||||
vertex -1.369580e+001 2.406643e+001 2.150000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 1.000000e+000 -4.973799e-015
|
||||
outer loop
|
||||
vertex 7.304196e+000 2.406643e+001 3.500000e+001
|
||||
vertex 1.130420e+001 2.406643e+001 3.500000e+001
|
||||
vertex 7.304196e+000 2.406643e+001 2.500000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -3.223759e-015 1.000000e+000 -3.684296e-015
|
||||
outer loop
|
||||
vertex 7.304196e+000 2.406643e+001 2.500000e+001
|
||||
vertex 1.130420e+001 2.406643e+001 3.500000e+001
|
||||
vertex 1.130420e+001 2.406643e+001 2.150000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+000 1.000000e+000 0.000000e+000
|
||||
outer loop
|
||||
vertex 3.804196e+000 2.406643e+001 2.150000e+001
|
||||
vertex 7.304196e+000 2.406643e+001 2.500000e+001
|
||||
vertex 1.130420e+001 2.406643e+001 2.150000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 1.000000e+000 0.000000e+000
|
||||
outer loop
|
||||
vertex -9.695804e+000 7.406643e+001 2.500000e+001
|
||||
vertex 3.804196e+000 7.406643e+001 2.150000e+001
|
||||
vertex -6.195804e+000 7.406643e+001 2.150000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+000 1.000000e+000 0.000000e+000
|
||||
outer loop
|
||||
vertex -9.695804e+000 7.406643e+001 2.500000e+001
|
||||
vertex 7.304196e+000 7.406643e+001 2.500000e+001
|
||||
vertex 3.804196e+000 7.406643e+001 2.150000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 1.000000e+000 0.000000e+000
|
||||
outer loop
|
||||
vertex 1.130420e+001 7.406643e+001 2.150000e+001
|
||||
vertex 1.130420e+001 7.406643e+001 0.000000e+000
|
||||
vertex 3.804196e+000 7.406643e+001 2.150000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 1.000000e+000 0.000000e+000
|
||||
outer loop
|
||||
vertex 3.804196e+000 7.406643e+001 2.150000e+001
|
||||
vertex 1.130420e+001 7.406643e+001 0.000000e+000
|
||||
vertex -1.369580e+001 7.406643e+001 0.000000e+000
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 1.000000e+000 -0.000000e+000
|
||||
outer loop
|
||||
vertex -6.195804e+000 7.406643e+001 2.150000e+001
|
||||
vertex -1.369580e+001 7.406643e+001 0.000000e+000
|
||||
vertex -1.369580e+001 7.406643e+001 2.150000e+001
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 1.000000e+000 0.000000e+000
|
||||
outer loop
|
||||
vertex -6.195804e+000 7.406643e+001 2.150000e+001
|
||||
vertex 3.804196e+000 7.406643e+001 2.150000e+001
|
||||
vertex -1.369580e+001 7.406643e+001 0.000000e+000
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.000000e+000 0.000000e+000 -1.000000e+000
|
||||
outer loop
|
||||
vertex 1.130420e+001 -9.335665e-001 0.000000e+000
|
||||
vertex -1.369580e+001 -9.335665e-001 0.000000e+000
|
||||
vertex 1.130420e+001 7.406643e+001 0.000000e+000
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.000000e+000 0.000000e+000 -1.000000e+000
|
||||
outer loop
|
||||
vertex 1.130420e+001 7.406643e+001 0.000000e+000
|
||||
vertex -1.369580e+001 -9.335665e-001 0.000000e+000
|
||||
vertex -1.369580e+001 7.406643e+001 0.000000e+000
|
||||
endloop
|
||||
endfacet
|
||||
endsolid
|
||||
33294
configs/sim/axis/vismach/VMC_toolchange/carousel.stl
Normal file
33294
configs/sim/axis/vismach/VMC_toolchange/carousel.stl
Normal file
File diff suppressed because it is too large
Load Diff
1318
configs/sim/axis/vismach/VMC_toolchange/head.stl
Normal file
1318
configs/sim/axis/vismach/VMC_toolchange/head.stl
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user