EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  <20162017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  <20162017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Galil Motor Tutorial?
From: Mark Clift <[email protected]>
To: "[email protected] ([email protected])" <[email protected]>
Date: Thu, 14 Jan 2016 10:55:29 +0000
Hi Eric,

The driver is still under development.  Documentation will be provided as soon as possible, yet more development is planned.  I can help you with your project.


The controller you mention is a 1 axis controller, so I understand coordinated motion, and profile motion probably isn't in your interest area.  Its easy to remove, and make it real simple.

Lets get started:
1.  Multiple IP addresses.
A) The driver can connect to many controllers all at the same time.  The example shows connection to a motor controller and RIO controller.  You only have 1 controller.  Proceed to comment one of them out, suggest the RIO.  See point 2.

2.  Comment out, or remove the following lines from galil.cmd:
#Load kinematics for CS axis/motors (eg. Forward and reverse kinematics, kinematic variables)
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_csmotor_kinematics.substitutions")

#Load coordinate system features (eg. Coordinate system S and T status, motor list, segments processed, moving status)
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_coordinate_systems.substitutions")

#Load digital IO databases
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_digital_ports.substitutions")

#Load analog IO databases
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_analog_ports.substitutions")

#Load user defined functions
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_userdef_records.substitutions")

#Load profiles
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_profileMoveController.substitutions")
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_profileMoveAxis.substitutions")

#Load kinematics for CS axis/motors (eg. Forward and reverse kinematics, kinematic variables)
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_csmotor_kinematics.substitutions")

#Load coordinate system features (eg. Coordinate system S and T status, motor list, segments processed, moving status)
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_coordinate_systems.substitutions")

#Load digital IO databases
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_digital_ports.substitutions")

#Load analog IO databases
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_analog_ports.substitutions")

#Load user defined functions
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_userdef_records.substitutions")

#Load profiles
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_profileMoveController.substitutions")
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_profileMoveAxis.substitutions")

# Create a Galil controller
GalilCreateController("RIO", "192.168.0.51", 2)

# Start the controller
# Example using homing routine template assembly
#GalilStartController("Galil", "$(GALIL)/GalilSup/Db/galil_Default_Header.gmc;$(GALIL)/GalilSup/Db/galil_Home_RevLimit.gmc!$(GALIL)/GalilSup/Db/galil_Home_ForwLimit.gmc!$(GALIL)/GalilSup/Db/galil_Home_Home.gmc!$(GALIL)/GalilSup/Db/galil_Home_ForwLimit.gmc!$(GALIL)/GalilSup/Db/galil_Piezo_Home.gmc!$(GALIL)/GalilSup/Db/galil_Piezo_Home.gmc!$(GALIL)/GalilSup/Db/galil_Piezo_Home.gmc!$(GALIL)/GalilSup/Db/galil_Piezo_Home.gmc;$(GALIL)/GalilSup/Db/galil_Default_Footer.gmc", 0, 0, 3)

# Start the controller
GalilStartController("RIO", "rio.gmc", 1, 0, 0)

# GalilCreateProfile command parameters are:
#
# 1. char *portName Asyn port for controller
# 2. Int maxPoints in trajectory

# Create trajectory profiles
GalilCreateProfile("Galil", 2000)

Remove purple above only if you don't wont digital/analog IO either.

3. Comment out, or remove the following lines from galilTestApp.cmd:
# Kinematics
# Forward transforms (Readbacks)
file "galil_forward_transform.req" P=$(P), M=I
file "galil_forward_transform.req" P=$(P), M=J
file "galil_forward_transform.req" P=$(P), M=K
file "galil_forward_transform.req" P=$(P), M=L
file "galil_forward_transform.req" P=$(P), M=M
file "galil_forward_transform.req" P=$(P), M=N
file "galil_forward_transform.req" P=$(P), M=O
file "galil_forward_transform.req" P=$(P), M=P
# Reverse transforms (Setpoints)
file "galil_reverse_transforms.req" P=$(P), M=I
file "galil_reverse_transforms.req" P=$(P), M=J
file "galil_reverse_transforms.req" P=$(P), M=K
file "galil_reverse_transforms.req" P=$(P), M=L
file "galil_reverse_transforms.req" P=$(P), M=M
file "galil_reverse_transforms.req" P=$(P), M=N
file "galil_reverse_transforms.req" P=$(P), M=O
file "galil_reverse_transforms.req" P=$(P), M=P

