Add LSS, SYNC and heartbeat sample time for master
This commit is contained in:
@@ -22,6 +22,9 @@
|
||||
ecmcCANOpenMaster::ecmcCANOpenMaster(ecmcSocketCANWriteBuffer* writeBuffer,
|
||||
uint32_t nodeId,
|
||||
int exeSampleTimeMs,
|
||||
int lssSampleTimeMs,
|
||||
int syncSampleTimeMs,
|
||||
int heartSampleTimeMs,
|
||||
const char* name,
|
||||
int dbgMode):
|
||||
ecmcCANOpenDevice(writeBuffer,
|
||||
@@ -29,20 +32,23 @@ ecmcCANOpenMaster::ecmcCANOpenMaster(ecmcSocketCANWriteBuffer* writeBuffer,
|
||||
exeSampleTimeMs,
|
||||
name,
|
||||
dbgMode) {
|
||||
lssPdo_ = NULL;
|
||||
syncPdo_ = NULL;
|
||||
heartPdo_ = NULL;
|
||||
isMaster_ = true;
|
||||
lssPdo_ = NULL;
|
||||
syncPdo_ = NULL;
|
||||
heartPdo_ = NULL;
|
||||
isMaster_ = true;
|
||||
lssSampleTimeMs_ = lssSampleTimeMs;
|
||||
syncSampleTimeMs_ = syncSampleTimeMs;
|
||||
heartSampleTimeMs_ = heartSampleTimeMs;
|
||||
|
||||
int errorCode = 0;
|
||||
|
||||
// lssPdo_ = new ecmcCANOpenPDO( writeBuffer_, 0x7E5,DIR_WRITE,0,0,1000,exeSampleTimeMs_,"lss", cfgDbgMode_);
|
||||
errorCode = addPDO(0x7E5, // uint32_t cobId,
|
||||
DIR_WRITE, // ecmc_can_direction rw,
|
||||
0, // uint32_t ODSize,
|
||||
0, // int readTimeoutMs,
|
||||
1000, // int writeCycleMs, if < 0 then write on demand.
|
||||
"lss"); // const char* name);
|
||||
errorCode = addPDO(0x7E5, // uint32_t cobId,
|
||||
DIR_WRITE, // ecmc_can_direction rw,
|
||||
0, // uint32_t ODSize,
|
||||
0, // int readTimeoutMs,
|
||||
lssSampleTimeMs, // int writeCycleMs, if < 0 then write on demand.
|
||||
"lss"); // const char* name);
|
||||
if(errorCode) {
|
||||
throw std::runtime_error( "LSS PDO NULL.");
|
||||
}
|
||||
@@ -51,12 +57,12 @@ ecmcCANOpenMaster::ecmcCANOpenMaster(ecmcSocketCANWriteBuffer* writeBuffer,
|
||||
// Test sync signal
|
||||
// can0 0x80 [0]
|
||||
// syncPdo_ = new ecmcCANOpenPDO( writeBuffer_, 0x80,DIR_WRITE,0,0,1000,exeSampleTimeMs_,"sync", cfgDbgMode_);
|
||||
errorCode = addPDO(0x80, // uint32_t cobId,
|
||||
DIR_WRITE, // ecmc_can_direction rw,
|
||||
0, // uint32_t ODSize,
|
||||
0, // int readTimeoutMs,
|
||||
1000, // int writeCycleMs, if < 0 then write on demand.
|
||||
"sync"); // const char* name);
|
||||
errorCode = addPDO(0x80, // uint32_t cobId,
|
||||
DIR_WRITE, // ecmc_can_direction rw,
|
||||
0, // uint32_t ODSize,
|
||||
0, // int readTimeoutMs,
|
||||
syncSampleTimeMs, // int writeCycleMs, if < 0 then write on demand.
|
||||
"sync"); // const char* name);
|
||||
|
||||
if(errorCode) {
|
||||
throw std::runtime_error( "Sync PDO NULL.");
|
||||
@@ -68,12 +74,12 @@ ecmcCANOpenMaster::ecmcCANOpenMaster(ecmcSocketCANWriteBuffer* writeBuffer,
|
||||
//can_add_write(1793,1,5,0,0,0,0,0,0,0);
|
||||
//heartPdo_ = new ecmcCANOpenPDO( writeBuffer_, 0x701,DIR_WRITE,1,0,1000,exeSampleTimeMs_,"heartbeat",cfgDbgMode_);
|
||||
//heartPdo_->setValue(5);
|
||||
errorCode = addPDO(0x700+nodeId_, // uint32_t cobId,
|
||||
DIR_WRITE, // ecmc_can_direction rw,
|
||||
1, // uint32_t ODSize,
|
||||
0, // int readTimeoutMs,
|
||||
1000, // int writeCycleMs, if < 0 then write on demand.
|
||||
"heart"); // const char* name);
|
||||
errorCode = addPDO(0x700+nodeId_, // uint32_t cobId,
|
||||
DIR_WRITE, // ecmc_can_direction rw,
|
||||
1, // uint32_t ODSize,
|
||||
0, // int readTimeoutMs,
|
||||
heartSampleTimeMs, // int writeCycleMs, if < 0 then write on demand.
|
||||
"heart"); // const char* name);
|
||||
if(errorCode) {
|
||||
throw std::runtime_error( "Heart PDO NULL.");
|
||||
}
|
||||
|
||||
@@ -32,6 +32,9 @@ class ecmcCANOpenMaster : public ecmcCANOpenDevice {
|
||||
ecmcCANOpenMaster(ecmcSocketCANWriteBuffer* writeBuffer,
|
||||
uint32_t nodeId,
|
||||
int exeSampleTimeMs,
|
||||
int lssSampleTimeMs,
|
||||
int syncSampleTimeMs,
|
||||
int heartSampleTimeMs,
|
||||
const char* name,
|
||||
int dbgMode);
|
||||
~ecmcCANOpenMaster();
|
||||
@@ -39,7 +42,10 @@ class ecmcCANOpenMaster : public ecmcCANOpenDevice {
|
||||
private:
|
||||
ecmcCANOpenPDO *lssPdo_;
|
||||
ecmcCANOpenPDO *syncPdo_;
|
||||
ecmcCANOpenPDO *heartPdo_;
|
||||
ecmcCANOpenPDO *heartPdo_;
|
||||
int lssSampleTimeMs_;
|
||||
int syncSampleTimeMs_;
|
||||
int heartSampleTimeMs_;
|
||||
};
|
||||
|
||||
#endif /* ECMC_CANOPEN_MASTER_H_ */
|
||||
|
||||
@@ -128,7 +128,7 @@ ecmcSocketCAN::ecmcSocketCAN(char* configStr,
|
||||
|
||||
|
||||
|
||||
testMaster_= new ecmcCANOpenMaster(writeBuffer_,1,exeSampleTimeMs_,"linuxMaster",cfgDbgMode_);
|
||||
testMaster_= new ecmcCANOpenMaster(writeBuffer_,1,exeSampleTimeMs_,1000,1000,1000,"linuxMaster",cfgDbgMode_);
|
||||
|
||||
|
||||
// Test LSS heartbeat "master" signal. This makes the led on pmu905 to go to "Normal Communication"
|
||||
@@ -635,7 +635,11 @@ std::string ecmcSocketCAN::to_string(int value) {
|
||||
//
|
||||
|
||||
void ecmcSocketCAN::addMaster(uint32_t nodeId,
|
||||
const char* name) {
|
||||
const char* name,
|
||||
int lssSampleTimeMs,
|
||||
int syncSampleTimeMs,
|
||||
int heartSampleTimeMs) {
|
||||
|
||||
if(masterDev_) {
|
||||
throw std::runtime_error("Master already added.");
|
||||
}
|
||||
@@ -646,7 +650,26 @@ void ecmcSocketCAN::addMaster(uint32_t nodeId,
|
||||
throw std::out_of_range("Node id out of range.");
|
||||
}
|
||||
|
||||
masterDev_ = new ecmcCANOpenMaster(writeBuffer_,nodeId,exeSampleTimeMs_,name, cfgDbgMode_);
|
||||
if(lssSampleTimeMs <= 0) {
|
||||
throw std::out_of_range("LSS sample time ms out of range.");
|
||||
}
|
||||
|
||||
if(syncSampleTimeMs <= 0) {
|
||||
throw std::out_of_range("Sync sample time ms out of range.");
|
||||
}
|
||||
|
||||
if(heartSampleTimeMs <= 0) {
|
||||
throw std::out_of_range("Heart sample time ms out of range.");
|
||||
}
|
||||
|
||||
masterDev_ = new ecmcCANOpenMaster(writeBuffer_,
|
||||
nodeId,
|
||||
exeSampleTimeMs_,
|
||||
lssSampleTimeMs,
|
||||
syncSampleTimeMs,
|
||||
heartSampleTimeMs,
|
||||
name,
|
||||
cfgDbgMode_);
|
||||
// add as a normal device also for execute and rxframe
|
||||
devices_[deviceCounter_] = masterDev_;
|
||||
deviceCounter_++;
|
||||
|
||||
@@ -83,7 +83,10 @@ class ecmcSocketCAN {
|
||||
void execute(); // ecmc rt loop
|
||||
|
||||
void addMaster(uint32_t nodeId,
|
||||
const char* name);
|
||||
const char* name,
|
||||
int lssSampleTimeMs,
|
||||
int syncSampleTimeMs,
|
||||
int heartSampleTimeMs);
|
||||
|
||||
void addDevice(uint32_t nodeId,
|
||||
const char* name);
|
||||
|
||||
@@ -152,13 +152,21 @@ void deleteSocketCAN() {
|
||||
|
||||
void ecmcCANOpenAddMasterPrintHelp() {
|
||||
printf("\n");
|
||||
printf(" Use ecmcCANOpenAddMaster(<name>, <node id>)\n");
|
||||
printf(" <name> : Name of master device.\n");
|
||||
printf(" <node id> : CANOpen node id of master.\n");
|
||||
printf(" Use ecmcCANOpenAddMaster(<name>, <node id>,....)\n");
|
||||
printf(" <name> : Name of master device.\n");
|
||||
printf(" <node id> : CANOpen node id of master.\n");
|
||||
printf(" <LSS sample time ms> : Sample time for LSS.\n");
|
||||
printf(" <Sync sample time ms> : Sample time for SYNC.\n");
|
||||
printf(" <Heartbeat sample time ms> : Sample time for Heartbeat.\n");
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
int ecmcCANOpenAddMaster(const char* name, int nodeId) {
|
||||
int ecmcCANOpenAddMaster(const char* name,
|
||||
int nodeId,
|
||||
int lssSampleTimeMs,
|
||||
int syncSampleTimeMs,
|
||||
int heartSampleTimeMs) {
|
||||
|
||||
if(!name) {
|
||||
printf("Error: name.\n");
|
||||
ecmcCANOpenAddMasterPrintHelp();
|
||||
@@ -176,7 +184,11 @@ int ecmcCANOpenAddMaster(const char* name, int nodeId) {
|
||||
}
|
||||
|
||||
try {
|
||||
can->addMaster((uint32_t)nodeId,name);
|
||||
can->addMaster((uint32_t)nodeId,
|
||||
name,
|
||||
lssSampleTimeMs,
|
||||
syncSampleTimeMs,
|
||||
heartSampleTimeMs);
|
||||
}
|
||||
catch(std::exception& e) {
|
||||
printf("Exception: %s. Add master failed.\n",e.what());
|
||||
@@ -190,13 +202,26 @@ static const iocshArg initArg0_0 =
|
||||
{ "Name", iocshArgString };
|
||||
static const iocshArg initArg1_0 =
|
||||
{ "Node Id", iocshArgInt };
|
||||
static const iocshArg initArg2_0 =
|
||||
{ "LSS sample time ms", iocshArgInt };
|
||||
static const iocshArg initArg3_0 =
|
||||
{ "Sync sample time ms", iocshArgInt };
|
||||
static const iocshArg initArg4_0 =
|
||||
{ "Heart sample time ms", iocshArgInt };
|
||||
|
||||
static const iocshArg *const initArgs_0[] = { &initArg0_0,
|
||||
&initArg1_0};
|
||||
&initArg1_0,
|
||||
&initArg2_0,
|
||||
&initArg3_0,
|
||||
&initArg4_0};
|
||||
|
||||
static const iocshFuncDef initFuncDef_0 = { "ecmcCANOpenAddMaster", 2, initArgs_0 };
|
||||
static const iocshFuncDef initFuncDef_0 = { "ecmcCANOpenAddMaster", 5, initArgs_0 };
|
||||
static void initCallFunc_0(const iocshArgBuf *args) {
|
||||
ecmcCANOpenAddMaster(args[0].sval, args[1].ival);
|
||||
ecmcCANOpenAddMaster(args[0].sval,
|
||||
args[1].ival,
|
||||
args[2].ival,
|
||||
args[3].ival,
|
||||
args[4].ival);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -406,7 +431,7 @@ static void initCallFunc_2(const iocshArgBuf *args) {
|
||||
*/
|
||||
void ecmcCANOpenAddPDOPrintHelp() {
|
||||
printf("\n");
|
||||
printf(" Use \"ecmcCANOpenAddSDO(<name>, <node id>\n");
|
||||
printf(" Use \"ecmcCANOpenAddPDO(<name>, <node id>\n");
|
||||
printf(" <name> : Name of master device.\n");
|
||||
printf(" <node id> : CANOpen node id of device/master.\n");
|
||||
printf(" <cob id> : CANOpen cob id of PDO.\n");
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
IOC_TEST:PLC-0-enable
|
||||
REQMOD:mcag-trgt-muts--29223:MODULES
|
||||
REQMOD:mcag-trgt-muts--29223:VERSIONS
|
||||
REQMOD:mcag-trgt-muts--29223:MOD_VER
|
||||
REQMOD:mcag-trgt-muts--29223:exit
|
||||
REQMOD:mcag-trgt-muts--29223:BaseVersion
|
||||
REQMOD:mcag-trgt-muts--29223:require_VER
|
||||
REQMOD:mcag-trgt-muts--29223:ecmccfg_VER
|
||||
REQMOD:mcag-trgt-muts--29223:asyn_VER
|
||||
REQMOD:mcag-trgt-muts--29223:exprtk_VER
|
||||
REQMOD:mcag-trgt-muts--29223:motor_VER
|
||||
REQMOD:mcag-trgt-muts--29223:ecmc_VER
|
||||
REQMOD:mcag-trgt-muts--29223:ecmc_plugin_socketcan_VER
|
||||
REQMOD:mcag-trgt-muts--914:MODULES
|
||||
REQMOD:mcag-trgt-muts--914:VERSIONS
|
||||
REQMOD:mcag-trgt-muts--914:MOD_VER
|
||||
REQMOD:mcag-trgt-muts--914:exit
|
||||
REQMOD:mcag-trgt-muts--914:BaseVersion
|
||||
REQMOD:mcag-trgt-muts--914:require_VER
|
||||
REQMOD:mcag-trgt-muts--914:ecmccfg_VER
|
||||
REQMOD:mcag-trgt-muts--914:asyn_VER
|
||||
REQMOD:mcag-trgt-muts--914:exprtk_VER
|
||||
REQMOD:mcag-trgt-muts--914:motor_VER
|
||||
REQMOD:mcag-trgt-muts--914:ecmc_VER
|
||||
REQMOD:mcag-trgt-muts--914:ecmc_plugin_socketcan_VER
|
||||
IOC_TEST:PLC-0-scantime
|
||||
IOC_TEST:PLC-0-error
|
||||
|
||||
Reference in New Issue
Block a user