0
私はPC Linkデータプロトコルを使用するマルチメーターVA18Bとのシリアル通信に取り組んでいます。 問題は、このプロトコルのドキュメントを見つけることができないことです。私が持っている唯一のものは、フレームをデコードするPerlスクリプトです(私が知る限り、フレームは14バイトで構成されています)。残念ながら、このスクリプトはPerlをまったく知らない人にとってはかなり複雑です。は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; }
サブルーチン全体の行ごとの説明は、あなた以外の人にとってはあまり役に立ちません。あなたがPerlを扱っているなら(スペルに注意してください、それは 'PERL'と呼ばれません)、Perlを学びます。それは包括的なマニュアルを持っています(そしてそのコードはコア言語以外のものを使用するようには見えません)。特定のパーツが問題を引き起こしている場合は、より具体的な質問がここで質問する価値があります。 – Quentin
@Quentin私は実際に行ごとに説明する必要はありません。私はJ-16SDiZの答えがこのプロトコルを「解読」するのに十分であると思います。 – kmalmur