免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5611 | 回复: 1
打印 上一主题 下一主题

如果向串口发送16进制编码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-12 16:07 |只看该作者 |倒序浏览
本帖最后由 kingdisc666 于 2013-08-12 16:10 编辑

用Device::SerialPort 模块向串口设备写文本,串口设备写数据要遵循一定的协议格式

比如(按照以下16进制格式写入,GB2312编码):

5A 01 68 13 01 00 01 06 01 ...



代码如下,先将$string字符串转换为16进制GB2312编码(如46  51  43  54  c2  df  bc  ad  b1 ...),然后通过Device::SerialPort的$ob->write($strings)发送,

如何让$ob->write($strings)以16进制发送,捕捉后发现无法正常显示


#!/usr/bin/perl -w
require 5.003;
use Device::SerialPort qw( ARAM :STAT 0.07 );
use Encode qw(from_to);
$string="逻辑备库应用归档的情况;严重;notify-service-by-email;CRITICAL - --ldg ORA-01034: ORACLE not availabl";
from_to($string, "utf8", "GB2312";

sub print_hex {
    my ($str) = @_;
    my @arr = split //, $str;
    for my $c (@arr) {
        printf " %x ", ord($c);
    }
    printf "\n";
}


$string=print_hex("$string";


my $ob = new Device::SerialPort("/dev/ttyS0" or die "open com failed";



     $ob -> baudrate(115200);
     $ob -> parity("NONE";
     $ob -> databits(;
     $ob -> stopbits(1);

     $ob -> write_settings;

     $ob ->datatype('raw');
     $ob -> lookclear;
     $ob->write($strings);

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
2 [报告]
发表于 2013-08-19 00:15 |只看该作者
这个可能需要用 pack 将字符流转换成字节流
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP