0
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; }
전체 서브 루틴을 한 줄씩 설명하면 다른 사람에게는 도움이되지 않을 것입니다. 당신이 Perl을 다루고 있다면 (철자를 적어 놓으면 PERL이라고 부르지 않습니다) Perl을 배우십시오. 그것은 포괄적 인 매뉴얼을 가지고 있습니다 (그리고 그 코드는 핵심 언어 이외의 것을 사용하는 것으로 보이지 않습니다). 특정 부품으로 인해 문제가 발생하는 경우 여기에서 묻는 것이 더 구체적인 질문입니다. – Quentin
@Quentin 필자는 라인별로 설명 할 필요가 없다. 나는 J-16SDiZ의 대답이이 프로토콜을 "해독"하는데 충분하다고 생각한다. – kmalmur