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 +4 -4
- data/lib/phaserunner/main.rb +27 -18
- data/lib/phaserunner/modbus.rb +22 -8
- data/lib/phaserunner/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1dcf2ac4e83fe77fc1eb60f4992253de50c9ace
|
4
|
+
data.tar.gz: 91728742cf1a696bc2570ee28d0dde63b9f9e1da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca1bdc6f822340a8a0033411951b4fdcb7b3e1c5469749e671ac5461f97576936ec2c7667708eaa861c30e363586332205ac54995545e1f1a96b91c5152cf41d
|
7
|
+
data.tar.gz: fc303b29ccee47bd3e1504925ced6935215f21b7d780106b7e2844b05e2acab4f088a93d01dbeb13f0c037b7e58585de8cffce571decff9ef424ca0ee648d08f
|
data/lib/phaserunner/main.rb
CHANGED
@@ -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
|
51
|
+
default_value :forever
|
46
52
|
arg 'loop', :optional
|
47
|
-
flag [:l, :loop]
|
48
|
-
|
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
|
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
|
-
|
76
|
-
|
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
|
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
|
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
|
-
|
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
|
|
data/lib/phaserunner/modbus.rb
CHANGED
@@ -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
|
data/lib/phaserunner/version.rb
CHANGED