需要了解Perl脚本的帮助吗
我正在使用使用PC链路数据协议的万用表VA18B进行串行通信。 问题是我找不到该协议的任何文档。我唯一得到的是一个对帧进行解码的Perl脚本(据我所知,帧由14个字节组成)。不幸的是,对于一个根本不懂Perl的人来说,这个脚本相当复杂 有人能解释一下下面的代码吗 sub decode_bin_str { my ($AC, $DC, $auto, $unknown1, $minus, $digi1, $dot1, $digi2, $dot2, $digi3, $dot3, $digi4, $micro, $unknown2, $kilo, $diode_test, $milli, $percent, $mega, $cont_check, $unknown3, $ohm, $rel, $hold, $amp, $volt, $hz, $unknown4, $min, $unknown5, $celsius, $max) = shift =~ /^(.)(.)(.)(.)(.)(.{7})(.)(.{7})(.)(.{7})(.)(.{7}) (.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.) *$/x; my %digi = ( "1111101" => 0, "0000101" => 1, "1011011" => 2, "0011111" => 3, "0100111" => 4, "0111110" => 5, "1111110" => 6, "0010101" => 7, "1111111" => 8, "0111111" => 9, ); my $val = ($minus ? "-" : "") . $digi{$digi1} . ($dot1 ? "." : "") . $digi{$digi2} . ($dot2 ? "." : "") . $digi{$digi3} . ($dot3 ? "." : "") . $digi{$digi4}; my $flags = join(" ", $AC ? "AC" : (), $DC ? "DC" : (), $auto ? "auto" : (), $diode_test ? "diode_test" : (), $cont_check ? "cont_check" : (), $rel ? "rel" : (), $hold ? "hold" : (), $min ? "min" : (), $max ? "max" : ()); my $unit = ($micro ? "u" : "") . ($kilo ? "k" : "") . ($milli ? "m" : "") . ($mega ? "M" : "") . ($percent ? "%" : "") . ($ohm ? "Ohm" : "") . ($amp ? "A" : "") . ($volt ? "V" : "") . ($hz ? "Hz" : "") . ($celsius ? "C" : ""); $val, $flags, $unit; } 子解码_bin_str{ 我的($AC、$DC、$auto、$unknown1、, $减、$digi1、$dot1、$digi2、$dot2、$digi3、$dot3、$digi4、, $micro、$unknown2、$kilo、$diode_测试、, $milli,$percent,$mega,$cont\u check, $unknown3、$ohm、$rel、$hold、, $amp、$volt、$hz、$unknown4、, $min、$unknown5、$CELSIC、$max)=班次=~ /^(.)(.)(.)(.)(.)(.{7})(.)(.{7})(.)(.{7})(.)(.{7}) ()()()()()()()()()()()(); 我的%digi=( "1111101" => 0, "0000101" => 1, "1011011" => 2, "0011111" => 3, "0100111" => 4, "0111110" => 5, "1111110" => 6, "0010101" => 7, "1111111" => 8, "0111111" => 9, ); my$val=($减?”-“:”)。$digi{$digi1}。($dot1?”:”)。 $digi{$digi2}。($dot2?。“:”)。 $digi{$digi3}。($dot3?。“:”)。 $digi{$digi4}; my$flags=join(“,$AC?”AC):(), $DC?“DC”:(), $auto?“auto”:(), $二极管测试?“二极管测试”:(), $cont_check?“cont_check”:(), $rel?“rel”:(), $hold?“hold”:(), $min?“min”:(), $max?“max”:()); 我的$unit=($micro?“u”:“”)。 ($kilo?“k”:“)。 ($milli?“m”:“)。 ($mega?“M”:“)。 ($percent?”%:“”)。 ($ohm?“ohm”:“)。 ($amp?“A”:“)。 ($volt?“:”)。 ($hz?“hz”:“)。 ($摄氏度?“:”); $val,$flags,$unit; }需要了解Perl脚本的帮助吗,perl,protocols,Perl,Protocols,我正在使用使用PC链路数据协议的万用表VA18B进行串行通信。 问题是我找不到该协议的任何文档。我唯一得到的是一个对帧进行解码的Perl脚本(据我所知,帧由14个字节组成)。不幸的是,对于一个根本不懂Perl的人来说,这个脚本相当复杂 有人能解释一下下面的代码吗 sub decode_bin_str { my ($AC, $DC, $auto, $unknown1, $minus, $digi1, $dot1, $digi2, $dot2, $digi3, $dot3,
此函数采用二进制(0/1)字符串。正则表达式是一种模式:
/^(.)(.).....(.{7})......
(.)
表示一个字符,(.{7})
表示其中的7个字符
my ($AC, $DC, $auto, $unknown1.......= shift =~ /^(.)(.)(.)(.) ....
意味着,给定1011….
作为输入,AC
将是1
,DC
将是0
,auto
/未知n1
将是1
数字1/2/3/4是数字,dot1
。dot4
告诉您小数点的位置
自动
/二极管测试
/。。说模式
欧姆/伏特
/。。。。说出你正在使用的单位
剩下的很简单 此函数采用二进制(0/1)字符串。正则表达式是一种模式:
/^(.)(.).....(.{7})......
(.)
表示一个字符,(.{7})
表示其中的7个字符
my ($AC, $DC, $auto, $unknown1.......= shift =~ /^(.)(.)(.)(.) ....
意味着,给定1011….
作为输入,AC
将是1
,DC
将是0
,auto
/未知n1
将是1
数字1/2/3/4是数字,dot1
。dot4
告诉您小数点的位置
自动
/二极管测试
/。。说模式
欧姆/伏特
/。。。。说出你正在使用的单位
剩下的很简单 一行一行地解释整个子例程,除了您之外,对任何人都不会有多大帮助。如果您正在处理Perl(注意拼写,它不是“Perl”),那么请学习Perl。它有一个全面的手册(而且代码似乎没有使用核心语言之外的任何东西)。如果某个特定的部分给你带来了问题,那么这里有必要问一个更具体的问题。@Quentin我不需要逐行解释。我认为J-16SDiZ的回答足以“解码”这个协议。一行一行地解释整个子程序,除了你之外,对任何人都没有多大帮助。如果您正在处理Perl(注意拼写,它不是“Perl”),那么请学习Perl。它有一个全面的手册(而且代码似乎没有使用核心语言之外的任何东西)。如果某个特定的部分给你带来了问题,那么这里有必要问一个更具体的问题。@Quentin我不需要逐行解释。我认为J-16SDiZ的回答足以“解码”这个协议。