#!/usr/bin/env perl use strict; use warnings; use POSIX qw(strftime); use Tk; my %pid=( DCDC_A_51=>{cmd=>'22 46 5B', cu=>'51', desc=>'DC/DC output current t30', unit=>'A', d=>2, formula=>'sprintf("%.2f", U16(1,4)/16)'}, DCDC_V_51=>{cmd=>'22 46 5C', cu=>'51', desc=>'DC/DC output voltage t30', unit=>'V', d=>2, formula=>'sprintf("%.2f", U16(25,253)/512)', val=>'---'}, DCDC_W_51=>{ desc=>'DC/DC power output', unit=>'W', action=>'sprintf("%.0f", ($pid{DCDC_V_51}{val} * $pid{DCDC_A_51}{val}))', val=>'---'} ); my $mw=MainWindow->new(); $mw->Button(-text=>" Test ", -command=>sub{test()}, -font=>'Helvetica 18 bold', -pady=>20)->pack(); MainLoop; sub test { $pid{DCDC_V_51}{val}=eval($pid{DCDC_V_51}{formula}); print $pid{DCDC_V_51}{val} ."\n"; $pid{DCDC_A_51}{val}=eval($pid{DCDC_A_51}{formula}); print $pid{DCDC_A_51}{val} ."\n"; my $formula=$pid{DCDC_W_51}{action}; $pid{DCDC_W_51}{val}=eval($formula); print $pid{DCDC_W_51}{val} ."\n"; } sub U16 { my($a,$b)=@_; return ($a*256+$b); }