# Kinematic variables
file "galil_kinematic_variable.req" P=$(P), R=Q
file "galil_kinematic_variable.req" P=$(P), R=R
file "galil_kinematic_variable.req" P=$(P), R=S
file "galil_kinematic_variable.req" P=$(P), R=T
file "galil_kinematic_variable.req" P=$(P), R=U
file "galil_kinematic_variable.req" P=$(P), R=V
file "galil_kinematic_variable.req" P=$(P), R=W
file "galil_kinematic_variable.req" P=$(P), R=X
file "galil_kinematic_variable.req" P=$(P), R=Y
file "galil_kinematic_variable.req" P=$(P), R=Z

# First 16 Digital input bits
file "galil_digital_in_bit.req" P=$(P), R=Galil0Bi0
file "galil_digital_in_bit.req" P=$(P), R=Galil0Bi1
file "galil_digital_in_bit.req" P=$(P), R=Galil0Bi2
file "galil_digital_in_bit.req" P=$(P), R=Galil0Bi3
file "galil_digital_in_bit.req" P=$(P), R=Galil0Bi4
file "galil_digital_in_bit.req" P=$(P), R=Galil0Bi5
file "galil_digital_in_bit.req" P=$(P), R=Galil0Bi6
file "galil_digital_in_bit.req" P=$(P), R=Galil0Bi7
file "galil_digital_in_bit.req" P=$(P), R=Galil1Bi0
file "galil_digital_in_bit.req" P=$(P), R=Galil1Bi1
file "galil_digital_in_bit.req" P=$(P), R=Galil1Bi2
file "galil_digital_in_bit.req" P=$(P), R=Galil1Bi3
file "galil_digital_in_bit.req" P=$(P), R=Galil1Bi4
file "galil_digital_in_bit.req" P=$(P), R=Galil1Bi5
file "galil_digital_in_bit.req" P=$(P), R=Galil1Bi6
file "galil_digital_in_bit.req" P=$(P), R=Galil1Bi7

# First 16 Digital output bits
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo0
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo1
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo2
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo3
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo4
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo5
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo6
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo7
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo8
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo9
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo10
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo11
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo12
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo13
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo14
file "galil_digital_out_bit.req" P=$(P), R=Galil0Bo15

# First 8 Analog inputs
file "galil_analog_in.req" P=$(P), R=GalilAi0
file "galil_analog_in.req" P=$(P), R=GalilAi1
file "galil_analog_in.req" P=$(P), R=GalilAi2
file "galil_analog_in.req" P=$(P), R=GalilAi3
file "galil_analog_in.req" P=$(P), R=GalilAi4
file "galil_analog_in.req" P=$(P), R=GalilAi5
file "galil_analog_in.req" P=$(P), R=GalilAi6
file "galil_analog_in.req" P=$(P), R=GalilAi7

# First 8 Analog outputs
file "galil_analog_out.req" P=$(P), R=GalilAo0
file "galil_analog_out.req" P=$(P), R=GalilAo1
file "galil_analog_out.req" P=$(P), R=GalilAo2
file "galil_analog_out.req" P=$(P), R=GalilAo3
file "galil_analog_out.req" P=$(P), R=GalilAo4
file "galil_analog_out.req" P=$(P), R=GalilAo5
file "galil_analog_out.req" P=$(P), R=GalilAo6
file "galil_analog_out.req" P=$(P), R=GalilAo7

4.  Extra Tips
Driver is designed to be screen oriented, most settings are there.  Motor type, encoder type, limit type, speed, PID parameters are all in screen.  Autosave restore used to restore these settings after startup.
Motor extras database is critical and cannot be removed, else lose above settings!  If script must provide these settings then use autosave file format.

Default autosave location is /autosave

I'm happy to help further.  Good luck, and best wishes.

Dr. Mark Clift
Senior Controls Engineer
Australian Synchrotron
800 Blackburn Road
Clayton 3168
Ph: +613 8540 4264
Fax: +613 8540 4200

Navigate by Date:
Prev: RE: Cost effective solution for monitor a large number of temperatures w EPICS Mazanec Tomáš
Next: Re: Skip updating an output link in aSub ? Priller, John
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  <20162017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Galil Motor Tutorial? Eric Norum
Next: Issues with building EDM on Debian 8 32bit Shawn Rapaz
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  <20162017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 15 Jul 2016 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·