diff --git a/iocsh/plc/can.plc b/iocsh/plc/can.plc new file mode 100644 index 0000000..1b1c678 --- /dev/null +++ b/iocsh/plc/can.plc @@ -0,0 +1,92 @@ +############################################################################################### +# For help on syntax, variables and functions, please read the file: "plcSyntaxHelp.plc" +# +# + +static.time:=ec_get_time(); + +# Test heartbeat signal +# can0 0x701 [1] 05 +#can_add_write(1793,1,5,0,0,0,0,0,0,0); + +# Test sync signal +# can0 0x80 [0] + +#can_add_write(128,0,0,0,0,0,0,0,0,0); + +# Test LSS heartbeat "master" signal. This makes the led on pmu905 to go to "Normal Communication" +# can0 0x7E5 [0] +# can_add_write(2021,0,0,0,0,0,0,0,0,0); + +#can_trigg_writes(); +if(can_last_writes_error()) { + println('Error during writes : ', can_last_writes_error()); +}; +#println('Total time for one plcscan [ms]: ', (ec_get_time()-static.time)/1E6); + + +return []; + +var byte0:=0; +## WRONG BIT ORDER OTHER WAY AROUND! +## bit 0..2: ccs 1 for +# +#byte0:= ec_wrt_bits(byte0,1,0,2); +## bit 3: reserved = 0 +#byte0:= ec_clr_bit(byte0,3); +## bit 4..5: n = 0 +#byte0:= ec_wrt_bits(byte0,0,4,5); +## bit 6: e = 0 +#byte0:= ec_clr_bit(byte0,6); +## bit 7: e = 0 +#byte0:= ec_clr_bit(byte0,7); + +# Read dictionary command 0x40 = 64 +byte0 := 65 + +# byte 1..2: SDO id: 0x2690 = 9792 dec +var byte1:= ec_chk_bits(9792,0,7); +var byte2:= ec_chk_bits(9792,8,15); + +# byte 3: SDO subindex = 0x0 +var byte3:=0; + +# byte 4:7: data length = 56 bytes +#var dataLen:=56; +#var byte4:= ec_chk_bits(dataLen,0,7); +#var byte5:= ec_chk_bits(dataLen,8,15); +#var byte6:= ec_chk_bits(dataLen,16,23); +#var byte7:= ec_chk_bits(dataLen,24,31); +#can_add_write(1539,8,byte0,byte1,byte2,byte3,byte4,byte5,byte6,byte7); + +#can_add_write(1539,8,byte0,byte1,byte2,byte3,0,0,0,0); +can_add_write(1539,8,64,byte1,byte2,byte3,0,0,0,0); + +# Acknowledge 1 toggle 0 +can_add_write(1539,8,97,byte1,byte2,byte3,0,0,0,0); + +# Acknowledge 2 toggle 1 +can_add_write(1539,8,113,byte1,byte2,byte3,0,0,0,0); + +# Acknowledge 3 toggle 0 +can_add_write(1539,8,97,byte1,byte2,byte3,0,0,0,0); + +# Acknowledge 4 toggle 1 +can_add_write(1539,8,113,byte1,byte2,byte3,0,0,0,0); + +# Acknowledge 5 toggle 0 +can_add_write(1539,8,97,byte1,byte2,byte3,0,0,0,0); + +# Acknowledge 6 toggle 1 +can_add_write(1539,8,113,byte1,byte2,byte3,0,0,0,0); + +# Acknowledge 7 toggle 0 LAST +can_add_write(1539,8,97,byte1,byte2,byte3,0,0,0,0); + +# Acknowledge 6 toggle 1 Test one to much.. just resulted in one more row of unique data?! +# can_add_write(1539,8,113,byte1,byte2,byte3,0,0,0,0); + +println('Total time for one plcscan [ms]: ', (ec_get_time()-static.time)/1E6); +return []; + +println('NEVER HERE'); diff --git a/iocsh/pvs.log b/iocsh/pvs.log new file mode 100644 index 0000000..f9871f4 --- /dev/null +++ b/iocsh/pvs.log @@ -0,0 +1,14 @@ +IOC_TEST:PLC-0-enable +REQMOD:mcag-trgt-muts--15408:MODULES +REQMOD:mcag-trgt-muts--15408:VERSIONS +REQMOD:mcag-trgt-muts--15408:MOD_VER +REQMOD:mcag-trgt-muts--15408:exit +REQMOD:mcag-trgt-muts--15408:BaseVersion +REQMOD:mcag-trgt-muts--15408:require_VER +REQMOD:mcag-trgt-muts--15408:ecmccfg_VER +REQMOD:mcag-trgt-muts--15408:asyn_VER +REQMOD:mcag-trgt-muts--15408:exprtk_VER +REQMOD:mcag-trgt-muts--15408:motor_VER +REQMOD:mcag-trgt-muts--15408:ecmc_VER +IOC_TEST:PLC-0-scantime +IOC_TEST:PLC-0-error diff --git a/iocsh/test.script b/iocsh/test.script new file mode 100644 index 0000000..8bbe94d --- /dev/null +++ b/iocsh/test.script @@ -0,0 +1,41 @@ +############################################################################## +## Example: Demo of ecmc SocketCAN plugin +## https://github.com/anderssandstrom/e3-ecmc_plugin_socketcan +## +## The plugin exposes: +## + +## Initiation: +epicsEnvSet("IOC" ,"$(IOC="IOC_TEST")") +epicsEnvSet("ECMCCFG_INIT" ,"") #Only run startup once (auto at PSI, need call at ESS), variable set to "#" in startup.cmd +epicsEnvSet("SCRIPTEXEC" ,"$(SCRIPTEXEC="iocshLoad")") + +require ecmccfg 6.3.2 + +# run module startup.cmd (only needed at ESS PSI auto call at require) +$(ECMCCFG_INIT)$(SCRIPTEXEC) ${ecmccfg_DIR}startup.cmd, "IOC=$(IOC),ECMC_VER=6.3.2,MASTER_ID=-1" + +############################################################################## +## Configure hardware: +# No EtherCAT hardware (in this example).. + +############################################################################## +## Load plugin: +#require ecmc_plugin_advanced master # do not require then loaded twice.. + +epicsEnvSet(ECMC_PLUGIN_FILNAME,"/home/dev/epics/base-7.0.4/require/${E3_REQUIRE_VERSION}/siteMods/ecmc_plugin_socketcan/master/lib/${EPICS_HOST_ARCH=linux-x86_64}/libecmc_plugin_socketcan.so") +epicsEnvSet(ECMC_PLUGIN_CONFIG,"IF=can0;DBG_PRINT=1;") # Only one option implemented in this plugin +${SCRIPTEXEC} ${ecmccfg_DIR}loadPlugin.cmd, "PLUGIN_ID=0,FILE=${ECMC_PLUGIN_FILNAME},CONFIG='${ECMC_PLUGIN_CONFIG}', REPORT=1" +epicsEnvUnset(ECMC_PLUGIN_FILNAME) +epicsEnvUnset(ECMC_PLUGIN_CONFIG) + +############################################################################## +## PLC 0 +$(SCRIPTEXEC) $(ecmccfg_DIR)loadPLCFile.cmd, "PLC_ID=0, SAMPLE_RATE_MS=1000,FILE=./plc/can.plc") + +############################################################################## +############# Go to realtime: + +ecmcConfigOrDie "Cfg.SetAppMode(1)" +iocInit +dbl > pvs.log