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  <20252026  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  <20252026 
<== Date ==> <== Thread ==>

Subject: Micronix MMC100 issues
From: Jeffrey Gamsby via Tech-talk <[email protected]>
To: [email protected]
Date: Thu, 24 Jul 2025 11:25:32 -0700
Hi All,

 I am trying to get a Micronix MMC-100 IOC running and while I can connect to it and move the axes, the position is not right and I think it may be due to the controller not being set to a MMC-100. I am not sure though.


When I start the IOC I see this message:
2025/07/24 18:17:42.839 MMC200Axis::MMC200Axis: version string is invalid.

This is my st.cmd

#!/opt/epics/synApps_6.1/support/motor-R7-2-2/modules/motorMicronix/iocs/micronixIOC/bin/linux-x86_64/micronix
cd /opt/iocs/micronix/iocBoot
< envPaths
## Register all support components
dbLoadDatabase "/opt/epics/synApps_6_1/support/motor-R7-2-2/modules/motorMicronix/iocs/micronixIOC/dbd/micronix.dbd"
micronix_registerRecordDeviceDriver pdbbase
## motorUtil (allstop & alldone)
dbLoadRecords("$(MOTOR)/db/motorUtil.db", "P=micronix:")
##
< motor.cmd.mmc200
#log debug output to file
streamSetLogfile StreamDebug.log
iocInit
## motorUtil (allstop & alldone)
motorUtilInit("micronix:")
var streamDebug 1
# Boot complete


This is my substitutions file:

file "$(MOTOR)/motorApp/Db/asyn_motor.db"
{
  pattern
  {P,             M,  DTYP,        PORT,     ADDR,  DESC,    EGU,      DIR,  VMAX,  VELO,  VBAS,  ACCL,  BDST,     BVEL,  BACC,     MRES,      PREC,  DHLM,       DLLM,   INIT}
  {end1:,     x, "asynMotor", mmc200_1,  0,    "m1x",    mm,       Pos,  3.,   1.,    .05,    .5,    0,       1.0,    2,        1e-6,    5,   0,       0,  ""}
  {end1:,     y, "asynMotor", mmc200_1,  1,    "m1y",    mm,       Pos,  3.,   1.,    .05,    .5,    0,       1.0,    2,        1e-6,    5,   0,       0,  ""}
  {end2:,     x, "asynMotor", mmc200_1,  2,    "m2x",    mm,       Pos,  3.,   1.,    .05,    .5,    0,       1.0,    2,  1e-6,    5,   0,       0,  ""}
  {end2:,     y, "asynMotor", mmc200_1,  3,    "m2y",    mm,       Pos,  3.,   1.,    .05,    .5,    0,       1.0,    2,  1e-6,    5,   0,       0,  ""}
  {end3:,     x, "asynMotor", mmc200_1,  4,    "m3x",    mm,       Pos,  3.,   1.,    .05,    .5,    0,       1.0,    2,  1e-6,    5,   0,       0,  ""}
  {end3:,     y, "asynMotor", mmc200_1,  5,    "m3y",    mm,       Pos,  3.,   1.,    .05,    .5,    0,       1.0,    2,  1e-6,    5,   0,       0,  ""}
}


and this is my motor.cmd.mmc200

dbLoadTemplate("motor.substitutions.mmc200")
### RS-232 with RS-485 adpater (serial1)
drvAsynSerialPortConfigure("serial1", "/dev/ttyUSB0", 0, 0, 0)
asynSetOption ("serial1", 0, "baud", "38400")
#asynSetOption ("serial1", 0, "baud", "115200")
asynSetOption ("serial1", 0, "bits", "8")
asynSetOption ("serial1", 0, "parity", "none")
asynSetOption ("serial1", 0, "stop", "1")
asynSetOption ("serial1", 0, "clocal", "Y")
#asynSetOption ("serial1", 0, "crtscts", "N")
asynOctetSetInputEos("serial1",0,"\r")
asynOctetSetOutputEos("serial1",0,"\r")
MMC200CreateController("mmc200_1", "serial1", 6, 500, 2000, 1)
# Turn off asyn traces
#!asynSetTraceIOMask("serial1",0,0x0)
#!asynSetTraceMask("serial1",0,0x1)

output from ./st.cmd

