phaserunner 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 87c1d0249d18a43fb7e048a536af0bc908ab5dbe
4
- data.tar.gz: 2bb48bc573a75916c5e2b2429474c5168f44b092
3
+ metadata.gz: b1dcf2ac4e83fe77fc1eb60f4992253de50c9ace
4
+ data.tar.gz: 91728742cf1a696bc2570ee28d0dde63b9f9e1da
5
5
  SHA512:
6
- metadata.gz: 708604d673edf3de8125d7fc87ee1bf546b2827c911a7deecee69948ac741ec917ca73270d578e0c5b5571c6519387fe9445091f40d4fc75fffa56ddaadce8ae
7
- data.tar.gz: 077551a923681d39bf69c82440ba29f21f105ba8426b611546e07aa4ecd226721164b6e8d0903ef4f2b4e37ed311afed2e879353ab9368af6d0f05cf77a79a3e
6
+ metadata.gz: ca1bdc6f822340a8a0033411951b4fdcb7b3e1c5469749e671ac5461f97576936ec2c7667708eaa861c30e363586332205ac54995545e1f1a96b91c5152cf41d
7
+ data.tar.gz: fc303b29ccee47bd3e1504925ced6935215f21b7d780106b7e2844b05e2acab4f088a93d01dbeb13f0c037b7e58585de8cffce571decff9ef424ca0ee648d08f
@@ -3,17 +3,23 @@ require 'json'
3
3
  require 'pp'
4
4
 
5
5
  module Phaserunner
6
+ # Handle Ctl-C exit
7
+ trap "SIGINT" do
8
+ puts "Exiting"
9
+ exit 130
10
+ end
6
11
 
7
12
  class Cli
8
13
  attr_reader :modbus
9
14
  attr_reader :dict
10
15
  attr_reader :loop
16
+ attr_reader :quiet
11
17
  attr_reader :phaserunnerOutFd
12
18
 
13
19
  include GLI::App
14
20
 
15
21
  def main
16
- program_desc 'Read values from the Grin PhaseRunner Controller for logging'
22
+ program_desc 'Read values from the Grin PhaseRunner Controller primarily for logging'
17
23
 
18
24
  version Phaserunner::VERSION
19
25
 
@@ -42,10 +48,12 @@ module Phaserunner
42
48
  flag [:d, :dictionary_file]
43
49
 
44
50
  desc 'Loop the command n times'
45
- default_value 10
51
+ default_value :forever
46
52
  arg 'loop', :optional
47
- flag [:l, :loop], type: Integer
48
- # flag [:l, :loop], :desc => 'Loop the command n times', :type => Integer
53
+ flag [:l, :loop]
54
+
55
+ desc 'Do not output to stdout'
56
+ switch [:q, :quiet]
49
57
 
50
58
  desc 'Read a single or multiple adjacent registers from and address'
51
59
  arg_name 'register_address'
@@ -59,33 +67,28 @@ module Phaserunner
59
67
  address = args[0].to_i
60
68
  count = args[1].to_i
61
69
  node = dict[address]
62
- puts modbus.range_address_header(address, count).join(",")
70
+ puts modbus.range_address_header(address, count).join(",") unless quiet
63
71
  (0..loop).each do |i|
64
- puts modbus.read_raw_range(address, count).join(",")
72
+ puts modbus.read_raw_range(address, count).join(",") unless quiet
65
73
  end
66
74
  end
67
75
  end
68
76
 
