// variables to be edited by user delayInSeconds = 2; // can be no more than 16.3 durationInSeconds = 1; // can be no more than 16.3 // variables that should not need to be edited by user // would like to define these variables as final, but this is // not amenable to script which can run multiple times String plcName = "PLogic:E:36"; String propPosition = "PointerPosition"; String propCellType = "EditCellCellType"; String propCellConfig = "EditCellConfig"; String propCellInput1 = "EditCellInput1"; String propCellInput2 = "EditCellInput2"; String propCellInput3 = "EditCellInput3"; String propUpdates = "EditCellUpdateAutomatically"; String propSaveSettings = "SaveCardSettings"; String valNo = "No"; String valDelay = "15 - delay (NRT)"; String valOneShot = "14 - one shot (NRT)"; String valSaveSettings = "Z - save settings to card (partial)"; int addrAcqFlag = 1; int addrDelayCell = 6; int addrOneShotCell = 7; int addrOutput3 = 35; int addrInvert= 64; int addrEdge = 128; int ticsPerSecond = 4000; // turn off updates to speed communication String valUpdatesOriginal = mmc.getProperty(plcName, propUpdates); mmc.setProperty(plcName, propUpdates, valNo); // program cell 6 as delay with user-specified value and triggered every clock mmc.setProperty(plcName, propPosition, addrDelayCell); mmc.setProperty(plcName, propCellType, valDelay); mmc.setProperty(plcName, propCellConfig, ticsPerSecond*delayInSeconds); mmc.setProperty(plcName, propCellInput1, addrAcqFlag + addrInvert + addrEdge); mmc.setProperty(plcName, propCellInput2, addrInvert + addrEdge); // clock on every tic mmc.setProperty(plcName, propCellInput3, addrAcqFlag + addrEdge); // reset when acquisition starts // program cell 7 as a one-shot mmc.setProperty(plcName, propPosition, addrOneShotCell); mmc.setProperty(plcName, propCellType, valOneShot); mmc.setProperty(plcName, propCellConfig, ticsPerSecond*durationInSeconds); mmc.setProperty(plcName, propCellInput1, addrDelayCell); mmc.setProperty(plcName, propCellInput2, addrInvert + addrEdge); // clock on every tic mmc.setProperty(plcName, propCellInput3, addrAcqFlag + addrEdge); // reset when acquisition starts // output #3 reflects cell 6 mmc.setProperty(plcName, propPosition, addrOutput3); mmc.setProperty(plcName, propCellConfig, addrOneShotCell); // save settings mmc.setProperty(plcName, propSaveSettings, valSaveSettings); // restore updates mmc.setProperty(plcName, propUpdates, valUpdatesOriginal);