分析bacnet协议栈源码 AtomicReadFile 服务

本文详细分析了BACnet协议栈中的AtomicReadFile服务,针对客户端如何使用基本读文件服务进行文件操作,尤其是FILE_STREAM_ACCESS和FILE_RECORD_ACCESS的编码过程。文中介绍了数据结构,并对encode_application_signed()和encode_bacnet_signed()等关键编码函数进行了剖析,揭示了文件开始位置和请求字节数目的编码逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          一个客户端的BACnet用户使用基本读文件服务对某个文件进行一个“打开--读出--关闭”的操作。访问的文件可以是字节流,也可以是编号记录。以下是基本读文件的服务原语:

          

          这是在基本读文件中定义的数据结构:

typedef struct BACnet_Atomic_Read_File_Data {
    BACNET_OBJECT_TYPE object_type;
    uint32_t object_instance;
    BACNET_FILE_ACCESS_METHOD access;
    union {
        struct {
            int32_t fileStartPosition;
            uint32_t requestedOctetCount;
        } stream;
        struct {
            int32_t fileStartRecord;
            /* requested or returned record count */
            uint32_t RecordCount;
        } record;
    } type;
    BACNET_OCTET_STRING fileData;
    bool endOfFile;
} BACNET_ATOMIC_READ_FILE_DATA;
          在这个数据结构的定义中,包括了对象类型,对象实例,访问方法(access),一个联合体type,在联合体中包括了以下两个结构:stream 和 record。在VTS中,这两个结构代表了两种access:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值