253 lines
6.5 KiB
JavaScript
Executable File
253 lines
6.5 KiB
JavaScript
Executable File
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Simulated Devices
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
var AnalogOutput = Java.extend(RegisterBase)
|
|
var dev = new AnalogOutput("ao1") {
|
|
i:double = 0.0,
|
|
doRead: function () {
|
|
return this.i
|
|
},
|
|
doWrite: function (value) {
|
|
this.i=value
|
|
},
|
|
}
|
|
add_device(dev, true)
|
|
|
|
|
|
var AnalogOutput = Java.extend(RegisterBase)
|
|
var dev = new AnalogOutput("ao2") {
|
|
i:double = 0.0,
|
|
doRead: function () {
|
|
return this.i
|
|
},
|
|
doWrite: function (value) {
|
|
this.i=value
|
|
},
|
|
}
|
|
add_device(dev, true)
|
|
|
|
var SinusoidSample = Java.extend(ReadonlyRegisterBase)
|
|
var dev = new SinusoidSample("ai1") {
|
|
x:double = 0.0,
|
|
doRead: function () {
|
|
sleep(0.001)
|
|
this.x += 0.1
|
|
var noise = (Math.random() - 0.5) / 10.0
|
|
return Math.sin(this.x) + noise
|
|
},
|
|
}
|
|
add_device(dev, true)
|
|
|
|
|
|
var SinusoidTime = Java.extend(ReadonlyRegisterBase)
|
|
var dev = new SinusoidTime("ai2") {
|
|
doRead: function () {
|
|
sleep(0.001)
|
|
var noise = (Math.random() - 0.5) / 10.0
|
|
return Math.sin(Date.now()) + noise
|
|
},
|
|
}
|
|
add_device(dev, true)
|
|
|
|
|
|
var Random = Java.extend(ReadonlyRegisterBase)
|
|
var dev = new Random("ai3") {
|
|
doRead: function () {
|
|
sleep(0.001)
|
|
return Math.random()
|
|
},
|
|
}
|
|
|
|
add_device(dev, true)
|
|
|
|
|
|
|
|
|
|
var SinusoidWaveform = Java.extend(ReadonlyRegisterBase, ReadonlyRegisterArray)
|
|
var dev = new SinusoidWaveform("wf1") {
|
|
doRead: function () {
|
|
sleep(0.001)
|
|
var ret = []
|
|
var x = Math.random()
|
|
for (var i = 0; i < 20; i++) {
|
|
ret.push(Math.sin(x))
|
|
x = x + 0.1
|
|
}
|
|
return to_array(ret, 'd')
|
|
},
|
|
|
|
getSize: function () {
|
|
//return wf1.take(-1).length
|
|
return SinusoidWaveformSuper.take(-1).length
|
|
},
|
|
|
|
}
|
|
var SinusoidWaveformSuper = Java.super(dev)
|
|
add_device(dev, true)
|
|
|
|
|
|
var SinusoidImage = Java.extend(ReadonlyRegisterBase, ReadonlyRegisterMatrix)
|
|
var dev = new SinusoidImage("im1") {
|
|
doRead: function () {
|
|
sleep(0.001)
|
|
var ret = []
|
|
var width = 200
|
|
var height = 100
|
|
var x = Math.random()
|
|
var base = []
|
|
for (var i = 0; i < width ; i++) {
|
|
base.push(Math.sin(x))
|
|
x = x + 0.05
|
|
}
|
|
for (var i = 0; i < height ; i++) {
|
|
var noise = (Math.random() - 0.5)/5.0
|
|
var row = []
|
|
for (var j = 0; j < width ; j++) {
|
|
row.push(base[j]+noise)
|
|
}
|
|
ret.push(row)
|
|
}
|
|
return to_array(ret, 'd')
|
|
},
|
|
|
|
getWidth: function () {
|
|
return SinusoidSuper.take(-1)[0].length
|
|
},
|
|
|
|
|
|
getHeight: function () {
|
|
return SinusoidSuper.take(-1).length
|
|
},
|
|
|
|
}
|
|
var SinusoidSuper = Java.super(dev)
|
|
add_device(dev, true)|
|
|
|
|
|
|
|
|
//Defintion
|
|
add_device(new DummyMotor("m1"), true)
|
|
add_device(new DummyMotor("m2"), true)
|
|
add_device(new DummyRegister("reg1",3), true)
|
|
add_device(new DummyPositioner("p1"),true)
|
|
add_device(new MotorGroupBase("mg1", m1, m2), true)
|
|
add_device(new MotorGroupDiscretePositioner("dp1", mg1), true)
|
|
|
|
|
|
//Initial Configuration
|
|
if (p1.config.unit == null) {
|
|
p1.config.minValue = 0.0 //Not persisted
|
|
p1.config.maxValue = 1000.0
|
|
p1.config.unit = "mm"
|
|
p1.config.save()
|
|
p1.initialize()
|
|
}
|
|
|
|
if (dp1.config.positions == null) {
|
|
dp1.config.positions = ["Park","Ready","Out","Clear"]
|
|
dp1.config.motor1 = ["0.0","4.0","8.0" ,"0.0"]
|
|
dp1.config.motor2 = ["0.0","5.0","3.0" ,"NaN"]
|
|
dp1.config.save()
|
|
dp1.initialize()
|
|
}
|
|
|
|
|
|
//Update
|
|
m1.setMonitored(true)
|
|
m2.setMonitored(true)
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Simple Readable / Writable objects can be created and used in scans
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
var WritableScalar = Java.extend(Writable)
|
|
var ws1 = new WritableScalar() {
|
|
write: function (value) {
|
|
},
|
|
}
|
|
|
|
|
|
var ReadableScalar = Java.extend(Readable)
|
|
var rs1 = new ReadableScalar() {
|
|
read: function (value) {
|
|
return Math.random()
|
|
},
|
|
}
|
|
|
|
|
|
var ReadableWaveform = Java.extend(ReadableArray)
|
|
var rw1 = new ReadableWaveform() {
|
|
|
|
read: function (value) {
|
|
ret = []
|
|
for (var i=0; i< this.getSize(); i++){
|
|
ret.push(Math.random())
|
|
}
|
|
return to_array(ret, 'd')
|
|
},
|
|
|
|
getSize: function () {
|
|
return 20
|
|
},
|
|
|
|
}
|
|
|
|
|
|
var ReadableImage = Java.extend(ReadableMatrix)
|
|
var ri1 = new ReadableImage() {
|
|
read: function (value) {
|
|
var ret = []
|
|
for (var i=0; i< this.getHeight(); i++){
|
|
var row = []
|
|
for (var j=0; j< this.getWidth(); j++){
|
|
row.push(Math.random())
|
|
}
|
|
ret.push(row)
|
|
}
|
|
return to_array(ret, 'd')
|
|
},
|
|
|
|
getWidth: function () {
|
|
return 80
|
|
},
|
|
|
|
getHeight: function () {
|
|
return 40
|
|
},
|
|
}
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Imaging
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
GenericDevice = Java.type('ch.psi.pshell.device.GenericDevice')
|
|
File = Java.type('java.io.File')
|
|
var f = new File(GenericDevice.getConfigFileName("m1"))
|
|
configured = f.exists()
|
|
|
|
add_device(new RegisterMatrixSource("src1", im1), true)
|
|
add_device(new RegisterMatrixSource("src2", ri1), true)
|
|
|
|
src1.polling = 100
|
|
src2.polling = 100
|
|
|
|
//Some configuration for so the imaging will work out of the box
|
|
if (!configured){
|
|
Colormap = Java.type('ch.psi.pshell.imaging.Colormap')
|
|
src1.config.colormapAutomatic = true
|
|
src1.config.colormap = configured.Temperature
|
|
src1.config.save()
|
|
src2.config.colormapAutomatic = true
|
|
src2.config.save()
|
|
}
|
|
|
|
|