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  2016  2017  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  2016  2017  2018  2019  2020  2021  2022  2023  <2024
<== Date ==> <== Thread ==>

Subject: automatically start the IOC via procServ
From: 周逸媚 via Tech-talk <tech-talk at aps.anl.gov>
To: tech-talk at aps.anl.gov
Date: Tue, 11 Jun 2024 15:19:15 +0800 (GMT+08:00)

Dear, sir

I have a question about procServ starting an IOC.

When I run the IOC through ../../bin/linux-arm/SHINE st.cmd

all pvs run normally and output the correct results.


Then, I automatically start the IOC via procServ.

Each time the processor is turned on, the PVs is 0 for all outputs.

These pv variables are in ai or longin form and are output via setDoubleParam or setIntegerParam.

in SHINE.db:

record(ai, "$(P)$(R)BPM_X")                        
{                                                           
   field(DTYP, "asynFloat64")
   field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))BPM_X")
   field(SCAN, "I/O Intr")                        
}

in SHINE.cpp

setDoubleParam(P_BPM_X,        (signed)bpm_x/1000.00);

callParamCallbacks();


or waveforms

record(waveform, "$(P)$(R)CH1_RAW_WAVEFORM")
{
    field(DTYP, "asynFloat64ArrayIn")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))CH1_RAW_WAVEFORM")
    field(FTVL, "DOUBLE")
    field(NELM, "2048")
    field(SCAN, "I/O Intr")
}

doCallbacksFloat64Array(pData_CH1_waveform, imglen, P_CH1_Waveform, 0);



-----------------------------------------------------------------------

When I check the PVs,they show <undefined> 0 UDF INVALID


root@snk2-debian-project:~# telnet localhost 20001
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
@@@ Welcome to procServ (procServ Process Server 2.7.0)
@@@ Use ^X to kill the child, auto restart is ON, use ^T to toggle auto restart
@@@ procServ server PID: 356
@@@ Server startup directory: /home/EPICS/SHINE-IOC/iocBoot/iocSHINE
@@@ Child startup directory: /home/EPICS/SHINE-IOC/iocBoot/iocSHINE
@@@ Child "SHINE-IOC" started as: ./st.cmd
@@@ Child "SHINE-IOC" PID: 363
@@@ procServ server started at: Wed Jun  5 13:13:59 2024
@@@ Child "SHINE-IOC" started at: Wed Jun  5 13:13:59 2024
@@@ 0 user(s) and 0 logger(s) connected (plus you)
dbpr SHINE-BI:BPM_X
AMSG:               ASG :               DESC:               DISA: 0             
DISV: 1             NAME: SHINE-BI:BPM_X                    NAMSG:              
RVAL: 0             SEVR: INVALID       STAT: UDF           SVAL: 0             
TPRO: 0             VAL : 0


However,if I restart the IOC, they show up fine.


epics> ^C@@@ Current time: Wed Jun  5 13:18:57 2024
@@@ Child process is shutting down, a new one will be restarted shortly
@@@ ^R or ^X restarts the child, ^Q quits the server
@@@ @@@ @@@ @@@ @@@
@@@ Received a sigChild for process 363. The process was killed by signal 2
@@@ Restarting child "SHINE-IOC"
@@@    (as ./st.cmd)
@@@ The PID of new child "SHINE-IOC" is: 443
@@@ @@@ @@@ @@@ @@@
#!../../bin/linux-arm/SHINE
< envPaths
epicsEnvSet("IOC","iocSHINE")
epicsEnvSet("TOP","/home/EPICS/SHINE-IOC")
epicsEnvSet("EPICS_BASE","/home/EPICS/base-7.0.7")
epicsEnvSet("SUPPORT","/home/EPICS/support")
epicsEnvSet("ASYN","/home/EPICS/support/asyn4-38")
epicsEnvSet("AUTOSAVE","/home/EPICS/support/autosave-R5-10-2")
cd "/home/EPICS/SHINE-IOC"
## Register all support components
dbLoadDatabase "dbd/SHINE.dbd"
SHINE_registerRecordDeviceDriver pdbbase
## Load record instances
#dbLoadTemplate "db/user.substitutions"
#dbLoadRecords "db/SHINEVersion.db", "user=root"
#dbLoadRecords "db/dbSubExample.db", "user=root"
##### ZYM ###########
SHINEConfigure("testAPD", 1000)
#############mode_type = 2
################# mmap finished ##################
------------pre_value_ddr=30100000
################# value setting finished ##################
dbLoadRecords("db/SHINE.db","P=SHINE-BI:,R=,PORT=testAPD,ADDR=0,TIMEOUT=10000")
#dbLoadRecords("db/asynRecord.db","P=SHINE-BI:,R=,PORT=testAPD,ADDR=0,OMAX=,IMAX=")
######################
########## AUTOSAVE ##########
set_requestfile_path(".")
set_savefile_path("/home/EPICS/","autosave")
save_restoreSet_IncompleteSetsOk(1)
save_restoreSet_DatedBackupFiles(0)
set_pass0_restoreFile("shineioc.sav")
############################
cd "/home/EPICS/SHINE-IOC/iocBoot/iocSHINE"
iocInit
Starting iocInit
############################################################################
## EPICS R7.0.7
## Rev. 2023-04-11T16:40+0800
## Rev. Date build date/time:
############################################################################
reboot_restore: entry for file 'shineioc.sav'
reboot_restore: Found filename 'shineioc.sav' in restoreFileList.
*** restoring from '/home/EPICS/autosave/shineioc.sav' at initHookState 6 (before record/device init) ***
reboot_restore: done with file 'shineioc.sav'
iocRun: All initialization complete
create_monitor_set("shineioc.req",10,"P=SHINE-BI:")
------------value_ddr=7010000a
## Start any sequence programs
#seq sncExample, "user=root"
epics> shineioc.sav: 38 of 38 PV's connected
dbpr SHINE-BI:BPM_X
AMSG:               ASG :               DESC:               DISA: 0             
DISV: 1             NAME: SHINE-BI:BPM_X                    NAMSG:              
RVAL: 0             SEVR: NO_ALARM      STAT: NO_ALARM      SVAL: 0             
TPRO: 0             VAL : -3739.613



########################################

The autostart service is

----------------------------------------

[Unit]
Description=Start EPICS IOC for asyn port driver
After=network.target
[Service]
Type=forking
Restart=on-failure
RestartSec=5
ExecStart=/home/EPICS/runioc.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
ExecStopPost=/usr/bin/sleep 5
TimeoutStopSec=5
User=root
[Install]
WantedBy=multi-user.target

-----------------------------------------

The runioc.sh is:

#!/bin/bash
export EPICS_CA_MAX_ARRAY_BYTES=50000000
cd /home/EPICS/SHINE-IOC/iocBoot/iocSHINE
procServ -n "SHINE-IOC" -I ^D^C 20001 ./st.cmd


------------------------------------------

Best regards,

Yimei Zhou



Replies:
RE: automatically start the IOC via procServ Mark Rivers via Tech-talk

Navigate by Date:
Prev: Re: epics build system question again - build order William Kirstaedter via Tech-talk
Next: RE: epics build system question again - build order Freddie Akeroyd - STFC UKRI via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  <2024
Navigate by Thread:
Prev: RE: epics build system question again - build order Freddie Akeroyd - STFC UKRI via Tech-talk
Next: RE: automatically start the IOC via procServ Mark Rivers via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  <2024
ANJ, 11 Jun 2024 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·