Created
June 26, 2012 13:56
-
-
Save pwood/2995925 to your computer and use it in GitHub Desktop.
Home Modbus
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Set up the serial | |
require 'rubygems' | |
require 'rmodbus' | |
# Start Modbus server | |
srv = ModBus::RTUViaTCPServer.new(10002,1, {:host => "0.0.0.0"}) | |
srv.start | |
# Data | |
data = [ 0 ] * 15 | |
srv.holding_registers = data | |
# Set up serial interface | |
mstr = ModBus::RTUClient.new("/dev/ttyS0", 9600) | |
slave = mstr.with_slave(1) | |
# Loop | |
while (true) do | |
# Time Loop | |
time_start = Time.now.to_f | |
# Volts | |
data[0..1] = slave.holding_registers[769..770] | |
# Amps | |
data[2..3] = slave.holding_registers[781..782] | |
# kWh Energy | |
data[4..5] = slave.holding_registers[805..806] | |
# Power Factor | |
data[6] = slave.holding_registers[0x33d][0] | |
# Power Factor Sector | |
data[7] = slave.holding_registers[0x33f][0] | |
# Hz | |
data[8] = slave.holding_registers[0x339][0] | |
# Active Power - Watts | |
data[9..10] = slave.holding_registers[0x319..0x31a] | |
data[11] = slave.holding_registers[0x347][0] | |
# Reactive Power - VAr | |
data[12..13] = slave.holding_registers[0x31d..0x31e] | |
data[14] = slave.holding_registers[0x34c][0] | |
# End Timing | |
time_duration = Time.now.to_f - time_start | |
# Update server | |
srv.holding_registers = data | |
# Notify | |
puts "Updating data, run took #{time_duration} seconds..." | |
puts data.collect { |d| d.to_s }.join(",") | |
# Delay | |
sleep(5 - time_duration) if (time_duration < 5) | |
end | |
# End Modbus Server | |
srv.shutdown |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment