OSDN Git Service

modify by fei
authoriwasaki <iwaaya@yasunaga-lab.bio.kyutech.ac.jp>
Wed, 6 Jan 2016 05:21:32 +0000 (14:21 +0900)
committeriwasaki <iwaaya@yasunaga-lab.bio.kyutech.ac.jp>
Wed, 6 Jan 2016 05:21:32 +0000 (14:21 +0900)
21 files changed:
lib/.serialCamera.rb.un~ [new file with mode: 0644]
lib/.workerThread.rb.un~ [new file with mode: 0644]
lib/serialCamera.rb
lib/serialCamera.rb~ [new file with mode: 0644]
lib/workerThread.rb
lib/workerThread.rb~ [new file with mode: 0644]
vem/.feicontrol.rb.un~
vem/.test.rb.un~
vem/.vem.rb.un~
vem/feicontrol.rb
vem/feicontrol.rb~
vem/test.rb
vem/test.rb~
vem/vem.rb
vem/vem.rb~
vemserver/.config.rb.un~
vemserver/.vemserver.rb.un~
vemserver/config.rb
vemserver/config.rb~
vemserver/vemserver.rb
vemserver/vemserver.rb~

diff --git a/lib/.serialCamera.rb.un~ b/lib/.serialCamera.rb.un~
new file mode 100644 (file)
index 0000000..91f4634
Binary files /dev/null and b/lib/.serialCamera.rb.un~ differ
diff --git a/lib/.workerThread.rb.un~ b/lib/.workerThread.rb.un~
new file mode 100644 (file)
index 0000000..2edf35b
Binary files /dev/null and b/lib/.workerThread.rb.un~ differ
index 7ff1fd9..d922431 100644 (file)
@@ -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 (file)
index 0000000..2b8cdb6
--- /dev/null
@@ -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
index aef110e..f5bfbf3 100644 (file)
@@ -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 (file)
index 0000000..8fa9a7a
--- /dev/null
@@ -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
index f3425cb..65080e1 100644 (file)
Binary files a/vem/.feicontrol.rb.un~ and b/vem/.feicontrol.rb.un~ differ
index f130ab6..dfed9e3 100644 (file)
Binary files a/vem/.test.rb.un~ and b/vem/.test.rb.un~ differ
index 3cd5469..b8aba52 100644 (file)
Binary files a/vem/.vem.rb.un~ and b/vem/.vem.rb.un~ differ
index 196bacc..100fb9e 100644 (file)
@@ -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
 
index 2662f57..265e1ac 100644 (file)
@@ -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
index fe2557e..ee91c7c 100644 (file)
@@ -7,7 +7,7 @@ require "./mock"
 
 class TEST
        def initialize
-               @@vem = VEM.create("mock")
+               @@vem = VEM.create("fei")
        end
 
        def test_get_params
index 5d7cc39..fe2557e 100644 (file)
@@ -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
 
index d5ccbc6..5869aae 100644 (file)
@@ -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
index 5869aae..322cc4a 100644 (file)
@@ -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
index 9dc13e7..2b6fe31 100644 (file)
Binary files a/vemserver/.config.rb.un~ and b/vemserver/.config.rb.un~ differ
index 7656c40..61e31b2 100644 (file)
Binary files a/vemserver/.vemserver.rb.un~ and b/vemserver/.vemserver.rb.un~ differ
index 7389cad..eb952bb 100644 (file)
@@ -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'
 
index 1fb7213..fac9409 100644 (file)
@@ -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'に切り替わるようにしている。
index a72ccee..722fd7b 100644 (file)
@@ -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
index c0f5469..430af5f 100644 (file)
@@ -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