#!/opt/epics/synApps_6.1/support/motor-R7-2-2/modules/motorMicronix/iocs/micronixIOC/bin/linux-x86_64/micronix
cd /opt/iocs/micronix/iocBoot
< envPaths
epicsEnvSet("IOC","iocMicronix")
epicsEnvSet("TOP","/opt/epics/synApps/support/motor-R7-2-2/modules/motorMicronix/iocs/micronixIOC")
epicsEnvSet("MOTOR","/opt/epics/synApps/support/motor-R7-2-2")
epicsEnvSet("ASYN","/opt/epics/synApps/support/asyn-R4-36")
epicsEnvSet("SNCSEQ","/opt/epics/synApps/support/seq-2-2-6")
epicsEnvSet("BUSY","/opt/epics/synApps/support/busy-R1-7-2")
epicsEnvSet("IPAC","/opt/epics/synApps/support/ipac-2-15")
epicsEnvSet("EPICS_BASE","/opt/epics/base")
## Register all support components
dbLoadDatabase "/opt/epics/synApps_6_1/support/motor-R7-2-2/modules/motorMicronix/iocs/micronixIOC/dbd/micronix.dbd"
micronix_registerRecordDeviceDriver pdbbase
Warning: IOC is booting with TOP = "/opt/epics/synApps/support/motor-R7-2-2/modules/motorMicronix/iocs/micronixIOC"
          but was built with TOP = "/opt/epics/synApps_6.1/support/motor-R7-2-2/modules/motorMicronix/iocs/micronixIOC"
## motorUtil (allstop & alldone)
dbLoadRecords("/opt/epics/synApps/support/motor-R7-2-2/db/motorUtil.db", "P=micronix:")
##
< motor.cmd.mmc200
dbLoadTemplate("motor.substitutions.mmc200")
### RS-232 with RS-485 adpater (serial1)
drvAsynSerialPortConfigure("serial1", "/dev/ttyUSB0", 0, 0, 0)
#drvAsynSerialPortConfigure("serial1", "/dev/ttymmc1", 0, 0, 0)
#drvAsynSerialPortConfigure("serial1", "/dev/ttyUSB2", 0, 0, 0)
#drvAsynSerialPortConfigure("serial1", "/dev/ttyUSB1", 0, 0, 0)
asynSetOption ("serial1", 0, "baud", "38400")
#asynSetOption ("serial1", 0, "baud", "115200")
asynSetOption ("serial1", 0, "bits", "8")
asynSetOption ("serial1", 0, "parity", "none")
asynSetOption ("serial1", 0, "stop", "1")
asynSetOption ("serial1", 0, "clocal", "Y")
#asynSetOption ("serial1", 0, "crtscts", "N")
asynOctetSetInputEos("serial1",0,"\r")
asynOctetSetOutputEos("serial1",0,"\r")
MMC200CreateController("mmc200_1", "serial1", 6, 500, 2000, 1)
2025/07/24 18:22:27.003 MMC200Axis::MMC200Axis: version string is invalid.
2025/07/24 18:22:27.067 MMC200Axis::MMC200Axis: version string is invalid.
2025/07/24 18:22:27.131 MMC200Axis::MMC200Axis: version string is invalid.
2025/07/24 18:22:27.195 MMC200Axis::MMC200Axis: version string is invalid.
2025/07/24 18:22:27.259 MMC200Axis::MMC200Axis: version string is invalid.
2025/07/24 18:22:27.323 MMC200Axis::MMC200Axis: version string is invalid.
# Turn off asyn traces
#!asynSetTraceIOMask("serial1",0,0x0)
#!asynSetTraceMask("serial1",0,0x1)
#log debug output to file
streamSetLogfile StreamDebug.log
st.cmd line 20: Command streamSetLogfile not found.
iocInit
Starting iocInit
############################################################################
## EPICS R7.0.5
## Rev. 2024-10-30T19:45+0000
############################################################################
cas warning: Configured TCP port was unavailable.
cas warning: Using dynamically assigned TCP port 35877,
cas warning: but now two or more servers share the same UDP port.
cas warning: Depending on your IP kernel this server may not be
cas warning: reachable with UDP unicast (a host's IP in EPICS_CA_ADDR_LIST)
iocRun: All initialization complete
## motorUtil (allstop & alldone)
motorUtilInit("micronix:")
var streamDebug 1
Var streamDebug not found.
# Boot complete


Could it just be my MRES value? Or is the MMC100 not being identified correctly? Or something else?

Thanks,
Jeff

Navigate by Date:
Prev: Thanks for all the fish John Dobbins via Tech-talk
Next: Re: Thanks for all the fish Han Lee 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  <20252026 
Navigate by Thread:
Prev: Re: Thanks for all the fish Han Lee via Tech-talk
Next: Solid State Cooling chiller support? Jesse Hopkins 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  <20252026 
ANJ, 19 Mar 2026 · Home · News · About · Talk · Base · Modules · Extensions ·
· Distributions · Download · Documents · Links · Licensing ·