LazSerial - 二进制数据传输方式

Lazarus 跨 windows, linux, solaris, freebsd, android, ios, macOS,一次写代码可编译成在arm, x86 等CPU结构运行的程序,体积不大,所以安装起来很方便。需要串口的话,在Package下面点选online package,然后在站点上找相应的 package 安装。

1. LazSerial 包

它是串口通讯用的,类似spcomm和mscomm的功能。

把它放在 Form 上,默认是 LazSerial1,属性设置里有波特率等参数设置,没什么特殊的就略过了。

打开串口 LazSerial1.Active := True; , 也可以读它的属性 if LazSerial1.Active = True then begin ...... end; 

关闭串口 LazSerial1.Active := False;

如果使用的是USB-RS232串口,建议将打开串口放在try ... except ... end; 的try下面,防止有时串口线没插而运行程序时出错。

2. 发送进制指令

以简单的 modbus 指令来说吧, 比如 01 03 01 00 00 28 44 28 , 是读设备数据指令, 44 28 是01 03 01 00 00 28 的CRC校验值(可自编函数计算,此处略)。

LazSerial的ASCII写指令 Writeln 好用,但发送上面的 byte 指令不好用,换一个。

Var btSend: array[0..7] of Byte;

      btSend[0]:= $01;
      btSend[1]:= $03;
      btSend[2]:= $01;
      btSend[3]:= $00;
      btSend[4]:= $00;
      btSend[5]:= $28;
      btSend[6]:= $44;
      btSend[7]:= $28; 

上面的 byte 数组赋值后, 用 WriteBuffer 一次性将所有 bytes 发出去。

Form1.LazSerial1.WriteBuffer(btSend, 8);

3. 接收二进制数据

LazSerial的ASCII读指令 Readln 好用,但发送接受上面的 byte 指令返回值不好用,换一个。

LazSerial 组件的 Event 里有 OnRxData ,把它启用了生成个Procedure

procedure TForm1.LazSerial1RxData(Sender: TObject);  

在这个Procedure里面接收数据,用下面的指令。

Form1.LazSerial1.SynSer.RecvByte(0);

RecvByte是LazSerial定义的,0是指Timeout值。

设备每返回一个字节就接收一个字,把接收到的加在一起就是返回的全部字节。

我说一下自己体会的要点,

大家都是高手,还要虚心向大家学习!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值