• 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值。

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

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

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

  • 相关阅读:
    数据结构和算法:栈与队列
    【store商城项目02】登录功能的开发
    MySql(40)覆盖索引和索引下推
    LVGL_基础控件btnmatrix
    网络GRE,MGRE
    汽配erp管理系统目前有哪些公司提供了解决方案?
    Lumiprobe 聚乙二醇化和 PEG 接头丨碘-PEG3-酸研究
    Attention Free Transformer(AFT)
    使用云API管理你的云服务器
    Oracle LiveLabs实验:Configure network environment for Oracle Database 21c
  • 原文地址:https://blog.csdn.net/weixin_45707491/article/details/127136361