首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

一对轻巧小巧的收发器程序(ruby实现)

2012-11-25 
一对轻便小巧的收发器程序(ruby实现)单位由于安全考虑需要做内外网彻底隔离,在内网有数据库服务器DB_SVR,

一对轻便小巧的收发器程序(ruby实现)

    单位由于安全考虑需要做内外网彻底隔离,在内网有数据库服务器DB_SVR,

外网一台WEB_SVR需要将数据库中的数据显示在网页上。于是中间插入一台

“中转”服务器,如下图所示:

一对轻巧小巧的收发器程序(ruby实现)

writer.rb放在中转服务器上,负责将数据从DB_SVR取出,然后整理格式通过

串口传递给WEB_SVR上的reader.rb,后者将数据解析成单条记录最后插入

WEB_SVR的SQL数据库中,供xxx.asp显示之用。下面上代码:


writer.rb

#hb table write by hopy 2012 require 'win32ole'HB_ARR_BEGIN = "HB_ARR_BEGIN"HB_ARR_END = "HB_ARR_END"HB_DEP_BEGIN = "HB_DEP_BEGIN"HB_DEP_END = "HB_DEP_END"`mode com1 9600,N,8,1`$com = File.open("com1")conn_str = "driver={SQL Server};database=db_Anhui;server=127.0.0.1,1433;uid=xxx;pwd=xxx"$sql = WIN32OLE.new('ADODB.Connection')$sql.Open(conn_str)is_geting_arr = falseis_geting_dep = false$idx_arr = 0$idx_dep = 0$interval = 5def add_arr(str)r = str.split(" ")print "#{$idx_arr+=1} ";p r$sql.Execute("INSERT INTO InTable VALUES('#{r[0]}','#{r[1]}','#{r[2]}','#{r[3]}')")enddef add_dep(str)r = str.split(" ")print "#{$idx_dep+=1} ";p r$sql.Execute("INSERT INTO OutTable VALUES('#{r[0]}','#{r[1]}','#{r[2]}','#{r[3]}')")endloop do  begin    case str = $com.getswhen /#{HB_ARR_BEGIN}/$internal = 0.2is_geting_arr = true$sql.Execute("DELETE from InTable")when /#{HB_ARR_END}/$internal = 0.2is_geting_arr = false$idx_arr = 0when /#{HB_DEP_BEGIN}/$internal = 0.2is_geting_dep = true$sql.Execute("DELETE from OutTable")when /#{HB_DEP_END}/$internal = 10is_geting_dep = false$idx_dep = 0else(sleep $interval;next) if !str || str == "" if is_geting_arradd_arr(str)elsif is_geting_depadd_dep(str)else#do nothing!endendsleep $internal  rescue =>e    puts("ERROR : #{e.message} @ #{Time.now},retry it...")    sleep(60)    retry  ensure    #nothing  endend

串口操作使用了最原始的system功能,尽管ruby串口的库很多,但是借助

最简单的实现而同样很好的完成目的,不是很美吗?: )

热点排行