From 8fd8dd0d1050b52ebc22abab3b1a4e6096a56922 Mon Sep 17 00:00:00 2001 From: iwasaki Date: Wed, 6 Jan 2016 14:21:32 +0900 Subject: [PATCH] modify by fei --- lib/.serialCamera.rb.un~ | Bin 0 -> 1463 bytes lib/.workerThread.rb.un~ | Bin 0 -> 9431 bytes lib/serialCamera.rb | 3 +- lib/serialCamera.rb~ | 46 ++++++++ lib/workerThread.rb | 30 ++--- lib/workerThread.rb~ | 25 ++++ vem/.feicontrol.rb.un~ | Bin 7831 -> 56120 bytes vem/.test.rb.un~ | Bin 25044 -> 579 bytes vem/.vem.rb.un~ | Bin 1009 -> 1900 bytes vem/feicontrol.rb | 280 ++++++++++++++++++++++++-------------------- vem/feicontrol.rb~ | 95 +++++++++------ vem/test.rb | 2 +- vem/test.rb~ | 11 +- vem/vem.rb | 2 +- vem/vem.rb~ | 2 +- vemserver/.config.rb.un~ | Bin 542 -> 3156 bytes vemserver/.vemserver.rb.un~ | Bin 1969 -> 4272 bytes vemserver/config.rb | 6 +- vemserver/config.rb~ | 4 +- vemserver/vemserver.rb | 7 +- vemserver/vemserver.rb~ | 13 +- 21 files changed, 331 insertions(+), 195 deletions(-) create mode 100644 lib/.serialCamera.rb.un~ create mode 100644 lib/.workerThread.rb.un~ create mode 100644 lib/serialCamera.rb~ create mode 100644 lib/workerThread.rb~ diff --git a/lib/.serialCamera.rb.un~ b/lib/.serialCamera.rb.un~ new file mode 100644 index 0000000000000000000000000000000000000000..91f4634d87888bc06afe3a5e1291fed372059b16 GIT binary patch literal 1463 zcmWH`%$*;a=aT=FfhopPNPmI#&%WFl`XXvwN`E>m3+tA;97^(Ew_)2BB{4S!1_pf~ zh5>0HgAs_Cp#mTph8e=@TxPRCWaBSD6)-_*5CxLr24Y1J=RXjDML?WUK!XqfMu#gn zIv5$gN&wC00%9H@)&pWtR46F`fkRnpE{Il8uvG|i_0>x*N=+Uw(mCHeU|`kA?j>8Sxl M`N`_0jn7vB00VyBcw9QOwQPr>7kYYJqlp<3 zZV+#tJ$O;$A7Ip*CrvgX@v2AT)e8qqjJ{uWy`g3z4y^XAUQ$ytU7vZsdaqtpPdmT* z={v>w&0mwLlYe}1>HKFu-1_;KAHTXick0rccTRl&`N!Q0+soS@e)2;9_asS&z5=CUF~F7ZJD*~`?k}stjX8SSjl=fyDY7ql(bvYE=dcL5OPgPd+=Rrn$p>1 z^$w*XQ+4J(>!Ku?=ht5%uB)Iz{Q7@tpgs8djKh&6cb}Gy_egq75-R`{^PO(i>zQ{q z%PY2gd!w}3+N(DlI7%U{0>t6(2u{_~R4(8yIB>gaaH0A^vryXW{k*hhv6mN@ySCaa z7CkwtP6zXX+FpGY$pxBe~K# z1>g+Ly#RN=q+|S!K+!^zB0ygYfj%yS9gy^tB!C_R=(T>;Gsm}_A6>1SBQ*lCtd4t# zK*Rg00Q3p{5h1E3n#u*@>mfu`KPQPzvG%Y$0jqoBp#f=Dk_rGLG}T7qxj=ivL7S=( z;q+AfSYF~WX;h;V0vUB(ooHLCmL29pO-g$V#A#LX_w>798iclmg9Hp z;AYI$M&7liD*IN*xl;*@SXoq5n}!`xs|s9s<|Nv*YGQ}^!?3*RSnjS}?;#n8fCqu) zj4`%YbM&|qaO8Z^EReO3ivijqv`Z}*dBMdSks&H+QiS2X(DHPv(Hq=lVK};1PPk1{)744iMcINQPt{1H zx$ykc@tmn`QUfIAc}jSW0SyC}QPeG7%Xm8-?uLH)_*s2j6Mb!?OzFHm`1YgFPRF_K z;C-713rLL_83_+S@6lk)VYzwZZC8fT~j2+Nlo%h`X9 LYIhX<{PyMF7G@_C literal 0 HcmV?d00001 diff --git a/lib/serialCamera.rb b/lib/serialCamera.rb index 7ff1fd9..d922431 100644 --- a/lib/serialCamera.rb +++ b/lib/serialCamera.rb @@ -2,13 +2,14 @@ $:.unshift(File.dirname(__FILE__)) require 'singleton' require '../tool/imageProc' +require '../vemserver/config' class SerialCamera include Singleton include ImageProc def initialize - @vem = VEM.create('mock') + @vem = VEM.create($em_name) @mutex = Mutex.new @cv = ConditionVariable.new @image = nil diff --git a/lib/serialCamera.rb~ b/lib/serialCamera.rb~ new file mode 100644 index 0000000..2b8cdb6 --- /dev/null +++ b/lib/serialCamera.rb~ @@ -0,0 +1,46 @@ +$:.unshift(File.dirname(__FILE__)) + +require 'singleton' +require '../tool/imageProc' + +class SerialCamera + include Singleton + include ImageProc + + def initialize + @vem = VEM.create($em_name) + @mutex = Mutex.new + @cv = ConditionVariable.new + @image = nil + @complete = false + @flag = false + end + + def flag + return @flag + end + + def on_flag + @flag = true + end + + def off_flag + @flag = false + end + + def execute + origin_image = @vem.acquisition # 撮影 + converted_image = convert_256(origin_image) # 256階調に変換 + @image = converted_image.to_json + @complete = true + @cv.broadcast + end + + def get_image + @mutex.synchronize do + @cv.wait(@mutex) while (@complete == false) + @complete = false + return @image + end + end +end diff --git a/lib/workerThread.rb b/lib/workerThread.rb index aef110e..f5bfbf3 100644 --- a/lib/workerThread.rb +++ b/lib/workerThread.rb @@ -1,25 +1,25 @@ $:.unshift(File.dirname(__FILE__)) -require 'singleton' require 'channel' require 'serialCamera' class WorkerThread - def initialize(channel) - @channel = channel - @serial_camera = SerialCamera.instance - end + def initialize(channel) + @channel = channel + end - def start - puts "worker_thread start" - Thread.new do - while true do - request = @channel.take_request - request.execute if (request!= 0) - @serial_camera.execute if @serial_camera.flag - end - end - end + def start + Thread.new do + puts "worker_thread start" + p Thread.current + @serial_camera = SerialCamera.instance + while true do + request = @channel.take_request + request.execute if (request!= 0) + @serial_camera.execute if @serial_camera.flag + end + end + end end diff --git a/lib/workerThread.rb~ b/lib/workerThread.rb~ new file mode 100644 index 0000000..8fa9a7a --- /dev/null +++ b/lib/workerThread.rb~ @@ -0,0 +1,25 @@ +$:.unshift(File.dirname(__FILE__)) + +require 'channel' +require 'serialCamera' + +class WorkerThread + + def initialize(channel) + @channel = channel + end + + def start + Thread.new do + puts "worker_thread start" + p Thread.current + # @serial_camera = SerialCamera.instance + while true do + request = @channel.take_request + # request.execute if (request!= 0) + # @serial_camera.execute if @serial_camera.flag + end + end + end + +end diff --git a/vem/.feicontrol.rb.un~ b/vem/.feicontrol.rb.un~ index f3425cbe28664dbb08ac27a83498053bd9db2fbf..65080e13dd6e5c0a8520889bb7a3144feba6de97 100644 GIT binary patch literal 56120 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 J>$&me=}!e0$S?o^ diff --git a/vem/.test.rb.un~ b/vem/.test.rb.un~ index f130ab6a410fce28526c92259fb15db6ea0bed59..dfed9e36ef87e0f361735350024a931890e98d80 100644 GIT binary patch literal 579 zcmWH`%$*;a=aT=FfhnB#vdv5|^=Jz`&pj z#4?%p9H{ z&w0;z-!o%r`pl)VnMY=SEwml}>cPu5_J4EZh3l_gy!P-fZ(Ke1%7w27hDP7|dBv3< zUc2^Bp->o>+E*=CszrWGOqHt>XD8<-&s5~`9sEw}GO358QaEZYl;&Q)(9UoB3ll%_ zTPbb%A^hZ5Tcq~$w|}LCm*Ov}I7DFV#_v;sV_D&^jq>`NrQQ*1P^vjs%GKj%XRF7j z&zBFr80`25%cW|;5xXuPNOnZQvxwcx!LDs#yWX1J| zk{nU+EF$+&kSi=K*WVylv36LkFulVujhH4NzD=?FB-kzgA9h%+H2uRd*_nX&Hpgy0 zx-;0dFKO3&w!> zJ~I^0bSSNsss%xwww4Ey8d2~pqV`l!Tajm+P8n5gz^I)rPoJEfsm{$lt$1K{nC=0| z3^kO5r;+eFmfEjpHsvDW8iehte9;Cj|9rDdkLHe46uW zEAy0VRBJi8#3~Gpv2Qp+9XwOU#i+O)O6`BtWgKtB*^2amq1OzTa+0$rI)v6q)q)~V zO>!C$*Q3bouw$j3=u~cVgIx2;4zNzsM=${ls44YKWL%m8I2-_1)z4HEa7zs^OfdH} z3nCR(1F?f>&ZlJ(bYU|uS{m>C)~2AI%T#b{N5_#PGHMoC+f^s0$`6g~-<|Ev|LlsB z7tF%-%lN{0Qd1VjfcPH7@H=a$9E%zr8`;-nh}QAh<(*v6XAMiNW!7!&)3c)XP`8HRotEVq6}O|3zxNOaE)g+r0~^(Vv^HnxF1FCQ=4*)awg>}<@}~y zOgW(N)dFII(`dLK1@5y}aJ_XYR|!jkD2G&LI*1|zWw>>o21^qem!`;lZsl~>LW{xj zSd`qAFb2^Bn!HCZ3t4$fC|J41gLoeFHJUnSl5< z1@6yAI9BAD)MZi^hXZP-R4pLtT0SksH7agLf&1IS>Ft|L-VwNsdcoOTMB%2vNE|TX zx=X4SDB%m2pVJ&u!{T);jd!1H#kXlOKHUX|*WIRfSmMVOvXp)V!L^9rsaAfQ7xkNr z2?*GT=_8m4&;-P{DS)SM4-l|jrjuYMKobz(rU2$&%n>hXHl6^N&OpHKF`Wc60h)mL zHU;o($iVga-PT(N1ngeZNiY+j35ah~0H43TAr!FPrjuX-7&fw`NvMg8OH%+}Y6ZCD zBowdvOxLi)FI+}TekL+5P4TO{mEJgl?pSORdO$uARNOl%KXo~QT+wtARV2eTwIpdG zoq?{uN zuB9|pIv3KJvS(1~^j5qKrKO{f6>DDyA5VjD9Wp(H623HbF+uTb3g3r;udl|( sAju91GH)q9n|bsSO6b$TNi^Jx{C^4O17Cm6ryI(Y&kUS4^M3pIKdBAZ#{d8T diff --git a/vem/.vem.rb.un~ b/vem/.vem.rb.un~ index 3cd5469a253ba4f291bd8c3e052748690380f302..b8aba5286abcd4c19b0823aca85bcbbb39824b27 100644 GIT binary patch delta 248 zcmey!{)SIGEHih0Xr4>{QwFBX$-1vss3wQK;*grCq_CxSvVr&B(ze3D1Qs9FUu%-H zCTi=-voJsah=yT?u!fE8EQ}zLjpaue8JRcRFl}a(i@yLAVS=gyQeeOgBsqatWOD#h zIwNPD;|8!s=E(<`#Y{yMz`)Jb(>Xt{q$oc}FE6#+v=M9&NFy=;Sq?Ht5@Jxp#x{rx XKnBT4Vi=T}S6q^qmz-+a_{QwFBP+m5L=WUab=*le->w~o%U?_%bLO#i%pby3PCE~_bZ oHzsQ9$}=%Q0EmWRhOqp|4=juzk&Wd?7#SHh+c0frWO}{|0Da>j2mk;8 diff --git a/vem/feicontrol.rb b/vem/feicontrol.rb index 196bacc..100fb9e 100644 --- a/vem/feicontrol.rb +++ b/vem/feicontrol.rb @@ -5,135 +5,159 @@ require 'win32ole' require 'json' require 'vem' +module FEIObject + @instance = nil + def FEIObject.instance + unless @instance then + @instance = WIN32OLE.new('TEMScripting.Instrument') + end + return @instance + end +end + class FEIControl < VEM - include Singleton - - def initialize - @tem = WIN32OLE.new('TEMScripting.Instrument') - @acq = nil - @params = { - :stage => { - :x => 0, - :y => 0, - :z => 0, - :a => 0, - }, - :ccdCamera => { - :binning => 1, - :expTime => 1, - :imageSize => 0 - }, - :proj => { - :magIndex => 0 - }, - :ill => { - :spotSizeIndex => 0 - } - } - end - - def get_params - puts "FEI get params" - return @params.to_json - end - - def set_stageA(x, y, z, a) - puts "FEI setStageA" - - position = @tem.Stage.Position - position.X = x*1e-7 - position.Y = y*1e-7 - position.Z = z*1e-7 - position.A = a*(3.145159/180.0) - - @tem.Stage.GoTo(position, 15) - - @params[:stage][:x] = @tem.Stage.Position.X - @params[:stage][:y] = @tem.Stage.Position.Y - @params[:stage][:z] = @tem.Stage.Position.Z - @params[:stage][:a] = @tem.Stage.Position.A - - return @params[:stage].to_json - end - - def set_stageR(x, y, z, a) - puts "FEI setStageR" - - position = @tem.Stage.Position - position.X = position.X + x*1e-7 - position.Y = position.Y + y*1e-7 - position.Z = position.Z + z*1e-7 - position.A = position.A + a*(3.145159/180.0) - - @tem.Stage.GoTo(position, 15) - - @params[:stage][:x] = @tem.Stage.Position.X - @params[:stage][:y] = @tem.Stage.Position.Y - @params[:stage][:z] = @tem.Stage.Position.Z - @params[:stage][:a] = @tem.Stage.Position.A - - return @params[:stage].to_json - end - - def set_spotsize(spsize) - puts "FEI setSpotSize" - - ill = @tem.Illumination - ill.SpotsizeIndex = ill.SpotsizeIndex + spsize - @params[:ill][:spotSizeIndex] = ill.SpotsizeIndex - return @params[:ill][:spotSizeIndex].to_json - end - - def set_magnification(magsize) - puts "FEI setMagnification" - - proj = @tem.Projection - proj.MagnificationIndex = proj.MagnificationIndex + magsize - @params[:proj][:magIndex] = proj.MagnificationIndex - return @params[:proj][:magIndex] - end - - def acquisition_init(binning, exp_time, image_size) - - # get acquitision object - @acq = @tem.Acquisition - - # acquire an image from "CCD" camera - @acq.AddAcqDeviceByName("CCD") - - ## settings for acquisition parameters - # ccdCamerasAcqParams - ccdCamerasAcqParams = @acq.Cameras.Item(0).AcqParams - # binning - ccdCamerasAcqParams.Binning = binning - # exposuretime - ccdCamerasAcqParams.ExposureTime = exp_time - # imagesize - ccdCamerasAcqParams.ImageSize = image_size - - @params[:ccdCamera][:binning] = ccdCamerasAcqParams.Binning - @params[:ccdCamera][:expTime] = ccdCamerasAcqParams.ExposureTime - @params[:ccdCamera][:imageSize] = ccdCamerasAcqParams.ImageSize - - return @params[:ccdCamera].to_json - end - - def acquisition - @acq = @tem.Acquisition - - # acquisition Image - imageCollection = @acq.AcquireImages - img = imageCollection.Item(0) - return img.AsSafeArray - end - - def set_obj(params) - puts "FEI setObj" - end - - def set_beamtilt(params) - puts "FEI setBeamTilt" - end + include FEIObject + + def initialize + @@tem = FEIObject.instance + @@acq = nil + @@params = { + :stage => { + :x => 0, + :y => 0, + :z => 0, + :a => 0, + }, + :ccdCamera => { + :binning => 1, + :expTime => 1, + :imageSize => 0 + }, + :proj => { + :magIndex => 0 + }, + :ill => { + :spotSizeIndex => 0 + } + } + end + + def get_params + puts "FEI get params" + + @@params[:stage][:x] = @@tem.Stage.Position.X + @@params[:stage][:y] = @@tem.Stage.Position.Y + @@params[:stage][:z] = @@tem.Stage.Position.Z + @@params[:stage][:a] = @@tem.Stage.Position.A + @@params[:ill][:spotSizeIndex] = @@tem.Illumination.SpotsizeIndex + @@params[:proj][:magIndex] = @@tem.Projection.MagnificationIndex + # @@params[:ccdCamera][:binning] = ccdCamerasAcqParams.Binning + # @@params[:ccdCamera][:expTime] = ccdCamerasAcqParams.ExposureTime + # @@params[:ccdCamera][:imageSize] = ccdCamerasAcqParams.ImageSize + + return @@params.to_json + end + + def set_stageA(x, y, z, a) + puts "FEI setStageA" + + position = @@tem.Stage.Position + position.X = x*1e-7 + position.Y = y*1e-7 + position.Z = z*1e-7 + position.A = a*(3.145159/180.0) + + @@tem.Stage.GoTo(position, 15) + + @@params[:stage][:x] = @@tem.Stage.Position.X + @@params[:stage][:y] = @@tem.Stage.Position.Y + @@params[:stage][:z] = @@tem.Stage.Position.Z + @@params[:stage][:a] = @@tem.Stage.Position.A + + return @@params[:stage].to_json + end + + def set_stageR(x, y, z, a) + puts "FEI setStageR" + + + position = @@tem.Stage.Position + position.X = position.X + x*1e-7 + position.Y = position.Y + y*1e-7 + position.Z = position.Z + z*1e-7 + position.A = position.A + a*(3.145159/180.0) + + @@tem.Stage.GoTo(position, 15) + + @@params[:stage][:x] = @@tem.Stage.Position.X + @@params[:stage][:y] = @@tem.Stage.Position.Y + @@params[:stage][:z] = @@tem.Stage.Position.Z + @@params[:stage][:a] = @@tem.Stage.Position.A + + return @@params[:stage].to_json + end + + def set_spotsize(spsize) + puts "FEI setSpotSize" + + ill = @@tem.Illumination + ill.SpotsizeIndex = ill.SpotsizeIndex + spsize + @@params[:ill][:spotSizeIndex] = ill.SpotsizeIndex + return @@params[:ill][:spotSizeIndex].to_json + end + + def set_magnification(magsize) + puts "FEI setMagnification" + + proj = @@tem.Projection + proj.MagnificationIndex = proj.MagnificationIndex + magsize + @@params[:proj][:magIndex] = proj.MagnificationIndex + return @@params[:proj][:magIndex] + end + + def acquisition_init(binning, exp_time, image_size) + puts "FEI acq_init" + + + # get acquitision object + @@acq = @@tem.Acquisition + + # acquire an image from "CCD" camera + @@acq.AddAcqDeviceByName("CCD") + + ## settings for acquisition parameters + # ccdCamerasAcqParams + ccdCamerasAcqParams = @@acq.Cameras.Item(0).AcqParams + # binning + ccdCamerasAcqParams.Binning = binning + # exposuretime + ccdCamerasAcqParams.ExposureTime = exp_time + # imagesize + ccdCamerasAcqParams.ImageSize = image_size + + @@params[:ccdCamera][:binning] = ccdCamerasAcqParams.Binning + @@params[:ccdCamera][:expTime] = ccdCamerasAcqParams.ExposureTime + @@params[:ccdCamera][:imageSize] = ccdCamerasAcqParams.ImageSize + + return @@params[:ccdCamera].to_json + end + + def acquisition + @@acq = @@tem.Acquisition + + # acquisition Image + imageCollection = @@acq.AcquireImages + img = imageCollection.Item(0) + return img.AsSafeArray + end + + def set_obj(params) + puts "FEI setObj" + end + + def set_beamtilt(params) + puts "FEI setBeamTilt" + end end diff --git a/vem/feicontrol.rb~ b/vem/feicontrol.rb~ index 2662f57..265e1ac 100644 --- a/vem/feicontrol.rb~ +++ b/vem/feicontrol.rb~ @@ -2,14 +2,12 @@ $:.unshift(File.dirname(__FILE__)) require 'singleton' require 'win32ole' -require 'open3' require 'json' - require 'vem' -module TEMObject +module FEIObject @instance = nil - def TEMObject.instance + def FEIObject.instance unless @instance then @instance = WIN32OLE.new('TEMScripting.Instrument') end @@ -17,36 +15,45 @@ module TEMObject end end - class FEIControl < VEM - include TEMObject - @@params = { - "x" => 0, - "y" => 0, - "z" => 0, - "a" => 0, - "binning" => 1, - "exptime" => 1, - "image_size" => 0 - } - - @@acq = nil + include FEIObject def initialize - @@tem = TEMObject.instance - puts @@tem + @@tem = FEIObject.instance + @@acq = nil + @@params = { + :stage => { + :x => 0, + :y => 0, + :z => 0, + :a => 0, + }, + :ccdCamera => { + :binning => 1, + :expTime => 1, + :imageSize => 0 + }, + :proj => { + :magIndex => 0 + }, + :ill => { + :spotSizeIndex => 0 + } + } end def get_params puts "FEI get params" - @@tem = TEMObject.instance - - @@params["x"] = @@tem.Stage.Position.X - @@params["y"] = @@tem.Stage.Position.Y - @@params["z"] = @@tem.Stage.Position.Z - @@params["a"] = @@tem.Stage.Position.A - + @@params[:stage][:x] = @@tem.Stage.Position.X + @@params[:stage][:y] = @@tem.Stage.Position.Y + @@params[:stage][:z] = @@tem.Stage.Position.Z + @@params[:stage][:a] = @@tem.Stage.Position.A + @@params[:ill][:spotSizeIndex] = ill.SpotsizeIndex + @@params[:proj][:magIndex] = proj.MagnificationIndex + @@params[:ccdCamera][:binning] = ccdCamerasAcqParams.Binning + @@params[:ccdCamera][:expTime] = ccdCamerasAcqParams.ExposureTime + @@params[:ccdCamera][:imageSize] = ccdCamerasAcqParams.ImageSize return @@params.to_json end @@ -54,7 +61,6 @@ class FEIControl < VEM def set_stageA(x, y, z, a) puts "FEI setStageA" - position = @@tem.Stage.Position position.X = x*1e-7 position.Y = y*1e-7 @@ -62,13 +68,19 @@ class FEIControl < VEM position.A = a*(3.145159/180.0) @@tem.Stage.GoTo(position, 15) - get_params - return @@params.to_json + + @@params[:stage][:x] = @@tem.Stage.Position.X + @@params[:stage][:y] = @@tem.Stage.Position.Y + @@params[:stage][:z] = @@tem.Stage.Position.Z + @@params[:stage][:a] = @@tem.Stage.Position.A + + return @@params[:stage].to_json end def set_stageR(x, y, z, a) puts "FEI setStageR" + position = @@tem.Stage.Position position.X = position.X + x*1e-7 position.Y = position.Y + y*1e-7 @@ -76,8 +88,13 @@ class FEIControl < VEM position.A = position.A + a*(3.145159/180.0) @@tem.Stage.GoTo(position, 15) - get_params - return @@params.to_json + + @@params[:stage][:x] = @@tem.Stage.Position.X + @@params[:stage][:y] = @@tem.Stage.Position.Y + @@params[:stage][:z] = @@tem.Stage.Position.Z + @@params[:stage][:a] = @@tem.Stage.Position.A + + return @@params[:stage].to_json end def set_spotsize(spsize) @@ -85,7 +102,8 @@ class FEIControl < VEM ill = @@tem.Illumination ill.SpotsizeIndex = ill.SpotsizeIndex + spsize - return ill.SpotsizeIndex + @@params[:ill][:spotSizeIndex] = ill.SpotsizeIndex + return @@params[:ill][:spotSizeIndex].to_json end def set_magnification(magsize) @@ -93,12 +111,13 @@ class FEIControl < VEM proj = @@tem.Projection proj.MagnificationIndex = proj.MagnificationIndex + magsize - return proj.MagnificationIndex + @@params[:proj][:magIndex] = proj.MagnificationIndex + return @@params[:proj][:magIndex] end def acquisition_init(binning, exp_time, image_size) + puts "FEI acq_init" - @@tem = TEMObject.instance # get acquitision object @@acq = @@tem.Acquisition @@ -115,11 +134,15 @@ class FEIControl < VEM ccdCamerasAcqParams.ExposureTime = exp_time # imagesize ccdCamerasAcqParams.ImageSize = image_size - return "#{ccdCamerasAcqParams.Binning}, #{ccdCamerasAcqParams.ExposureTime}, #{ccdCamerasAcqParams.ImageSize}" + + @@params[:ccdCamera][:binning] = ccdCamerasAcqParams.Binning + @@params[:ccdCamera][:expTime] = ccdCamerasAcqParams.ExposureTime + @@params[:ccdCamera][:imageSize] = ccdCamerasAcqParams.ImageSize + + return @@params[:ccdCamera].to_json end def acquisition - @@tem = TEMObject.instance @@acq = @@tem.Acquisition # acquisition Image diff --git a/vem/test.rb b/vem/test.rb index fe2557e..ee91c7c 100644 --- a/vem/test.rb +++ b/vem/test.rb @@ -7,7 +7,7 @@ require "./mock" class TEST def initialize - @@vem = VEM.create("mock") + @@vem = VEM.create("fei") end def test_get_params diff --git a/vem/test.rb~ b/vem/test.rb~ index 5d7cc39..fe2557e 100644 --- a/vem/test.rb~ +++ b/vem/test.rb~ @@ -1,9 +1,13 @@ require "./vem" +begin require "./feicontrol" +rescue LoadError +end +require "./mock" class TEST def initialize - @@vem = VEM.create("fei") + @@vem = VEM.create("mock") end def test_get_params @@ -33,4 +37,9 @@ end test = TEST.new test.test_get_params +test.test_set_stageA +test.test_set_stageR +test.test_set_spotsize +test.test_acq_init +test.test_acq diff --git a/vem/vem.rb b/vem/vem.rb index d5ccbc6..5869aae 100644 --- a/vem/vem.rb +++ b/vem/vem.rb @@ -6,7 +6,7 @@ class VEM if inst == "hitachi" then HITACHIControl.new() elsif inst == "fei" then - FEIControl.new + FEIControl.new() elsif inst == "jeol" then JEOLControl.new() elsif inst == "mock" then diff --git a/vem/vem.rb~ b/vem/vem.rb~ index 5869aae..322cc4a 100644 --- a/vem/vem.rb~ +++ b/vem/vem.rb~ @@ -6,7 +6,7 @@ class VEM if inst == "hitachi" then HITACHIControl.new() elsif inst == "fei" then - FEIControl.new() + FEIControl.instance elsif inst == "jeol" then JEOLControl.new() elsif inst == "mock" then diff --git a/vemserver/.config.rb.un~ b/vemserver/.config.rb.un~ index 9dc13e79c9c02100ffdc13bd300aaa827b36e314..2b6fe31288c8dfb773e4d1eee31353d463f6ad9a 100644 GIT binary patch literal 3156 zcmeI!JxIeq6bJBYQ$H3rh3X(3iros8S`=}yb=Jj)0N9vts3xg_QN=u6y2aJJd1gdZyT{*cHx7grPI+pm+O z{_DnRuXDe){BtmOyw}+3zg;S&#%aVOL5nec09l4|yOoy|&N`}kr#B>ZM#8BP8k1Q3 zQt%NhY#6A3+g)8}j)eM7)BRI4M)d&2RMrowEidphh?Pt(2x~jJg+sQB7-^RdIO5ne z*47SHFd1&QoMyXZWQS*g0DfSY$u@SYUcJ8Wx7%#j3~OFFe4$tpL|lQ6DFIN6DAh2Y3GrqaBHnn+pqr(1 zR{237vrJMAZxSG|hN`%reC*VsuVS&&=dR@3J9GpXYz)$!?|q literal 542 zcmWH`%$*;a=aT=FfvMC(Z)%+M7xrf>r6S%sZng;I*nIQE2GP4KTaZuW! zu_d$?Hr85DP+9l^B-$81fwjE<+`Zh;P!QH?Uh-~cce1l{?>Fzwe}kxb@GO3q{1&<9 z(a#@;qt9oy_up4<-fiD&|GIyie)#-oF^Ep|%I*yz#C3AEB6SAH(ZbNOi(u#Ln>8Mo;8x5_DDaq-&skIWF&dql$Qam?E&IY`g)0#)hk;tkgq~jLpKo=>p zX^fna4%JOrx8unkEzrq3YXLdz0-L>_mJ^vwx>OGzxCuByZ*dc_xV#ElvXS(7flt9% z3fSQRWS#K55QQv_cs+J`adzPV1cF;r7pRzEc*R*Y_#$OJQzt0db&2T{mnr8TGaV+T zZpj3mA!j*2=MOk1AlY^a*Q&*p>mG2(6xN@}m|FE!6jv&1N^dD$Hfg9+8K`F1ib$)R z5iVQyt`#pOSuxSeINT(?vnXFstK^h4Q5>c^+^crh_ma-~?zgv3-+i(|iT4QpDqhN` zsvYE_z=Ic2QP@<&n4o9aaG2NL^L3uXl2uEaOxaB~cvcv5O(+)4rc$lhJFI%ahrf8R zC~yKVucHu+%#C=(mRG*Z3pxtn2QNt6zK)`c^O4?Wq;C4*DWLSy7?JodMo3>|&D8mfIAixO3EMOLd2C>2Xu%eD-EFf7XhWHCm z1x!#HM1iD07!3Xc0fGk;9i^!k0>J3-2S*1Z!&eEYv9RC=(PBlgs4mXTODri$)K5w* zPE|K;1V)6Fm%d7vPnB>+a=B5>p}AR-Tx$+&?S6b<6=$V1Ji;Fty} z0L2$bF#|L{L3~)Q1qp-V7Niawr=#%+3KCiZV0BE9#dP7wIQu z=IN*Al_?aJCRHlvdMYGa>4z4l78UDfmM0b`W@qZBr{?NIGpufIVsS}o5vZI7DFsr{ q$VSe%AYXwZ9xgT-*`OeyB>+bDQfNg8&X2IX2a9YRb*yRQ^Hl&z19NHs diff --git a/vemserver/config.rb b/vemserver/config.rb index 7389cad..eb952bb 100644 --- a/vemserver/config.rb +++ b/vemserver/config.rb @@ -1,6 +1,8 @@ -$ip_address = 'localhost' +$:.unshift(File.dirname(__FILE__)) + +$ip_address = '192.168.4.146' $cs_port = '3000' $vemapi_port = 9090 $debug = true -$em_name = 'mock' +$em_name = 'fei' diff --git a/vemserver/config.rb~ b/vemserver/config.rb~ index 1fb7213..fac9409 100644 --- a/vemserver/config.rb~ +++ b/vemserver/config.rb~ @@ -1,6 +1,6 @@ -$ip_address = 'localhost' +$ip_address = '192.168.4.146' $cs_port = '3000' $vemapi_port = 9090 $debug = true +$em_name = 'fei' -# $em_nameをsinatraの起動モード(development or test)で'mock'か'fei'に切り替わるようにしている。 diff --git a/vemserver/vemserver.rb b/vemserver/vemserver.rb index a72ccee..722fd7b 100644 --- a/vemserver/vemserver.rb +++ b/vemserver/vemserver.rb @@ -10,7 +10,8 @@ channel = Channel.instance # Channelインスタンス生成 channel.start_worker # Worker Threadの起動 EM.run do -cs = CameraSocket.new($ip_address, $cs_port) -cs.run! -Thin::Server.start Vemapi, $ip_address, $vemapi_port, :signals => false # sinatraサーバーの起動 + sleep(1) # wait for worker thread create win32ole instance + cs = CameraSocket.new($ip_address, $cs_port) + cs.run! + Thin::Server.start Vemapi, $ip_address, $vemapi_port, :signals => false # sinatraサーバーの起動 end diff --git a/vemserver/vemserver.rb~ b/vemserver/vemserver.rb~ index c0f5469..430af5f 100644 --- a/vemserver/vemserver.rb~ +++ b/vemserver/vemserver.rb~ @@ -1,11 +1,16 @@ +#!/usr/bin/env ruby -I c:/Users/iwasaki/gem/sinatra-master/lib -I lib + +require 'thin' require '../lib/vemapi' require '../lib/channel' +require '../lib/cameraSocket' require './config' - channel = Channel.instance # Channelインスタンス生成 channel.start_worker # Worker Threadの起動 -Vemapi.run! :host => $ip_address, :port => $vemapi_port # sinatraサーバーの起動 - -# cameraSocketはVemapiの中で起動している。 +EM.run do + cs = CameraSocket.new($ip_address, $cs_port) + cs.run! + Thin::Server.start Vemapi, $ip_address, $vemapi_port, :signals => false # sinatraサーバーの起動 +end -- 2.11.0