// these 4 values are intended to be edited by the user int slicesBeforeSpecial = 2; // how many slices before starting the shorter scan region int slicesSpecial = 1; // how many slices in the eye region with the shorter scan double msCutFromSlice = 0; // how many ms to cut from the first part of the scan double msShortSlice = 3; // how many ms to leave the laser on for the shorter scan region // 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 valLUT3 = "3 - 3-input LUT"; String valOneshotNRT = "14 - one shot (NRT)"; String valDelayNRT = "15 - delay (NRT)"; String propCellConfig = "EditCellConfig"; String propCellInput1 = "EditCellInput1"; String propCellInput2 = "EditCellInput2"; String propCellInput3 = "EditCellInput3"; String propCellInput4 = "EditCellInput4"; String propUpdates = "EditCellUpdateAutomatically"; String valNo = "No"; int addrTTL1 = 42; int addrAcq = 1; int addrInvert = 64; int addrEdge = 128; int addrDelayGate = 6; int addrGate = 7; int addrDelayEyes = 9; int addrEyes = 11; int addrSlicesTrig = 16; int addrLaser = 10; int laserLookupTable = 216; int ticsBeforeGate = Math.round(msCutFromSlice*4); int ticsGate = Math.round(msShortSlice*4); // turn off updates to speed communication String valUpdatesOriginal = mmc.getProperty(plcName, propUpdates); mmc.setProperty(plcName, propUpdates, valNo); // do programming of 5 logic cells mmc.setProperty(plcName, propPosition, addrDelayEyes); mmc.setProperty(plcName, propCellType, valDelayNRT); mmc.setProperty(plcName, propCellConfig, slicesBeforeSpecial); mmc.setProperty(plcName, propCellInput1, addrAcq + addrEdge); mmc.setProperty(plcName, propCellInput2, addrTTL1 + addrInvert + addrEdge); mmc.setProperty(plcName, propCellInput3, addrAcq + addrInvert); mmc.setProperty(plcName, propPosition, addrEyes); mmc.setProperty(plcName, propCellType, valOneshotNRT); mmc.setProperty(plcName, propCellConfig, slicesSpecial); mmc.setProperty(plcName, propCellInput1, addrDelayEyes); mmc.setProperty(plcName, propCellInput2, addrTTL1 + addrInvert + addrEdge); mmc.setProperty(plcName, propCellInput3, addrAcq + addrInvert); mmc.setProperty(plcName, propPosition, addrDelayGate); mmc.setProperty(plcName, propCellType, valDelayNRT); mmc.setProperty(plcName, propCellConfig, ticsBeforeGate); mmc.setProperty(plcName, propCellInput1, addrTTL1); mmc.setProperty(plcName, propCellInput2, addrInvert + addrEdge); mmc.setProperty(plcName, propCellInput3, addrTTL1 + addrInvert + addrEdge); mmc.setProperty(plcName, propPosition, addrGate); mmc.setProperty(plcName, propCellType, valOneshotNRT); mmc.setProperty(plcName, propCellConfig, ticsGate); mmc.setProperty(plcName, propCellInput1, addrDelayGate); mmc.setProperty(plcName, propCellInput2, addrInvert + addrEdge); mmc.setProperty(plcName, propCellInput3, addrTTL1 + addrInvert + addrEdge); mmc.setProperty(plcName, propPosition, addrLaser); mmc.setProperty(plcName, propCellType, valLUT3); mmc.setProperty(plcName, propCellConfig, laserLookupTable); mmc.setProperty(plcName, propCellInput1, addrEyes); mmc.setProperty(plcName, propCellInput2, addrGate); mmc.setProperty(plcName, propCellInput3, addrTTL1); // restore updates mmc.setProperty(plcName, propUpdates, valUpdatesOriginal);