69
- desc 'Logs a range plus bulk sparse set of registers with multiple addresses to stdout and file'
77
+ desc 'Logs interesting Phaserunner registers to stdout and file'
70
78
  long_desc %q(Logs interesting Phaserunner registers to stdout and a CSV file. File name in the form: phaserunner.#{Time.now.strftime('%Y-%m-%d_%H-%M-%S')}.csv)
71
79
  command :log do |log|
72
- log.desc 'Do not output to stdout'
73
- log.switch [:q, :quiet]
74
80
  log.action do |global_options, options, args|
75
- quiet = options[:quiet]
76
- start_address = 258
77
- count = 12
78
- misc_addresses =[277,334]
79
- header = modbus.bulk_log_header(start_address, count, misc_addresses)
80
- data = modbus.bulk_log_data(start_address, count, misc_addresses)
81
+ header = modbus.bulk_log_header
82
+ data = modbus.bulk_log_data
81
83
 
84
+ # Generate and output header line
82
85
  hdr = %Q(Timestamp,#{header.join(",")})
83
- puts hdr if not quiet
86
+ puts hdr unless quiet
84
87
  phaserunnerOutFd.puts hdr
85
88
 
86
89
  (0..loop).each do |i|
87
90
  str = %Q(#{Time.now.utc.round(10).iso8601(6)},#{data.join(",")})
88
- puts str if not quiet
91
+ puts str unless quiet
89
92
  phaserunnerOutFd.puts str
90
93
  sleep 0.2
91
94
  end
@@ -100,7 +103,13 @@ module Phaserunner
100
103
  # on that command only
101
104
  @modbus = Modbus.new(global)
102
105
  @dict = @modbus.dict
103
- @loop = global[:loop]
106
+ # Handle that loop can be :forever or an Integer
107
+ if global[:loop] == :forever
108
+ @loop = Float::INFINITY
109
+ else
110
+ @loop = global[:loop].to_i
111
+ end
112
+ @quiet = global[:quiet]
104
113
  @phaserunnerOutFd = File.open("phaserunner.#{Time.now.strftime('%Y-%m-%d_%H-%M-%S')}.csv", 'w')
105
114
  end
106
115
 
@@ -5,6 +5,13 @@ require 'asi_bod'
5
5
  module Phaserunner
6
6
  # Methods for communicating with the Modbus interface to the Phaserunner
7
7
  class Modbus
8
+ # The registers of interest for logging
9
+ # First a range
10
+ REGISTERS_START_ADDRESS = 258
11
+ REGISTERS_COUNT = 12
12
+ # Sparse Registers of interest
13
+ REGISTERS_MISC =[277,334]
14
+
8
15
  # Contains the Grin Phaesrunner Modbus Dictionary
9
16
  # @params [Hash<Integer, Hash>] dict The Dictionary with a key for each register address
10
17
  # @option dict [String] :name Name of the register
@@ -18,6 +25,10 @@ module Phaserunner
18
25
  # @option dict [Stirng] :type Further info on how to interpret the value
19
26
  attr_reader :dict
20
27
 
28
+ attr_reader :registers_start_address
29
+ attr_reader :registers_count
30
+ attr_reader :registers_misc
31
+
21
32
  # Returns the path to the default BODm.json file
22
33
  def self.default_file_path
23
34
  AsiBod::Bod.default_file_path
@@ -36,6 +47,9 @@ module Phaserunner
36
47
  opts.each_pair do |name, value|
37
48
  self.class.send(:attr_accessor, name)
38
49
  instance_variable_set("@#{name}", value)
50
+ @registers_start_address = REGISTERS_START_ADDRESS
51
+ @registers_count = REGISTERS_COUNT
52
+ @registers_misc = REGISTERS_MISC
39
53
  end
40
54
 
41
55
  @bod = AsiBod::Bod.new(bod_file: dictionary_file)
@@ -70,20 +84,20 @@ module Phaserunner
70
84
  end
71
85
 
72
86
  # More optimized data fetch. Gets an address range + misc individual addresses
73
- # @param start_address [Integer] Initial address of the range
74
- # @param count [Integer] Count of addresses in range
75
- # @param misc_addresses [Array<Integer>] List of misc individual addresses
87
+ # @param start_address [Integer] Initial address of the range. Optional, has a default
88
+ # @param count [Integer] Count of addresses in range. Optional, has a default
89
+ # @param misc_addresses [Array<Integer>] List of misc individual addresses. Optional, has a default
76
90
  # @return [Array<Integer>] List of the register values in the order requested
77
- def bulk_log_data(start_address, count, misc_addresses)
91
+ def bulk_log_data(start_address=registers_start_address, count=registers_count, misc_addresses=registers_misc)
78
92
  read_raw_range(start_address, count) + read_addresses(misc_addresses)
79
93
  end
80
94
 
81
95
  # Get the headers for the bulk_log data
82
- # @param start_address [Integer] Initial address of the range
83
- # @param count [Integer] Count of addresses in range
84
- # @param misc_addresses [Array<Integer>] List of misc individual addresses
96
+ # @param start_address [Integer] Initial address of the range. Optional, has a default
97
+ # @param count [Integer] Count of addresses in range. Optional, has a default
98
+ # @param misc_addresses [Array<Integer>] List of misc individual addresses. Optional, has a default
85
99
  # @return [Array<String>] Array of the headers
86
- def bulk_log_header(start_address, count, misc_addresses)
100
+ def bulk_log_header(start_address=registers_start_address, count=registers_count, misc_addresses=registers_misc)
87
101
  range_address_header(start_address, count) +
88
102
  bulk_addresses_header(misc_addresses)
89
103
  end
@@ -1,3 +1,3 @@
1
1
  module Phaserunner
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phaserunner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert J. Berger