Module: LMG_Modbus_Client

Included in:
Modbus485, ModbusTCP
Defined in:
lib/LMG_modbus.rb

Overview

This module subtracts 1 from each register address as rmodbus is 1 index based and Liebert is 0 index based.

Instance Method Summary collapse

Instance Method Details

#process_test_case(addr, val) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/LMG_modbus.rb', line 107

def process_test_case(addr,val)
  register_array = register_type(addr)
  print "Writing value #{val.to_i} to register #{register_array[0]}..."
  result = write_single_register(register_array[0].to_i,val.to_i,2)
  if result.is_a?(Integer) == FALSE then
    puts "An error occured"
    return result
  end
  result = read_input_registers(register_array[0].to_i,register_array[2].to_i)
  puts " result of read is #{result}"
  return result
end

#read_coils(addr, ncoils) ⇒ Object



71
72
73
# File 'lib/LMG_modbus.rb', line 71

def read_coils(addr, ncoils)
  super(addr-1,ncoils)
end

#read_discrete_inputs(addr, ncoils) ⇒ Object



74
75
76
# File 'lib/LMG_modbus.rb', line 74

def read_discrete_inputs(addr, ncoils)
  super(addr-1,ncoils)
end

#read_holding_registers(addr, nreg) ⇒ Object



77
78
79
# File 'lib/LMG_modbus.rb', line 77

def read_holding_registers(addr, nreg)
  super(addr-1,nreg)
end

#read_input_registers(addr, nreg) ⇒ Object



80
81
82
83
84
85
86
# File 'lib/LMG_modbus.rb', line 80

def read_input_registers(addr, nreg)
  begin
  super(addr-1,nreg)
  rescue Exception => e
    e.message
  end
end

#read_time_register(addr) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
# File 'lib/LMG_modbus.rb', line 119

def read_time_register(addr)
  epoch = ''
  self.read_input_registers(addr,2).each do |reg|
        val = reg.to_i.to_s(2)
        while val.size < 16
          val = val.insert(0,'0')
        end
        epoch << val
    end
  puts Time.at(epoch.to_i(2)).getgm
end

#write_multiple_coils(addr, val, delay = 1) ⇒ Object



99
100
101
102
# File 'lib/LMG_modbus.rb', line 99

def write_multiple_coils(addr, val, delay=1)
  super(addr-1,val)
  sleep(delay)
end

#write_multiple_registers(addr, val, delay = 1) ⇒ Object



103
104
105
106
# File 'lib/LMG_modbus.rb', line 103

def write_multiple_registers(addr, val, delay=1)
  super(addr-1,val)
  sleep(delay)
end

#write_single_coil(addr, val, delay = 1) ⇒ Object



87
88
89
90
# File 'lib/LMG_modbus.rb', line 87

def write_single_coil(addr, val,delay=1)
  super(addr-1,val)
  sleep(delay)
end

#write_single_register(addr, val, delay = 1) ⇒ Object



91
92
93
94
95
96
97
98
# File 'lib/LMG_modbus.rb', line 91

def write_single_register(addr, val, delay=1)
  begin
  super(addr-1,val)
  sleep(delay)
  rescue Exception => e
    e.message
  end
end

#write_time_register(addr, val) ⇒ Object



130
131
132
133
134
135
136
137
# File 'lib/LMG_modbus.rb', line 130

def write_time_register(addr,val) 
  time = val.to_i.to_s(2)
  string_array = time.split(//) #Convert to an array
  while string_array.size < 32
    string_array.unshift(0) ##Pad with leading 0's to make 32 bit
  end 
  write_multiple_registers(addr, Array[string_array[0..15].join.to_i(2), string_array[16..31].join.to_i(2)])
end