phaserunner 0.1.0 → 0.1.1

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.
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