Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要了解Perl脚本的帮助吗_Perl_Protocols - Fatal编程技术网

需要了解Perl脚本的帮助吗

需要了解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,

我正在使用使用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; }
此函数采用二进制(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的回答足以“解码”这个协议。