Hi Jonathon,
You are getting errors like this:
dbLoadTemplate("/home/jonathanhai/support/Galil/GalilTestApp/Db/DMC01_motors-v6-10up.substitutions", "P=DMC01:, PORT=DMC01")
macLib: macro GALIL is undefined (expanding string $(GALIL)/GalilSup/Db/galil_motor-v6-10up.template)
filename="../dbStatic/dbLexRoutines.c" line number=277 dbRead opening file (null)
ERROR failed to load '$(GALIL)/GalilSup/Db/galil_motor-v6-10up.template'
The problem is that GALIL is not defined in any configure/RELEASE* file. I suggest you create the file
home/jonathanhai/support/Galil/configure/RELEASE.local.
This is what mine contains. You will need to edit for your site.
SUPPORT=/corvette/home/epics/devel
EPICS_BASE=/corvette/usr/local/epics-devel/base-7.0.9
AUTOSAVE=$(SUPPORT)/autosave-5-11
SNCSEQ=$(SUPPORT)/seq-2-2-9
SSCAN=$(SUPPORT)/sscan-2-11-5
CALC=$(SUPPORT)/calc-3-7-4
ASYN=$(SUPPORT)/asyn-4-45
BUSY=$(SUPPORT)/busy-1-7-3
MOTOR=$(SUPPORT)/motor-7-2-2
GALIL=$(SUPPORT)/Galil-4-0-2
IPAC=$(SUPPORT)/ipac-2-16
-include $(TOP)/../../RELEASE.local
-include $(TOP)/../../RELEASE.$(EPICS_HOST_ARCH).local
The last 2 lines I use to enable building Windows and Linux in the same tree. You probably don’t need them.
Mark
First of all thanks to everyone else who's helped me with my issues so far. The Galil module has built successfully! However, now I'm having trouble getting the Galil IOC up and running. I'm trying the iocGalilTest's st.cmd, and DMC01Configure.cmd
(included here.) But I'm running into issues. I've made a log of it, please excuse some of the mistakes in it. Sloppy fingers. Could anyone point me in the right direction? I'd like to be able to read and write PVs and have the motor attached to the Galil
DMC axis respond accordingly.
Thanks for all your help people.
#!../../bin/linux-x86_64/GalilTest
## Register all support components
dbLoadDatabase("dbd/GalilTest.dbd",0,0)
GalilTest_registerRecordDeviceDriver(pdbbase)
##################################################################################################
# IOC record prefix used for sscan/saveData databases and autosave setup
epicsEnvSet("IOCPREFIX", "DMC4183:")
# Configure an example DMC (digital motor controller)
# Configure an example RIO (Remote IO PLC controller)
epicsEnvSet("GALIL", "/home/jonathanhai/support/Galil")
##################################################################################################
### Scan-support software
# crate-resident scan. This executes 1D, 2D, 3D, and 4D scans, and caches
# 1D data, but it doesn't store anything to disk. (See 'saveData' below for that.)
dbLoadRecords("$(SSCAN)/sscanApp/Db/standardScans.db","P=$(IOCPREFIX),MAXPTS1=8000,MAXPTS2=1000,MAXPTS3=10,MAXPTS4=10,MAXPTSH=8000")
dbLoadRecords("$(SSCAN)/sscanApp/Db/saveData.db","P=$(IOCPREFIX)")
##################################################################################################
# Initialize saveData for step scans
saveData_Init("saveData.req", "P=$(IOCPREFIX)")
##################################################################################################
# Create DMC autosave monitor sets
< DMC01CreateMonitorSet.cmd
# Create RIO autosave monitor sets
< RIO01CreateMonitorSet.cmd
##################################################################################################
# Configure an example DMC (digital motor controller)
##################################################################################################
# Configure these settings for site
## uncomment to see every command sent to galil
#epicsEnvSet("GALIL_DEBUG_FILE", "galil_debug.txt")
# Asyn port name (eg. DMC01, DMC02, RIO01)
epicsEnvSet("PORT", "DMC01")
# Controller address (IP address, serial port)
epicsEnvSet("ADDRESS", "192.168.0.195")
# Controller update period Unit = millisecond
epicsEnvSet("UPDPERIOD", "8")
##################################################################################################
# Derived configuration settings
# Record prefix derived from asyn port name
epicsEnvSet("P", "$(PORT):")
##################################################################################################
#Load motor records for real and coordinate system (CS) motors
#Motor record version 6-9 and below
# dbLoadTemplate("$(TOP)/GalilTestApp/Db/$(PORT)_motors-v6-9down.substitutions", "P=$(P), PORT=$(PORT)")
#Motor record version 6-10 and up
dbLoadTemplate("$(TOP)/GalilTestApp/Db/$(PORT)_motors-v6-10up.substitutions", "P=$(P), PORT=$(PORT)")
#Load DMC controller features (eg. Limit switch type, home switch type, output compare, message consoles)
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_dmc_ctrl.substitutions", "P=$(P), PORT=$(PORT)")
#Load extra features for real axis/motors (eg. Motor type, encoder type)
dbLoadTemplate("$(TOP)/GalilTestApp/Db/$(PORT)_motor_extras.substitutions", "P=$(P), PORT=$(PORT)")
#Load extra features for CS axis/motors (eg. Setpoint monitor)
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_csmotor_extras.substitutions", "P=$(P), PORT=$(PORT)")
#Load kinematics for CS axis/motors (eg. Forward and reverse kinematics, kinematic variables)
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_csmotor_kinematics.substitutions", "P=$(P), PORT=$(PORT)")
#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", "P=$(P), PORT=$(PORT)")
#Load digital IO databases
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_dmc_digital_ports.substitutions", "P=$(P), PORT=$(PORT)")
#Load analog IO databases
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_dmc_analog_ports.substitutions", "P=$(P), PORT=$(PORT)")
#Load user defined functions
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_userdef_records.substitutions", "P=$(P), PORT=$(PORT)")
#Load user defined array support
dbLoadTemplate("$(TOP)/GalilTestApp/Db/galil_user_array.substitutions", "P=$(P), PORT=$(PORT)")
dbLoadTemplate("$(TOP)/GalilTestApp/Db/$(PORT)_profileMoveController.substitutions", "P=$(P), PORT=$(PORT)")
dbLoadTemplate("$(TOP)/GalilTestApp/Db/$(PORT)_profileMoveAxis.substitutions", "P=$(P), PORT=$(PORT)")
# GalilCreateController command parameters are:
# 1. Const char *portName - The name of the asyn port that will be created for this controller
# 2. Const char *address - The address of the controller
# 3. double updatePeriod - The time in ms between datarecords 2ms min, 200ms max. Async if controller + bus supports it, otherwise is polled/synchronous.
# - Recommend 50ms or less for ethernet
# - Specify negative updatePeriod < 0 to force synchronous tcp poll period. Otherwise will try async udp mode first
# Create a Galil controller
GalilCreateController("$(PORT)", "$(ADDRESS)", "$(UPDPERIOD)")
# GalilCreateAxis command parameters are:
# 1. char *portName Asyn port for controller
# 3. char *Motor interlock digital port number 1 to 8 eg. "1,2,4". 1st 8 bits are supported
# 4. int Interlock switch type 0 active when opto active, all other values switch type active when opto inactive
# GalilCreateAxis("$(PORT)","A","",1)
# GalilCreateAxis("$(PORT)","B","",1)
# GalilCreateAxis("$(PORT)","C","",1)
# GalilCreateAxis("$(PORT)","D","",1)
# GalilCreateAxis("$(PORT)","E","",1)
# GalilCreateAxis("$(PORT)","F","",1)
GalilCreateAxis("$(PORT)","G","",1)
# GalilCreateAxis("$(PORT)","H","",1)
# GalilAddCode command parameters are:
# Add custom code to generated code
# 1. char *portName Asyn port for controller
# 2. int section = code section to add custom code into 0 = card code, 1 = thread code, 2 = limits code, 3 = digital code
# 3. char *code_file custom code file
# GalilAddCode("$(PORT)", 1, "customcode.dmc")
# GalilReplaceHomeCode command parameters are:
# Replace generated axis home code with custom code
# 1. char *portName Asyn port for controller
# 3. char *code_file custom code file
# GalilReplaceHomeCode("$(PORT)", "A", "homeA.dmc")
# GalilCreateCSAxes command parameters are:
# 1. char *portName Asyn port for controller
#Create all CS axes (ie. I-P axis)
GalilCreateCSAxes("$(PORT)")
# GalilStartController command parameters are:
# 1. char *portName Asyn port for controller
# 2. char *code file(s) to deliver to the controller we are starting. "" = use generated code (recommended)
# Specify a single file or to use templates use: headerfile;bodyfile1!bodyfile2!bodyfileN;footerfile
# 3. int Burn program to EEPROM conditions
# 0 = transfer code if differs from eeprom, dont burn code to eeprom, then finally execute code thread 0
# 1 = transfer code if differs from eeprom, burn code to eeprom, then finally execute code thread 0
# It is asssumed thread 0 starts all other required threads
# 4. int Thread mask. Check these threads are running after controller code start. Bit 0 = thread 0 and so on
# if thread mask < 0 nothing is checked
# if thread mask = 0 and GalilCreateAxis appears > 0 then threads 0 to number of GalilCreateAxis is checked (good when using the generated code)
GalilStartController("$(PORT)", "", 1, 0)
# Example using homing routine template assembly
#GalilStartController("$(PORT)", "$(GALIL)/GalilSup/Db/galil_Default_Header.dmc;$(GALIL)/GalilSup/Db/galil_Home_RevLimit.dmc!$(GALIL)/GalilSup/Db/galil_Home_ForwLimit.dmc!$(GALIL)/GalilSup/Db/galil_Home_Home.dmc!$(GALIL)/GalilSup/Db/galil_Home_ForwLimit.dmc!$(GALIL)/GalilSup/Db/galil_Piezo_Home.dmc!$(GALIL)/GalilSup/Db/galil_Piezo_Home.dmc!$(GALIL)/GalilSup/Db/galil_Piezo_Home.dmc!$(GALIL)/GalilSup/Db/galil_Piezo_Home.dmc;$(GALIL)/GalilSup/Db/galil_Default_Footer.dmc",
0, 0, 3)
# GalilCreateProfile command parameters are:
# 1. char *portName Asyn port for controller
# 2. Int maxPoints in trajectory
# Create trajectory profiles
GalilCreateProfile("$(PORT)", 2000)
# DMC autosave restore configuration
# restore settings in pass 0 so encoder ratio is set correctly for position restore in device support init
set_pass0_restoreFile("GalilTest_$(PORT)Settings.sav")
# restore positions in pass 0 so motors don't move
set_pass0_restoreFile("GalilTest_$(PORT)Positions.sav")
# restore kinematic equation character arrays in pass 1
set_pass1_restoreFile("GalilTest_$(PORT)Kinematics.sav")
jonathanhai@FRIDAY:~/support/Galil/iocBoot/iocGalilTest$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether f8:75:a4:68:1e:41 brd ff:ff:ff:ff:ff:ff
inet 192.169.0.100/24 brd 192.169.0.255 scope global noprefixroute enp0s31f6
valid_lft forever preferred_lft forever
inet6 fe80::f23e:b6f2:d2ab:8cbd/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 98:af:65:56:f6:7b brd ff:ff:ff:ff:ff:ff
inet 172.17.175.144/21 brd 172.17.175.255 scope global dynamic noprefixroute wlp0s20f3
valid_lft 1714sec preferred_lft 1714sec
inet6 fe80::3806:962a:1376:2316/64 scope link noprefixroute
valid_lft forever preferred_lft forever
jonathanhai@FRIDAY:~/support/Galil/iocBoot/iocGalilTest$ sudo ip addr add 192.168.0.69/24 dev enp0s31f6
[sudo] password for jonathanhai:
jonathanhai@FRIDAY:~/support/Galil/iocBoot/iocGalilTest$ ip a | grep enp0s31f6 -A 3
2: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether f8:75:a4:68:1e:41 brd ff:ff:ff:ff:ff:ff
inet 192.169.0.100/24 brd 192.169.0.255 scope global noprefixroute enp0s31f6
valid_lft forever preferred_lft forever
inet 192.168.0.69/24 scope global enp0s31f6
valid_lft forever preferred_lft forever
inet6 fe80::f23e:b6f2:d2ab:8cbd/64 scope link noprefixroute
valid_lft forever preferred_lft forever
jonathanhai@FRIDAY:~/support/Galil/iocBoot/iocGalilTest$ sudo arp-scan --localnet | grep "00:50:4C"
jonathanhai@FRIDAY:~/support/Galil/iocBoot/iocGalilTest$ ping 192.168.0.195
PING 192.168.0.195 (192.168.0.195) 56(84) bytes of data.
64 bytes from 192.168.0.195: icmp_seq=1 ttl=64 time=0.700 ms
64 bytes from 192.168.0.195: icmp_seq=2 ttl=64 time=0.505 ms
64 bytes from 192.168.0.195: icmp_seq=3 ttl=64 time=0.527 ms
64 bytes from 192.168.0.195: icmp_seq=4 ttl=64 time=0.354 ms
--- 192.168.0.195 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3081ms
rtt min/avg/max/mdev = 0.354/0.521/0.700/0.122 ms
jonathanhai@FRIDAY:~/support/Galil/iocBoot/iocGalilTest$ telnet 192.168.0.99 23
jonathanhai@FRIDAY:~/support/Galil/iocBoot/iocGalilTest$ telnet 192.168.0.195 23Trying 192.168.0.195...
Connected to 192.168.0.195.
Escape character is '^]'.
[1]+ Stopped telnet 192.168.0.195 23
jonathanhai@FRIDAY:~/support/Galil/iocBoot/iocGalilTest$ ./st.cmd
#!../../bin/linux-x86_64/GalilTest
epicsEnvSet("IOC","iocGalilTest")
epicsEnvSet("TOP","/home/jonathanhai/support/Galil")
epicsEnvSet("EPICS_BASE","/home/jonathanhai/epics-base")
epicsEnvSet("SUPPORT","/home/jonathanhai/support")
epicsEnvSet("ASYN","/home/jonathanhai/support/asyn-R4-45")
epicsEnvSet("CALC","/home/jonathanhai/support/calc")
epicsEnvSet("MOTOR","/home/jonathanhai/support/motor")
epicsEnvSet("SSCAN","/home/jonathanhai/support/sscan")
epicsEnvSet("AUTOSAVE","/home/jonathanhai/support/autosave")
epicsEnvSet("BUSY","/home/jonathanhai/support/busy")
cd /home/jonathanhai/support/Galil
## Register all support components
dbLoadDatabase("dbd/GalilTest.dbd",0,0)
GalilTest_registerRecordDeviceDriver(pdbbase)
cd /home/jonathanhai/support/Galil/iocBoot/iocGalilTest
##################################################################################################
# IOC record prefix used for sscan/saveData databases and autosave setup
epicsEnvSet("IOCPREFIX", "DMC4183:")
# Configure an example DMC (digital motor controller)
# Configure an example DMC (digital motor controller)
##################################################################################################
# Configure these settings for site
## uncomment to see every command sent to galil
#epicsEnvSet("GALIL_DEBUG_FILE", "galil_debug.txt")
# Asyn port name (eg. DMC01, DMC02, RIO01)
epicsEnvSet("PORT", "DMC01")
# Controller address (IP address, serial port)
epicsEnvSet("ADDRESS", "192.168.0.195")
# Controller update period Unit = millisecond
epicsEnvSet("UPDPERIOD", "8")
##################################################################################################
# Derived configuration settings
# Record prefix derived from asyn port name
epicsEnvSet("P", "DMC01:")
##################################################################################################
#Load motor records for real and coordinate system (CS) motors
#Motor record version 6-9 and below
# dbLoadTemplate("$(TOP)/GalilTestApp/Db/$(PORT)_motors-v6-9down.substitutions", "P=$(P), PORT=$(PORT)")
#Motor record version 6-10 and up
dbLoadTemplate("/home/jonathanhai/support/Galil/GalilTestApp/Db/DMC01_motors-v6-10up.substitutions", "P=DMC01:, PORT=DMC01")
macLib: macro GALIL is undefined (expanding string $(GALIL)/GalilSup/Db/galil_motor-v6-10up.template)
filename="../dbStatic/dbLexRoutines.c" line number=277 dbRead opening file (null)
ERROR failed to load '$(GALIL)/GalilSup/Db/galil_motor-v6-10up.template'
dbLoadRecords("$(GALIL)/GalilSup/Db/galil_motor-v6-10up.template", P=DMC01:, PORT=DMC01,M="A",ADDR=0,EGU=mm,DESC="",VELO=20,VMAX=20,ACCL=1,BDST=0,BVEL=0,BACC=5,MRES=.0025,SREV=1000,ERES=0.001,PREC=5,DHLM=42273.3,DLLM=-42273.3,OFF=0,UEIP=0,RTRY=0,NTM="YES",PCOF=0,ICOF=0,DCOF=0)
Substitution file error: Error while reading included file
#Load DMC controller features (eg. Limit switch type, home switch type, output compare, message consoles)
dbLoadTemplate("/home/jonathanhai/support/Galil/GalilTestApp/Db/galil_dmc_ctrl.substitutions", "P=DMC01:, PORT=DMC01")
macLib: macro GALIL is undefined (expanding string $(GALIL)/GalilSup/Db/galil_dmc_ctrl.template)
filename="../dbStatic/dbLexRoutines.c" line number=277 dbRead opening file (null)
ERROR failed to load '$(GALIL)/GalilSup/Db/galil_dmc_ctrl.template'
dbLoadRecords("$(GALIL)/GalilSup/Db/galil_dmc_ctrl.template", P=DMC01:, PORT=DMC01,SCAN="Passive",DEFAULT_HOMETYPE=1,DEFAULT_LIMITTYPE=1,PREC=5)
Substitution file error: Error while reading included file
#Load extra features for real axis/motors (eg. Motor type, encoder type)
dbLoadTemplate("/home/jonathanhai/support/Galil/GalilTestApp/Db/DMC01_motor_extras.substitutions", "P=DMC01:, PORT=DMC01")
macLib: macro GALIL is undefined (expanding string $(GALIL)/GalilSup/Db/galil_motor_extras.template)
filename="../dbStatic/dbLexRoutines.c" line number=277 dbRead opening file (null)
ERROR failed to load '$(GALIL)/GalilSup/Db/galil_motor_extras.template'
dbLoadRecords("$(GALIL)/GalilSup/Db/galil_motor_extras.template", P=DMC01:, PORT=DMC01,M="A",ADDR=0,PREC=3,SCAN="Passive",MTRTYPE="3",MTRON="0",EGU="mm")
Substitution file error: Error while reading included file
#Load extra features for CS axis/motors (eg. Setpoint monitor)
dbLoadTemplate("/home/jonathanhai/support/Galil/GalilTestApp/Db/galil_csmotor_extras.substitutions", "P=DMC01:, PORT=DMC01")
macLib: macro GALIL is undefined (expanding string $(GALIL)/GalilSup/Db/galil_csmotor_extras.template)
filename="../dbStatic/dbLexRoutines.c" line number=277 dbRead opening file (null)
ERROR failed to load '$(GALIL)/GalilSup/Db/galil_csmotor_extras.template'
dbLoadRecords("$(GALIL)/GalilSup/Db/galil_csmotor_extras.template", P=DMC01:, PORT=DMC01,M="I",ADDR=8,PREC=3,SCAN="Passive",EGU="mm")
Substitution file error: Error while reading included file
#Load kinematics for CS axis/motors (eg. Forward and reverse kinematics, kinematic variables)
dbLoadTemplate("/home/jonathanhai/support/Galil/GalilTestApp/Db/galil_csmotor_kinematics.substitutions", "P=DMC01:, PORT=DMC01")
macLib: macro GALIL is undefined (expanding string $(GALIL)/GalilSup/Db/galil_forward_transform.template)
filename="../dbStatic/dbLexRoutines.c" line number=277 dbRead opening file (null)
ERROR failed to load '$(GALIL)/GalilSup/Db/galil_forward_transform.template'
dbLoadRecords("$(GALIL)/GalilSup/Db/galil_forward_transform.template", P=DMC01:, PORT=DMC01,M="I",ADDR="8")
Substitution file error: Error while reading included file
#Load coordinate system features (eg. Coordinate system S and T status, motor list, segments processed, moving status)
dbLoadTemplate("/home/jonathanhai/support/Galil/GalilTestApp/Db/galil_coordinate_systems.substitutions", "P=DMC01:, PORT=DMC01")
macLib: macro GALIL is undefined (expanding string $(GALIL)/GalilSup/Db/galil_coordinate_system.template)
filename="../dbStatic/dbLexRoutines.c" line number=277 dbRead opening file (null)
ERROR failed to load '$(GALIL)/GalilSup/Db/galil_coordinate_system.template'
dbLoadRecords("$(GALIL)/GalilSup/Db/galil_coordinate_system.template", P=DMC01:, PORT=DMC01,R="S",ADDR="0",SCAN=".1 second")
Substitution file error: Error while reading included file
#Load digital IO databases
dbLoadTemplate("/home/jonathanhai/support/Galil/GalilTestApp/Db/galil_dmc_digital_ports.substitutions", "P=DMC01:, PORT=DMC01")
macLib: macro GALIL is undefined (expanding string $(GALIL)/GalilSup/Db/galil_digital_in_bit.template)
filename="../dbStatic/dbLexRoutines.c" line number=277 dbRead opening file (null)
ERROR failed to load '$(GALIL)/GalilSup/Db/galil_digital_in_bit.template'
dbLoadRecords("$(GALIL)/GalilSup/Db/galil_digital_in_bit.template", P=DMC01:, PORT=DMC01,R=Galil0Bi0,BYTE=0,MASK=0x000001,ZNAM="Off",_ONAM_="On",ZSV="NO_ALARM",OSV="MAJOR")
Substitution file error: Error while reading included file
#Load analog IO databases
dbLoadTemplate("/home/jonathanhai/support/Galil/GalilTestApp/Db/galil_dmc_analog_ports.substitutions", "P=DMC01:, PORT=DMC01")
macLib: macro GALIL is undefined (expanding string $(GALIL)/GalilSup/Db/galil_analog_in.template)
filename="../dbStatic/dbLexRoutines.c" line number=277 dbRead opening file (null)
ERROR failed to load '$(GALIL)/GalilSup/Db/galil_analog_in.template'
dbLoadRecords("$(GALIL)/GalilSup/Db/galil_analog_in.template", P=DMC01:, PORT=DMC01,R="GalilAi0",ADDR="1",SCAN="I/O Intr",PREC="3")
Substitution file error: Error while reading included file
#Load user defined functions
dbLoadTemplate("/home/jonathanhai/support/Galil/GalilTestApp/Db/galil_userdef_records.substitutions", "P=DMC01:, PORT=DMC01")
macLib: macro GALIL is undefined (expanding string $(GALIL)/GalilSup/Db/galil_userdef_records.template)
filename="../dbStatic/dbLexRoutines.c" line number=277 dbRead opening file (null)
ERROR failed to load '$(GALIL)/GalilSup/Db/galil_userdef_records.template'
dbLoadRecords("$(GALIL)/GalilSup/Db/galil_userdef_records.template", P=DMC01:, PORT=DMC01,ADDR=0,EPICSNAME="BEGIN",GALILSTR="begin",DRVCMD="VAR",SCAN="I/O Intr",DRVL=0,DRVH=1,LOW=0,HIGH=1,LSV="MINOR",HSV="MINOR",ZNAM="Invalid",_ONAM_="Ok",ZSV="MAJOR",OSV="NO_ALARM",DEFAULT="10",EGU="",PINI="YES")
Substitution file error: Error while reading included file
#Load user defined array support
dbLoadTemplate("/home/jonathanhai/support/Galil/GalilTestApp/Db/galil_user_array.substitutions", "P=DMC01:, PORT=DMC01")
macLib: macro GALIL is undefined (expanding string $(GALIL)/GalilSup/Db/galil_user_array.template)
filename="../dbStatic/dbLexRoutines.c" line number=277 dbRead opening file (null)
ERROR failed to load '$(GALIL)/GalilSup/Db/galil_user_array.template'
dbLoadRecords("$(GALIL)/GalilSup/Db/galil_user_array.template", P=DMC01:, PORT=DMC01,ADDR="0",NELM=1000)
Substitution file error: Error while reading included file
dbLoadTemplate("/home/jonathanhai/support/Galil/GalilTestApp/Db/DMC01_profileMoveController.substitutions", "P=DMC01:, PORT=DMC01")
macLib: macro GALIL is undefined (expanding string $(GALIL)/GalilSup/Db/galil_profileMoveController.template)
filename="../dbStatic/dbLexRoutines.c" line number=277 dbRead opening file (null)
ERROR failed to load '$(GALIL)/GalilSup/Db/galil_profileMoveController.template'
dbLoadRecords("$(GALIL)/GalilSup/Db/galil_profileMoveController.template", P=DMC01:, PORT=DMC01,R=Prof1:,TIMEOUT=1)
Substitution file error: Error while reading included file
dbLoadTemplate("/home/jonathanhai/support/Galil/GalilTestApp/Db/DMC01_profileMoveAxis.substitutions", "P=DMC01:, PORT=DMC01")
macLib: macro GALIL is undefined (expanding string $(GALIL)/GalilSup/Db/galil_profileMoveAxis.template)
filename="../dbStatic/dbLexRoutines.c" line number=277 dbRead opening file (null)
ERROR failed to load '$(GALIL)/GalilSup/Db/galil_profileMoveAxis.template'
dbLoadRecords("$(GALIL)/GalilSup/Db/galil_profileMoveAxis.template", P=DMC01:, PORT=DMC01,R=Prof1:,M=1,ADDR=0,NREADBACK="1441",ZNAM="Relative",_ONAM_="Absolute",PREC=4,TIMEOUT=1)
Substitution file error: Error while reading included file
# GalilCreateController command parameters are:
# 1. Const char *portName - The name of the asyn port that will be created for this controller
# 2. Const char *address - The address of the controller
# 3. double updatePeriod - The time in ms between datarecords 2ms min, 200ms max. Async if controller + bus supports it, otherwise is polled/synchronous.
# - Recommend 50ms or less for ethernet
# - Specify negative updatePeriod < 0 to force synchronous tcp poll period. Otherwise will try async udp mode first
# Create a Galil controller
GalilCreateController("DMC01", "192.168.0.195", "8")
Connected to DMC4183 Rev 1.3i-SER at 192.168.0.195
# GalilCreateAxis command parameters are:
# 1. char *portName Asyn port for controller
# 3. char *Motor interlock digital port number 1 to 8 eg. "1,2,4". 1st 8 bits are supported
# 4. int Interlock switch type 0 active when opto active, all other values switch type active when opto inactive
# GalilCreateAxis("$(PORT)","A","",1)
# GalilCreateAxis("$(PORT)","B","",1)
# GalilCreateAxis("$(PORT)","C","",1)
# GalilCreateAxis("$(PORT)","D","",1)
# GalilCreateAxis("$(PORT)","E","",1)
# GalilCreateAxis("$(PORT)","F","",1)
GalilCreateAxis("DMC01","G","",1)
# GalilCreateAxis("$(PORT)","H","",1)
# GalilAddCode command parameters are:
# Add custom code to generated code
# 1. char *portName Asyn port for controller
# 2. int section = code section to add custom code into 0 = card code, 1 = thread code, 2 = limits code, 3 = digital code
# 3. char *code_file custom code file
# GalilAddCode("$(PORT)", 1, "customcode.dmc")
# GalilReplaceHomeCode command parameters are:
# Replace generated axis home code with custom code
# 1. char *portName Asyn port for controller
# 3. char *code_file custom code file
# GalilReplaceHomeCode("$(PORT)", "A", "homeA.dmc")
# GalilCreateCSAxes command parameters are:
# 1. char *portName Asyn port for controller
#Create all CS axes (ie. I-P axis)
GalilCreateCSAxes("DMC01")
# GalilStartController command parameters are:
# 1. char *portName Asyn port for controller
# 2. char *code file(s) to deliver to the controller we are starting. "" = use generated code (recommended)
# Specify a single file or to use templates use: headerfile;bodyfile1!bodyfile2!bodyfileN;footerfile
# 3. int Burn program to EEPROM conditions
# 0 = transfer code if differs from eeprom, dont burn code to eeprom, then finally execute code thread 0
# 1 = transfer code if differs from eeprom, burn code to eeprom, then finally execute code thread 0
# It is asssumed thread 0 starts all other required threads
# 4. int Thread mask. Check these threads are running after controller code start. Bit 0 = thread 0 and so on
# if thread mask < 0 nothing is checked
# if thread mask = 0 and GalilCreateAxis appears > 0 then threads 0 to number of GalilCreateAxis is checked (good when using the generated code)
GalilStartController("DMC01", "", 1, 0)
Code started successfully on model DMC4183 Rev 1.3i-SER, address 192.168.0.195
# Example using homing routine template assembly
#GalilStartController("$(PORT)", "$(GALIL)/GalilSup/Db/galil_Default_Header.dmc;$(GALIL)/GalilSup/Db/galil_Home_RevLimit.dmc!$(GALIL)/GalilSup/Db/galil_Home_ForwLimit.dmc!$(GALIL)/GalilSup/Db/galil_Home_Home.dmc!$(GALIL)/GalilSup/Db/galil_Home_ForwLimit.dmc!$(GALIL)/GalilSup/Db/galil_Piezo_Home.dmc!$(GALIL)/GalilSup/Db/galil_Piezo_Home.dmc!$(GALIL)/GalilSup/Db/galil_Piezo_Home.dmc!$(GALIL)/GalilSup/Db/galil_Piezo_Home.dmc;$(GALIL)/GalilSup/Db/galil_Default_Footer.dmc",
0, 0, 3)
# GalilCreateProfile command parameters are:
# 1. char *portName Asyn port for controller
# 2. Int maxPoints in trajectory
# Create trajectory profiles
GalilCreateProfile("DMC01", 2000)
# DMC autosave restore configuration
# restore settings in pass 0 so encoder ratio is set correctly for position restore in device support init
set_pass0_restoreFile("GalilTest_DMC01Settings.sav")
# restore positions in pass 0 so motors don't move
set_pass0_restoreFile("GalilTest_DMC01Positions.sav")
# restore kinematic equation character arrays in pass 1
set_pass1_restoreFile("GalilTest_DMC01Kinematics.sav")
# Configure an example RIO (Remote IO PLC controller)
epicsEnvSet("GALIL", "/home/jonathanhai/support/Galil")
##################################################################################################
### Scan-support software
# crate-resident scan. This executes 1D, 2D, 3D, and 4D scans, and caches
# 1D data, but it doesn't store anything to disk. (See 'saveData' below for that.)
dbLoadRecords("/home/jonathanhai/support/sscan/sscanApp/Db/standardScans.db","P=DMC4183:,MAXPTS1=8000,MAXPTS2=1000,MAXPTS3=10,MAXPTS4=10,MAXPTSH=8000")
dbLoadRecords("/home/jonathanhai/support/sscan/sscanApp/Db/saveData.db","P=DMC4183:")
##################################################################################################
####################################################
# status-PV prefix, so save_restore can find its status PV's.
save_restoreSet_status_prefix("DMC4183:")
# Ok to save/restore save sets with missing values (no CA connection to PV)?
save_restoreSet_IncompleteSetsOk(1)
# Save dated backup files?
save_restoreSet_DatedBackupFiles(1)
# Number of sequenced backup files to write
save_restoreSet_NumSeqFiles(1)
# Time interval between sequenced backups
save_restoreSet_SeqPeriodInSeconds(300)
# specify where save files should be
#set_savefile_path(${TOP}, "autosaveSaves")
set_savefile_path("/autosave", "")
# specify what save files should be restored. Note these files must be
# in the directory specified in set_savefile_path(), or, if that function
# has not been called, from the directory current when iocInit is invoked
# example: set_pass0_restoreFile("autosave_geiger.sav")
# specify directories in which to to search for included request files
# set_requestfile_path(${TOP}, "autosaveReqs")
set_requestfile_path("/home/jonathanhai/support/Galil/GalilSup/Db", "")
set_requestfile_path("/home/jonathanhai/support/motor/motorApp/Db", "")
set_requestfile_path("/home/jonathanhai/support/sscan/sscanApp/Db", "")
set_requestfile_path("/home/jonathanhai/support/Galil/iocBoot/iocGalilTest", "")
dbLoadRecords("/home/jonathanhai/support/autosave/asApp/Db/save_restoreStatus.db","P=DMC4183:")
save_restoreSet_CAReconnect(1)
## End of autosave set-up
####################################################
############################################################################
## Rev. 2025-03-10T16:19-0400
## Rev. Date build date/time:
############################################################################
1309 PVs had no saved value.
8 PVs had no saved value.
144 PVs had no saved value.
2025/03/13 14:31:09.339 DMC01:Prof1:TimeMode devAsynInt32::processCallbackOutput process write error
2025/03/13 14:31:09.339 DMC01:Prof1:MoveMode devAsynInt32::processCallbackOutput process write error
2025/03/13 14:31:09.339 DMC01:Prof1:M1UseAxis devAsynInt32::processCallbackOutput process write error
2025/03/13 14:31:09.339 DMC01:Prof1:M2UseAxis devAsynInt32::processCallbackOutput process write error
2025/03/13 14:31:09.339 DMC01:Prof1:M3UseAxis devAsynInt32::processCallbackOutput process write error
2025/03/13 14:31:09.339 DMC01:Prof1:M4UseAxis devAsynInt32::processCallbackOutput process write error
2025/03/13 14:31:09.339 DMC01:Prof1:M5UseAxis devAsynInt32::processCallbackOutput process write error
2025/03/13 14:31:09.339 DMC01:Prof1:M6UseAxis devAsynInt32::processCallbackOutput process write error
2025/03/13 14:31:09.339 DMC01:Prof1:M8UseAxis devAsynInt32::processCallbackOutput process write error
2025/03/13 14:31:09.339 DMC01:Prof1:NumAxes devAsynInt32::processCallbackOutput process write error
2025/03/13 14:31:09.339 DMC01:Prof1:NumPoints devAsynInt32::processCallbackOutput process write error
2025/03/13 14:31:09.339 DMC01:Prof1:NumPulses devAsynInt32::processCallbackOutput process write error
2025/03/13 14:31:09.339 DMC01:Prof1:StartPulses devAsynInt32::processCallbackOutput process write error
2025/03/13 14:31:09.339 DMC01:Prof1:EndPulses devAsynInt32::processCallbackOutput process write error
iocRun: All initialization complete
# Initialize saveData for step scans