Add some error handling

This commit is contained in:
Anders Sandstrom
2021-03-22 14:35:28 +01:00
parent 360bd8fe28
commit d82c81e4ac
7 changed files with 41 additions and 13 deletions

View File

@@ -0,0 +1,21 @@
record(ai,"$(P)CAN-Stat-ComErr"){
field(DESC, "Communication error")
field(PINI, "$(PINI=1)")
field(VAL, "0")
field(DTYP, "asynInt32")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))T_SMP_MS=$(T_SMP_MS=1000)/TYPE=asynInt32/plugin.can.com.error?")
field(SCAN, "I/O Intr")
}
record(bi,"$(P)CAN-Stat-Connected"){
field(DESC, "Connected")
field(PINI, "$(PINI=1)")
field(VAL, "0")
field(DTYP, "asynInt32")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))T_SMP_MS=$(T_SMP_MS=1000)/TYPE=asynInt32/plugin.can.com.connected?")
field(SCAN, "I/O Intr")
field(ZNAM, "Not connected")
field(ONAM, "Connected")
field(ZSV, "MAJOR")
field(OSV, "NO_ALARM")
}

View File

@@ -0,0 +1,8 @@
record(ai,"$(P)CAN${CH_ID}-${suffix=}"){
field(DESC, "SDO error code")
field(PINI, "$(PINI=1)")
field(VAL, "0")
field(DTYP, "asynInt32")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))T_SMP_MS=$(T_SMP_MS=1000)/TYPE=asynInt32/plugin.can.dev${DEV_ID}.pdo.${source=value}.error?")
field(SCAN, "I/O Intr")
}

View File

@@ -1,8 +0,0 @@
file "ecmcPluginSocketCAN_SDO_input.template"
{
pattern {CH_ID, DEV_ID, NELM, suffix, source, DTYP, FTVL }
{03, 3, 28, SDO01-Array, analogValues1, asynInt16ArrayIn, SHORT}
{03, 3, 28, SDO02-Array, analogValues2, asynInt16ArrayIn, SHORT}
{03, 3, 28, SDO03-Array, analogValues3, asynInt16ArrayIn, SHORT}
{03, 3, 28, SDO04-Array, analogValues4, asynInt16ArrayIn, SHORT}
}

View File

@@ -0,0 +1,8 @@
record(ai,"$(P)CAN${CH_ID}-${suffix=}"){
field(DESC, "SDO error code")
field(PINI, "$(PINI=1)")
field(VAL, "0")
field(DTYP, "asynInt32")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))T_SMP_MS=$(T_SMP_MS=1000)/TYPE=asynInt32/plugin.can.dev${DEV_ID}.sdo.${source=value}.error?")
field(SCAN, "I/O Intr")
}

View File

@@ -232,7 +232,7 @@ void ecmcCANOpenPDO::initAsyn() {
// Add resultdata "plugin.can.dev%d.error"
paramName = ECMC_PLUGIN_ASYN_PREFIX + std::string(".dev") +
to_string(nodeId_) + ".sdo" /*+ to_string(objIndex_)*/ + std::string(".error");
to_string(nodeId_) + ".pdo" + "." + std::string(name_) + std::string(".error");
errorParam_ = ecmcAsynPort->addNewAvailParam(
paramName.c_str(), // name

View File

@@ -251,7 +251,6 @@ void ecmcCANOpenSDO::execute() {
if(dbgMode_) {
printf("STATE = READ_REQ_TRANSFER %s\n",name_);
}
// IMPORTANT!! LOCKLOCK!!!! LOCK all slave trafic while 0x583 and 0x603 for any other trafic while processing
//initiate
recivedBytes_ = 0;
readStates_ = READ_WAIT_FOR_CONF;
@@ -287,7 +286,7 @@ void ecmcCANOpenSDO::newRxFrame(can_frame *frame) {
else { // Write
errorCode = writeDataStateMachine(frame);
}
if(errorCode && errorCode_ != errorCode) {
if(errorCode && (errorCode_ != errorCode)) {
errorCode_ = errorCode;
refreshNeeded_ = 1;
}
@@ -615,7 +614,7 @@ void ecmcCANOpenSDO::initAsyn() {
// Add resultdata "plugin.can.dev%d.error"
paramName = ECMC_PLUGIN_ASYN_PREFIX + std::string(".dev") +
to_string(nodeId_) + ".sdo" /*+ to_string(objIndex_)*/ + std::string(".error");
to_string(nodeId_) + ".sdo" + "." + std::string(name_) + std::string(".error");
errorParam_ = ecmcAsynPort->addNewAvailParam(
paramName.c_str(), // name

View File

@@ -445,7 +445,7 @@ void ecmcSocketCAN::initAsyn() {
ecmcAsynPort->callParamCallbacks(ECMC_ASYN_DEFAULT_LIST, ECMC_ASYN_DEFAULT_ADDR);
// Add resultdata "plugin.can.read.connected"
paramName = ECMC_PLUGIN_ASYN_PREFIX + std::string(".read.connected");
paramName = ECMC_PLUGIN_ASYN_PREFIX + std::string(".com.connected");
connectedParam_ = ecmcAsynPort->addNewAvailParam(
paramName.c_str(), // name