agri-controller 0.0.0 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. checksums.yaml +7 -0
  2. data/ChangeLog.txt +36 -0
  3. data/LICENSE.txt +15 -0
  4. data/agri-controller.gemspec +36 -0
  5. data/gpl-2.0.txt +339 -0
  6. data/lib/agri-controller.rb +11 -33
  7. data/lib/agri-controller/bcc.rb +86 -53
  8. data/lib/agri-controller/bit.rb +158 -143
  9. data/lib/agri-controller/device.rb +7 -0
  10. data/lib/agri-controller/device/dacs.rb +148 -0
  11. data/lib/agri-controller/device/kr.rb +23 -0
  12. data/lib/agri-controller/device/ma.rb +92 -0
  13. data/lib/agri-controller/device/mch383.rb +178 -0
  14. data/lib/agri-controller/device/tr.rb +230 -0
  15. data/lib/agri-controller/device/wr1010.rb +314 -0
  16. data/lib/agri-controller/dt.rb +17 -0
  17. data/lib/agri-controller/error_caption.rb +67 -46
  18. data/lib/agri-controller/gruff.rb +7 -0
  19. data/lib/agri-controller/gruff/base.rb +88 -0
  20. data/lib/agri-controller/gruff/chdata.rb +64 -0
  21. data/lib/agri-controller/gruff/join_csv.rb +62 -0
  22. data/lib/agri-controller/gruff/rename_csv.rb +50 -0
  23. data/lib/agri-controller/{thermo_data_each_day.rb → gruff/thermo_data_each_day.rb} +67 -67
  24. data/lib/agri-controller/{thermo_gruff.rb → gruff/thermo_gruff.rb} +112 -109
  25. data/lib/agri-controller/gruff/thermo_gruff2.rb +161 -0
  26. data/lib/agri-controller/{thermo_gruff_generate.rb → gruff/thermo_gruff_generate.rb} +28 -28
  27. data/lib/agri-controller/gruff/thermo_gruff_loop.rb +42 -0
  28. data/lib/agri-controller/loger.rb +91 -51
  29. data/lib/agri-controller/main.rb +0 -0
  30. data/lib/agri-controller/main_linux.rb +282 -0
  31. data/lib/agri-controller/main_new.rb +401 -401
  32. data/lib/agri-controller/multiple_pulse_timer.rb +190 -169
  33. data/lib/agri-controller/n_dan_thermo.rb +156 -154
  34. data/lib/agri-controller/save_threads.rb +181 -172
  35. data/lib/agri-controller/setting_io.rb +53 -53
  36. data/lib/agri-controller/ttyUSB_watchdog.rb +43 -0
  37. data/lib/agri-controller/value_controller.rb +209 -167
  38. data/lib/agri-controller/version.rb +7 -5
  39. data/lib/agri-controller/web.rb +39 -39
  40. data/lib/agri-controller/webrick_test.rb +51 -46
  41. data/lib/agri-controller/wet_sensor.rb +92 -0
  42. data/test/tc_bit.rb +14 -3
  43. data/test/tc_trigger.rb +27 -0
  44. data/test/ts_agri-controller.rb +10 -10
  45. metadata +62 -202
  46. data/bin/main.bat +0 -2
  47. data/bin/main.bat /202/326/202/314/203V/203/207/201[/203g/203J/203b/203g.lnk +0 -0
  48. data/bin/main.rb +0 -23
  49. data/bin/memo.txt +0 -4
  50. data/bin/server.bat +0 -1
  51. data/bin/server.bat /202/326/202/314/203V/203/207/201[/203g/203J/203b/203g.lnk +0 -0
  52. data/bin/server.rb +0 -4
  53. data/bin/set_config.rb +0 -47
  54. data/bin/usual.rb +0 -3
  55. data/bin//203R/203}/203/223/203h /203v/203/215/203/223/203v/203g.lnk +0 -0
  56. data/lib/agri-controller/dacs.rb +0 -114
  57. data/lib/agri-controller/dircopy.rb +0 -30
  58. data/lib/agri-controller/kr.rb +0 -34
  59. data/lib/agri-controller/kr_2.rb +0 -78
  60. data/lib/agri-controller/serial.rb +0 -114
  61. data/lib/agri-controller/thermo_gruff_loop.rb +0 -35
  62. data/lib/agri-controller/wetsensor.rb +0 -119
  63. data/lib/agri-controller/wr1010.rb +0 -316
  64. data/lib/agri-controller/wr1010_2.rb +0 -0
  65. data/lib/cgi-bin/auto01.cgi +0 -0
  66. data/lib/cgi-bin/auto02.cgi +0 -0
  67. data/lib/cgi-bin/change_step.cgi +0 -42
  68. data/lib/cgi-bin/config/change_step +0 -4
  69. data/lib/cgi-bin/config/house1 +0 -20
  70. data/lib/cgi-bin/config/house2 +0 -8
  71. data/lib/cgi-bin/config/kr01_readable.txt +0 -2
  72. data/lib/cgi-bin/config/kr02_readable.txt +0 -2
  73. data/lib/cgi-bin/config/kr1_bit.txt +0 -2
  74. data/lib/cgi-bin/config/kr2_bit.txt +0 -2
  75. data/lib/cgi-bin/config/last_bit.txt +0 -1
  76. data/lib/cgi-bin/config/last_thermo_data +0 -22
  77. data/lib/cgi-bin/config/last_thermo_time +0 -2
  78. data/lib/cgi-bin/config/manual_bool01.txt +0 -2
  79. data/lib/cgi-bin/config/manual_bool02.txt +0 -2
  80. data/lib/cgi-bin/config/reload_flag +0 -2
  81. data/lib/cgi-bin/config/run_check +0 -2
  82. data/lib/cgi-bin/config/thermo_define.yml +0 -4
  83. data/lib/cgi-bin/config/time_array +0 -10
  84. data/lib/cgi-bin/config/wait_time +0 -2
  85. data/lib/cgi-bin/config/wet0 +0 -3
  86. data/lib/cgi-bin/config/wet0_drain +0 -2
  87. data/lib/cgi-bin/config/wet1 +0 -3
  88. data/lib/cgi-bin/config/wet1_drain +0 -2
  89. data/lib/cgi-bin/config/wet_input.txt +0 -1
  90. data/lib/cgi-bin/curtain_h1.cgi +0 -43
  91. data/lib/cgi-bin/curtain_h1_setting.cgi +0 -43
  92. data/lib/cgi-bin/curtain_h2.cgi +0 -43
  93. data/lib/cgi-bin/curtain_h2_setting.cgi +0 -43
  94. data/lib/cgi-bin/dacs_port.cgi +0 -43
  95. data/lib/cgi-bin/delay_time_0.cgi +0 -43
  96. data/lib/cgi-bin/delay_time_1.cgi +0 -43
  97. data/lib/cgi-bin/error_clear.cgi +0 -0
  98. data/lib/cgi-bin/house1.cgi +0 -42
  99. data/lib/cgi-bin/house1a.cgi +0 -43
  100. data/lib/cgi-bin/house2.cgi +0 -42
  101. data/lib/cgi-bin/house2b.cgi +0 -43
  102. data/lib/cgi-bin/house_n_dan_thermo1.cgi +0 -43
  103. data/lib/cgi-bin/house_n_dan_thermo2.cgi +0 -0
  104. data/lib/cgi-bin/keitai.cgi +0 -25
  105. data/lib/cgi-bin/kr01.cgi +0 -0
  106. data/lib/cgi-bin/kr01_readable.txt.cgi +0 -42
  107. data/lib/cgi-bin/kr02.cgi +0 -0
  108. data/lib/cgi-bin/kr02_readable.txt.cgi +0 -42
  109. data/lib/cgi-bin/kr1_bit.txt.cgi +0 -42
  110. data/lib/cgi-bin/kr2_bit.txt.cgi +0 -42
  111. data/lib/cgi-bin/kr_log.cgi +0 -18
  112. data/lib/cgi-bin/last_bit.txt.cgi +0 -42
  113. data/lib/cgi-bin/last_thermo_data.cgi +0 -42
  114. data/lib/cgi-bin/last_thermo_time.cgi +0 -42
  115. data/lib/cgi-bin/log.cgi +0 -19
  116. data/lib/cgi-bin/log/errors.txt +0 -1
  117. data/lib/cgi-bin/log/errors_.txt +0 -93
  118. data/lib/cgi-bin/log/kr_command_log.txt +0 -240
  119. data/lib/cgi-bin/log/log.txt +0 -441
  120. data/lib/cgi-bin/log/old_log/log_.txt +0 -15
  121. data/lib/cgi-bin/log/thermo/2010-05-22_thermo.csv +0 -1438
  122. data/lib/cgi-bin/log/thermo/2010-06-12_thermo.csv +0 -3
  123. data/lib/cgi-bin/log/thermo/2010-06-13_thermo.csv +0 -2
  124. data/lib/cgi-bin/log/thermo/2010-06-16_thermo.csv +0 -85
  125. data/lib/cgi-bin/log/thermo/2010-06-17_thermo.csv +0 -285
  126. data/lib/cgi-bin/log/thermo_data.csv +0 -643
  127. data/lib/cgi-bin/log/thermo_graph_loop.txt +0 -1
  128. data/lib/cgi-bin/main.cgi +0 -98
  129. data/lib/cgi-bin/manual_bool01.txt.cgi +0 -42
  130. data/lib/cgi-bin/manual_bool02.txt.cgi +0 -42
  131. data/lib/cgi-bin/post_change_step.cgi +0 -44
  132. data/lib/cgi-bin/post_house1.cgi +0 -44
  133. data/lib/cgi-bin/post_house2.cgi +0 -44
  134. data/lib/cgi-bin/post_kr01.cgi +0 -0
  135. data/lib/cgi-bin/post_kr01_readable.txt.cgi +0 -44
  136. data/lib/cgi-bin/post_kr02.cgi +0 -0
  137. data/lib/cgi-bin/post_kr02_readable.txt.cgi +0 -44
  138. data/lib/cgi-bin/post_kr1_bit.txt.cgi +0 -44
  139. data/lib/cgi-bin/post_kr2_bit.txt.cgi +0 -44
  140. data/lib/cgi-bin/post_last_bit.txt.cgi +0 -44
  141. data/lib/cgi-bin/post_last_thermo_data.cgi +0 -44
  142. data/lib/cgi-bin/post_last_thermo_time.cgi +0 -44
  143. data/lib/cgi-bin/post_manual_bool01.txt.cgi +0 -44
  144. data/lib/cgi-bin/post_manual_bool02.txt.cgi +0 -44
  145. data/lib/cgi-bin/post_reload_flag.cgi +0 -44
  146. data/lib/cgi-bin/post_run_check.cgi +0 -44
  147. data/lib/cgi-bin/post_thermo_define.yml.cgi +0 -44
  148. data/lib/cgi-bin/post_time_array.cgi +0 -44
  149. data/lib/cgi-bin/post_wait_time.cgi +0 -44
  150. data/lib/cgi-bin/post_wet0.cgi +0 -44
  151. data/lib/cgi-bin/post_wet0_drain.cgi +0 -44
  152. data/lib/cgi-bin/post_wet1.cgi +0 -44
  153. data/lib/cgi-bin/post_wet1_drain.cgi +0 -44
  154. data/lib/cgi-bin/post_wet_input.txt.cgi +0 -44
  155. data/lib/cgi-bin/reload_flag.cgi +0 -42
  156. data/lib/cgi-bin/reset_.cgi +0 -0
  157. data/lib/cgi-bin/run_check.cgi +0 -42
  158. data/lib/cgi-bin/set.cgi +0 -33
  159. data/lib/cgi-bin/set_post_yml_each.rb +0 -72
  160. data/lib/cgi-bin/set_yml_cgi_each.rb +0 -0
  161. data/lib/cgi-bin/setting.cgi +0 -0
  162. data/lib/cgi-bin/setting.cgi.1 +0 -0
  163. data/lib/cgi-bin/setting_io.rb +0 -53
  164. data/lib/cgi-bin/thermo_data_graphs.cgi +0 -0
  165. data/lib/cgi-bin/thermo_data_list.cgi +0 -0
  166. data/lib/cgi-bin/thermo_define.yml.cgi +0 -42
  167. data/lib/cgi-bin/thermo_graph.cgi +0 -0
  168. data/lib/cgi-bin/time_array.cgi +0 -42
  169. data/lib/cgi-bin/wait_time.cgi +0 -42
  170. data/lib/cgi-bin/web.rb +0 -39
  171. data/lib/cgi-bin/wet0.cgi +0 -42
  172. data/lib/cgi-bin/wet0_drain.cgi +0 -42
  173. data/lib/cgi-bin/wet1.cgi +0 -42
  174. data/lib/cgi-bin/wet1_drain.cgi +0 -42
  175. data/lib/cgi-bin/wet_input.txt.cgi +0 -42
  176. data/lib/htdocs/css/str.css +0 -89
  177. data/lib/htdocs/favicon.ico +0 -0
  178. data/lib/htdocs/thermo/thermo_data.jpg +0 -0
  179. data/lib/htdocs/thermo/thumb/thermo_data.jpg +0 -0
  180. data/test/tc_bit.rb.1 +0 -15
  181. data/test/tc_bit.rb.2 +0 -21
  182. data/test/ts_agri-controller.rb.1 +0 -8
data/bin/main.bat DELETED
@@ -1,2 +0,0 @@
1
- ruby main.rb
2
- pause
data/bin/main.rb DELETED
@@ -1,23 +0,0 @@
1
-
2
- #$:.unshift("../lib") if $0==__FILE__
3
- require "rubygems"
4
- require "agri-controller"
5
- include AgriController
6
-
7
- Thread.abort_on_exception=true
8
-
9
- #Save program-ID
10
- p pid=Process.pid
11
- open("main_pid","w"){|io| io.print pid.to_s}
12
-
13
- #Set TRAP
14
- trap(:KILL){Process.kill(:QUIT, Process.pid)}
15
-
16
- #config setting
17
- dircopy
18
-
19
- #Run
20
- a=Thread.start{thermo_gruff_loop}
21
- #main loop
22
- kr_run
23
- a.join
data/bin/memo.txt DELETED
@@ -1,4 +0,0 @@
1
- memo
2
- cgi-bin�̕Ґ�����������
3
- �@�@log
4
- �@�@�@old_log
data/bin/server.bat DELETED
@@ -1 +0,0 @@
1
- ruby server.rb
data/bin/server.rb DELETED
@@ -1,4 +0,0 @@
1
- require "rubygems"
2
- require "agri-controller"
3
- include AgriController
4
- webrick_start(root=Dir.pwd)
data/bin/set_config.rb DELETED
@@ -1,47 +0,0 @@
1
- #x="./cgi-bin/log/"
2
- #p File.exist?(x)
3
- require "rubygems"
4
- require "agri-controller"
5
- include AgriController
6
- #require "pp"
7
- list=Dir.glob("cgi-bin/config/*").sort
8
- #if $ARGV ==nil
9
- catch(:exit) do
10
- loop do
11
- x=0
12
- hash={}
13
-
14
- list.each do |file|
15
- #print x.to_s," : ",File.read(file),"\n"
16
- if File.file?(file)
17
- base=File.basename(file)
18
- y=yaml_dbr(base,file)
19
- print x.to_s,":",base,": ",y.inspect,"\n"
20
- #config object to Hash
21
- hash[x.to_s]=[file,y]
22
- x+=1
23
- end
24
- end
25
-
26
- print "<0-#{x-1}>input_number:"
27
- a=gets().chomp.upcase
28
- if hash.has_key?(a)
29
- y2=hash[a]
30
- print y2[0].inspect," # => ",y2[1].inspect,"\nnew_data:"
31
- x=gets.chomp
32
- if x!=""
33
- begin
34
- p yaml_db(File.basename(y2[0]),eval(x),y2[0])
35
- rescue
36
- p yaml_dbr(File.basename(y2[0]),y2[0])
37
- end
38
- sleep 0.3
39
- end
40
- elsif a.include?("E") or a.include?("Q") or a.include?("B")
41
- throw :exit
42
- else
43
- end
44
- a="",x=""
45
- end
46
- end
47
- print "bye!\n"
data/bin/usual.rb DELETED
@@ -1,3 +0,0 @@
1
- require "rubygems"
2
- require "agri-controller"
3
- include AgriController
@@ -1,114 +0,0 @@
1
- #require "serial"
2
- #require "Win32API" #for windows.
3
-
4
- module AgriController
5
- ##
6
- #use Dacs_32bit_I/O_photoMOS_reray on usb_serial_port (win,linux compatible)
7
- module Dacs
8
- #export is a simple IO_command send(set),and recieve(import)
9
- # search com_port(3-19) and communicate
10
- # export("ffffff")# =>"R0FFFFFF&"
11
- #
12
- #com_port number recommended
13
- #com_port=6 #(see system infomation)
14
- # export("ffffff",com_port,0)#return =>"R0FFFFFF&"
15
- # export("000000",com_port,0)#return =>"R0FFFFFF&"
16
- # export("R",com_port,1) #return =>"R883DFFF&"
17
- # export("R",com_port) #return =>"R0FFFFFF&"
18
- #
19
- #hex_6
20
- #ex. # =>"FBD017","ffffff"
21
- #recieve only.# =>"R"
22
- def export(hex_6,com_port=port?,io_port=0,dip=0)
23
- #hex_6
24
- #ex. # =>"FBD017","ffffff"
25
- #recieve only.# =>"R"
26
-
27
- case io_port
28
- #io_port must be io_port*8+dip_switch(on board)
29
- when 1
30
- io_port=8*io_port+dip#2nd word
31
- else#io_port should be 0
32
- io_port=dip#2nd word
33
- end
34
- a=Serial.new
35
- #search COM port 3-9
36
- if a.open(com_port,0,57600,8,0,0,4096,4096)!=-1
37
- command="W#{(io_port).to_s}#{hex_6}&"
38
-
39
- yield command if block_given?
40
- #p command
41
- a.send(command)
42
- sleep 0.04
43
- receive=a.receive
44
- a.close
45
- return receive
46
- else
47
- return false
48
- end
49
- nil
50
- end
51
-
52
- ##
53
- #search ports COM3-19
54
- #if sucsess return int(port number)
55
- #else return nil.
56
- def port?(x=3)
57
- a=Serial.new
58
- #search COM port 3-19
59
- bool=false#serch flag
60
-
61
- while bool==false
62
- x+=1
63
- if x > 20
64
- return nil
65
- end
66
-
67
- if a.open(x,0,57600,8,0,0,108,324) == -1
68
- if x > 20
69
- return nil
70
- end
71
- else
72
- a.send("W0R&")
73
- sleep 0.1
74
- receive=a.receive#should_be "R0xxxxxx&",x=hex
75
- #p receive.split(//).last
76
- #p x
77
- #p receive
78
- if receive
79
- if receive.split(//).last=="&"
80
- if receive.split(//).first=="R"
81
- bool=true
82
- end
83
- end
84
- end
85
- a.close
86
- end
87
- end
88
-
89
- return x
90
- end
91
-
92
- def import(com_port=port?,io_port=0,dip=0)
93
- export("R",com_port,io_port,dip)
94
- end
95
-
96
- def import_bit(com_port=port?,io_port=0,dip=0)
97
-
98
- port_bit=import(com_port=port?,io_port,dip)
99
- if port_bit
100
- import_bits=port_bit.slice(2,6).to_i(16)
101
- else
102
- import_bits=0
103
- end
104
- return import_bits
105
- end
106
- end
107
- end
108
-
109
- if $0==__FILE__
110
- include AgriController::Dacs
111
- p port?
112
- p x=export("FFFFFF",5)
113
- #p x.to_s(16)
114
- end
@@ -1,30 +0,0 @@
1
- #!ruby
2
- #coding:utf-8
3
- $KCODE="s" if RUBY_VERSION < "1.9.0"
4
- module AgriController
5
- module_function
6
- def dircopy(dir=File.dirname($0))
7
-
8
- FileUtils.mkdir(dir) unless File.exist?(dir)
9
- begin
10
- lib=File.dirname(__FILE__)
11
- unless File.exist?(dir+"/cgi-bin")
12
- #p File.dirname(__FILE__)
13
- FileUtils.cp_r(lib+"/../cgi-bin", dest=dir, options = {})
14
- p "create-> /cgi-bin"
15
- end
16
- #rescue
17
- #end
18
-
19
- #begin
20
- unless File.exist?(dir+"/htdocs")
21
- FileUtils.cp_r(src=lib+"/../htdocs", dest=dir, options = {})
22
- p "create-> /htdocs"
23
- end
24
-
25
- #FileUtils.cp_r(Dir.glob(lib+"/bin/*"), dest=dir, options = {})
26
-
27
- #rescue
28
- end
29
- end
30
- end
@@ -1,34 +0,0 @@
1
- #require "serial"
2
- #require "bcc"
3
- module AgriController
4
- module KR
5
- module_function
6
- def export(command,com_port=5)
7
- time=Time.now+10
8
- a=Serial.new
9
- time0=Time.now
10
- if a.open(com_port,1,38400,8,1,0,8,10)!=-1#115200,57600,38400,19200
11
- a.send(command)
12
- sleep 0.4
13
- #x=0
14
- while time > Time.now
15
- #x+=1
16
- receive=a.receive
17
- sleep 0.4
18
- break if ((receive!=nil ))#or (receive==">"))
19
- #p x
20
- end
21
- #return receive
22
- else
23
- receive=false
24
- end
25
- a.close
26
- #p Time.now-time0
27
- return receive
28
- end
29
- end
30
- end
31
-
32
- if $0==__FILE__
33
- p AgriController::KR::export("%01#RCCX00000000**\r",5)# => "%01$RC020013\r"
34
- end
@@ -1,78 +0,0 @@
1
- #require "serial"
2
- #require "bcc"
3
- module AgriController
4
- module_function
5
-
6
- module KR_2
7
- module_function
8
- def export(command,com_port=5)
9
- time=Time.now+10
10
- a=Serial.new
11
- time0=Time.now
12
- if a.open(com_port,1,38400,8,1,0,8,10)!=-1#115200,57600,38400,19200
13
- a.send(command)
14
- sleep 0.4
15
- #x=0
16
- while time > Time.now
17
- #x+=1
18
- receive=a.receive
19
- sleep 0.4
20
- break if ((receive!=nil ))#or (receive==">"))
21
- #p x
22
- end
23
- #return receive
24
- else
25
- receive=false
26
- end
27
- a.close
28
- #p Time.now-time0
29
- return receive
30
- end
31
- end
32
- end
33
- if $0==__FILE__
34
- =begin
35
- # p Bcc::bcc("%01#RCSX0000")
36
- # p Bcc::bcc(">%FD0000048042")
37
- str="%01#WCCY000000000F00**\r"
38
- p x=KR::export(str,5)
39
- str="%02#WCCY00000000FF00**\r"
40
- p x=KR::export(str,5)
41
-
42
- tim=Time.now
43
- str="%01#RCCY00000000**\r"
44
- #str='%01#WCCY000000000F00'
45
- bcc=Bcc::bcc(str)
46
- p command=str#+bcc+"\x0d"
47
- p x=KR::export(command,5)
48
- p x.slice(7,1).to_i(16)
49
- p Time.now-tim
50
- puts
51
- str="%02#RCCY00000000**\r"
52
- #str='%01#WCCY000000000F00'
53
- bcc=Bcc::bcc(str)
54
- p command=str#+bcc+"\x0d"
55
- p x=KR::export(command,5)
56
- p x.slice(6,2).to_i(16)
57
- p Time.now - tim
58
-
59
- #str='%02#WCCY00000000FF00'
60
- str='%01#WCCY000000000500'
61
- bcc=Bcc::bcc(str)
62
- p command=str+bcc+"\x0d"
63
- p KR::export(command,5)
64
- sleep 1
65
- str='%01#WCCY000000000000'
66
- #str='%01#WCCY000000000F00'
67
- bcc=Bcc::bcc(str)
68
- p command=str+bcc+"\x0d"
69
- p KR::export(command,5)
70
- sleep 1
71
- #str='%02#WCCY000000000000'
72
- #str='%01#WCCY000000000F00'
73
- #bcc=Bcc::bcc(str)
74
- #p command=str+bcc+"\x0d"
75
- #p KR::export(command,5)
76
- =end
77
- p KR::export("%01#RCCX00000000**\r",5)# => "%01$RC020013\r"
78
- end
@@ -1,114 +0,0 @@
1
- #!ruby
2
- #coding:utf-8
3
- module AgriController
4
- require "Win32API"
5
- class Serial
6
- GENERIC_READ = 0x80000000
7
- GENERIC_WRITE = 0x40000000
8
- OPEN_EXISTING = 3
9
- FILE_ATTRIBUTE_NORMAL = 0x00000080
10
- FILE_FLAG_OVERLAPPED = 0x40000000
11
- PURGE_TXABORT = 1
12
- PURGE_RXABORT = 2
13
- PURGE_TXCLEAR = 4
14
- PURGE_RXCLEAR = 8
15
-
16
- @@iniflg = 0
17
- def initialize
18
- if @@iniflg != 1
19
- @@wcreatefile = Win32API.new('kernel32','CreateFile','PIIPIII','I');
20
- @@wclosehandle = Win32API.new('kernel32','CloseHandle','I','I')
21
- @@wSetupComm = Win32API.new('kernel32','SetupComm','III','I')
22
- @@wPurgeComm = Win32API.new('kernel32','PurgeComm','II','I')
23
- @@wSetCommTimeouts = Win32API.new('kernel32','SetCommTimeouts','IP','I')
24
- @@wGetCommState = Win32API.new('kernel32','GetCommState','IP','I')
25
- @@wSetCommState = Win32API.new('kernel32','SetCommState','IP','I')
26
- @@wEscapeCommFunction = Win32API.new('kernel32','EscapeCommFunction','II','I')
27
- @@wClearCommError = Win32API.new('kernel32','ClearCommError','IPP','I')
28
- @@wWriteFile = Win32API.new('kernel32','WriteFile','IPIPP','I')
29
- @@wReadFile = Win32API.new('kernel32','ReadFile','IPIPP','I')
30
- @@iniflg = 1
31
- end
32
- @wcrecv = "\x0" * 512
33
- @iinvstep = 1
34
- end
35
-
36
- def send(schar)
37
- ilen = schar.length
38
- wpwadd = [0].pack("I")
39
- soverlapped = [0,0,0,0,0].pack("I*")
40
- @@wWriteFile.call(@iht,schar,ilen,wpwadd,soverlapped)
41
- end
42
-
43
- def receive
44
- dwerr = [0].pack("I")
45
- statcom = [0,0,0].pack("I*")
46
- bi = @@wClearCommError.call(@iht,dwerr,statcom)
47
- if bi != 0
48
- wstatcom = statcom.unpack("I*")
49
- if wstatcom[1] > 0
50
- ilen = wstatcom[1]
51
- dreadsize = [0].pack("I")
52
- roverlapped = [0,0,0,0,0].pack("I*")
53
- @@wReadFile.call(@iht,@wcrecv,ilen,dreadsize,roverlapped)
54
- irlen = dreadsize.unpack("I")
55
- rcvchar = @wcrecv.unpack("a#{irlen[0]}")[0]
56
- end
57
- end
58
- return rcvchar
59
- end
60
-
61
- def open(icomno,idcbflags,ibaud,ibyte,iparity,istopbits,irecbuf,isenbuf)
62
- comno = "COM#{icomno}\0"
63
- @iht = @@wcreatefile.call(comno,GENERIC_READ | GENERIC_WRITE,0,nil,
64
- OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,0)
65
- ir = nil
66
- if @iht != -1
67
- ir = catch(:exit){
68
- bi = @@wSetupComm.call(@iht,irecbuf,isenbuf) #送受信バッファ
69
- throw :exit, -2 if bi == 0
70
- bi = @@wPurgeComm.call(@iht,PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR)
71
- throw :exit, -3 if bi == 0 #バッファクリアー
72
- readIntervalTimeout = 1000
73
- readTotalTimeoutMultiplier = 0
74
- readTotalTimeoutConstant = 0
75
- writeTotalTimeoutMultiplier = 20
76
- writeTotalTimeoutConstant = 1000
77
- commTimeout = [readIntervalTimeout,readTotalTimeoutMultiplier,readTotalTimeoutConstant,
78
- writeTotalTimeoutMultiplier,writeTotalTimeoutConstant]
79
- wCommTimeout = commTimeout.pack("i*")
80
- bi = @@wSetCommTimeouts.call(@iht,wCommTimeout);#time out
81
- throw :exit, -4 if bi == 0
82
- wDCB = ' ' * 8 * 3 + ' ' * 2 * 3 + ' ' * 1 * 8 + ' ' * 2
83
- bi = @@wGetCommState.call(@iht,wDCB) #状態取得
84
- throw :exit, -5 if bi == 0
85
- dFMT = "IIISSSCCCCCCCCS" #DCB構造体
86
- dcb = wDCB.unpack(dFMT)
87
- dcb[2] = idcbflags
88
- dcb[1] = ibaud
89
- dcb[6] = ibyte
90
- dcb[7] = iparity
91
- dcb[8] = istopbits
92
- wDCB = dcb.pack(dFMT)
93
- bi = @@wSetCommState.call(@iht,wDCB) #状態セット
94
- throw :exit, -6 if bi == 0
95
- setdtr = 5
96
- bi = @@wEscapeCommFunction.call(@iht,setdtr) #DTR ON
97
- throw :exit, -7 if bi == 0
98
- }
99
- else
100
- ir = -1
101
- end
102
- return ir
103
- end
104
-
105
- def close
106
- if @iht != -1
107
- clrdtr = 6
108
- bi = @@wEscapeCommFunction.call(@iht,clrdtr) #DTR OFF
109
- @@wclosehandle.call(@iht)
110
- end
111
- end
112
-
113
- end
114
- end