• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

perl串口通信实例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

使用串口通信,在备机端使用如下脚本检测来自主机的心跳信号,一旦未接受次数超过指定记数,备机认为主机DOWN机,自动设置为主机的网络参数,顶替主机提供服务。

# ! perl -w

use  strict;
use  Win32 :: SerialPort;

my   $port   =   ' COM2 ' #  serail port name registried in OS
my   $count   =   0 #  count number of heartbeat-receiving failture
my   $max_count   =   5 #  max fail count to be tolerated 
my   $interface   =   '

# ---------------------------------- 
# 接口 IP 配置         
# ---------------------------------- 
pushd interface ip


# "local" 的接口 IP  配置

set address name="local" source=static addr=192.168.6.185 mask=255.255.255.0
set address name="local" gateway=192.168.6.65 gwmetric=0
set dns name="local" source=static addr=192.168.6.112 register=PRIMARY
add dns name="local" addr=192.168.6.201 index=2
set wins name="local" source=static addr=none


popd
# 接口 IP 配置结束


' #  net inetrface config information

sub  errlog {
    
# log the failtrue occuring time
    
    
open  ERR ,   ' >>err.log ' ;
    
my   @time   =   localtime ();
    
my   $time   =   sprintf ( " %d " ,   $time [ 5 +   1900
                        
.   ' - '  
                        
.   sprintf ( " %d " ,   $time [ 4 +   1 )
                        
.   ' - '
                        
.   " $time[3] "
                        
.   '   '
                        
.   sprintf ( " %.2d " ,   $time [ 2 ])
                        
.   ' : '
                        
.   sprintf ( " %.2d " ,   $time [ 1 ])
                        
.   ' : '
                        
.   sprintf ( " %.2d " ,   $time [ 0 ]);
    
print  ERR  $time . " \n " ;
    
close  ERR;
}

sub  ipchange {
    
#  change ip addrress
    
    
open  TMP ,   ' >tmp ' ;
    
print  TMP  $interface ;
    
close  TMP;
    
    
eval  {
        
system   ' netsh -f tmp ' ;
        
unlink   ' tmp ' ;
    };
    
    
if  ($@) { return   0 ;}
    
return   1 ;
}

my   $ob   =  Win32 :: SerialPort -> new( $port ) or  die   " CANNOT OPEN $port " ;
#  open serial port 

eval  {
    
#  set serial port properties
    
    
$ob -> baudrate( 9600 );
    
$ob -> parity( ' none ' );
    
$ob -> databits( 8 );
    
$ob -> stopbits( 1 );
    
$ob -> handshake( ' none ' );
};
    
if  ($@) { die   ' SET FAILED ' ;}

$ob -> write_settings or  die   " CANNOT WRITE $port DRIVER " ;
#  write to port driver to make it active

while  ( 1 ) {
    
#  loop receiving heartbeat from remote machine
    # change ip address after designated count of failture 

    
    
my  ( $length ,   $result =   $ob -> read ( 10 );
    
    
if  ( $result ) { 
        
$count   =   0 ;
    } 
elsif  ( $count   ==   $max_count ) {
        errlog();
        
if  (not ipchange()) {  print   ' IP CHANGE FAILED ' ; }
        
last ;
    }    
else  { 
        
$count ++ ;
    }
    
    
sleep ( 1 );
}

undef   $ob ;

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
perl优化发布时间:2022-07-22
下一篇:
mysql初始化提示安装perl发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap