Class: PlcAccess::PlcDevice
- Inherits:
-
Object
- Object
- PlcAccess::PlcDevice
show all
- Defined in:
- lib/plc_access/protocol/plc_device.rb
Constant Summary
collapse
- NUMBER_TYPE_DEC =
0
- NUMBER_TYPE_DEC_HEX =
1
- NUMBER_TYPE_HEX =
2
- ESC_SUFFIXES =
%w[X Y M - C T L SC CC TC D - CS TS H SD].freeze
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(a, b = nil) ⇒ PlcDevice
Returns a new instance of PlcDevice.
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# File 'lib/plc_access/protocol/plc_device.rb', line 51
def initialize(a, b = nil)
@suffix = nil
@value = 0
case a
when Integer
@suffix = ESC_SUFFIXES[a]
@number = b
when String, Symbol
a = a.to_s if b
@suffix = a.upcase
@number = b
else
/([A-Z]+)?([0-9A-F]+)/i =~ a
@suffix = (::Regexp.last_match(1) || '').upcase
case number_type
when NUMBER_TYPE_DEC_HEX
n = ::Regexp.last_match(2).to_i
@number = (n / 100) * 16 + (n % 100)
when NUMBER_TYPE_HEX
@number = ::Regexp.last_match(2).to_i(16)
else
@number = ::Regexp.last_match(2).to_i
end
end
end
end
|
Instance Attribute Details
#number ⇒ Object
Returns the value of attribute number.
28
29
30
|
# File 'lib/plc_access/protocol/plc_device.rb', line 28
def number
@number
end
|
#suffix ⇒ Object
Returns the value of attribute suffix.
28
29
30
|
# File 'lib/plc_access/protocol/plc_device.rb', line 28
def suffix
@suffix
end
|
#value ⇒ Object
Also known as:
word
Returns the value of attribute value.
29
30
31
|
# File 'lib/plc_access/protocol/plc_device.rb', line 29
def value
@value
end
|
Class Method Details
.program_area_device ⇒ Object
46
47
48
|
# File 'lib/plc_access/protocol/plc_device.rb', line 46
def program_area_device
@program_area_device ||= new 'PRG0'
end
|
.status_from_plc_device ⇒ Object
42
43
44
|
# File 'lib/plc_access/protocol/plc_device.rb', line 42
def status_from_plc_device
@status_from_plc_device ||= new 'SD1'
end
|
.status_to_plc_device ⇒ Object
38
39
40
|
# File 'lib/plc_access/protocol/plc_device.rb', line 38
def status_to_plc_device
@status_to_plc_device ||= new 'SD0'
end
|
Instance Method Details
#+(other) ⇒ Object
112
113
114
|
# File 'lib/plc_access/protocol/plc_device.rb', line 112
def +(other)
device_by_suffix_number suffix, number + other
end
|
#-(other) ⇒ Object
116
117
118
|
# File 'lib/plc_access/protocol/plc_device.rb', line 116
def -(other)
device_by_suffix_number suffix, [number - other, 0].max
end
|
#bit_device? ⇒ Boolean
108
109
110
|
# File 'lib/plc_access/protocol/plc_device.rb', line 108
def bit_device?
suffixes_for_bit.include? @suffix
end
|
#bool ⇒ Object
135
136
137
138
139
140
141
142
|
# File 'lib/plc_access/protocol/plc_device.rb', line 135
def bool
case @value
when Integer
@value != 0
else
!!@value
end
end
|
#bool=(v) ⇒ Object
144
145
146
|
# File 'lib/plc_access/protocol/plc_device.rb', line 144
def bool=(v)
@value = v
end
|
#device_by_suffix_number(suffix, number) ⇒ Object
NOTE: override at subclass
It should get from plc
100
101
102
|
# File 'lib/plc_access/protocol/plc_device.rb', line 100
def device_by_suffix_number(suffix, number)
self.class.new suffix, number
end
|
#device_code ⇒ Object
177
178
179
|
# File 'lib/plc_access/protocol/plc_device.rb', line 177
def device_code
ESC_SUFFIXES.index @suffix
end
|
120
121
122
|
# File 'lib/plc_access/protocol/plc_device.rb', line 120
def input?
suffixes_for_input.include? @suffix
end
|
#name ⇒ Object
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
# File 'lib/plc_access/protocol/plc_device.rb', line 79
def name
case number_type
when NUMBER_TYPE_DEC
"#{@suffix}#{@number}"
when NUMBER_TYPE_DEC_HEX
a = [@number / 16, @number % 16]
ns = begin
s = a.last.to_s.rjust(2, '0')
s = a.first.to_s + s unless a.first.zero?
s
end
"#{@suffix}#{ns}"
when NUMBER_TYPE_HEX
ns = @number.to_s(16).upcase
ns = "0#{ns}" unless /^[0-9]/ =~ ns
"#{@suffix}#{ns}"
end
end
|
#next_device ⇒ Object
104
105
106
|
# File 'lib/plc_access/protocol/plc_device.rb', line 104
def next_device
device_by_suffix_number @suffix, @number + 1
end
|
#reset ⇒ Object
181
182
183
|
# File 'lib/plc_access/protocol/plc_device.rb', line 181
def reset
@value = 0
end
|
#set_text(value, len = 8) ⇒ Object
162
163
164
165
166
167
168
169
170
171
|
# File 'lib/plc_access/protocol/plc_device.rb', line 162
def set_text(value, len = 8)
value = value[0, len]
value << "\00" unless value.length.even?
a = value.unpack('n*')
d = self
a.each do |v|
d.value = v
d = d.next_device
end
end
|
#text(len = 8) ⇒ Object
150
151
152
153
154
155
156
157
158
159
160
|
# File 'lib/plc_access/protocol/plc_device.rb', line 150
def text(len = 8)
n = (len + 1) / 2
d = self
a = []
n.times do
a << d.value
d = d.next_device
end
s = a.pack('n*').split("\x00").first
s ? s[0, len] : ''
end
|
#text=(value) ⇒ Object
173
174
175
|
# File 'lib/plc_access/protocol/plc_device.rb', line 173
def text=(value)
set_text value
end
|