LD/T698.45 协议解析(新)

news2024/11/15 14:05:23

通信架构

客户机和服务器在开始通信前,通信信道必须先完成预连接。预连接建立后,默认具有一个最低权限的应用连接,客户机和服务器之间可直接进行数据交换。当客户机需要得到更高权限的服务器服务时,客户机必须发起建立更高权限的应用连接。

  1. 建立应用连接;
  2. 数据交换;
  3. 断开应用连接。

698协议通信架构

标准信息交换模型

客户机和服务器之间的信息交换借助于通信协议实现。客户机和服务器的应用进程使用协议应用层的服务,应用层是唯一包含服务组件的协议层,应用层数据单元(APDU)通过数据链路层协议传输帧的链路用户数据域传输。

帧格式

链路层帧的基本单元为8位字节,传输顺序为低位在前,高位在后;低字节在前,高字节在后。

起始字符68H长度域L控制域C地址域A帧头校验HCS链路应用数据帧校验FCS结束字符16H
1Byte2Byte1Byte(N+1)Byte2ByteN Byte2Byte1Byte

长度域L

bit15bit14bit13~bit0
保留帧数据长度单位帧数据长度值
  1. bit0…bit13:帧数据长度值,是传输帧中不包含起始字符和结束字符的数据长度;
  2. bit14:帧数据长度单位,0 表示帧数据长度单位为字节,1 表示帧数据长度单位为千字节;
  3. bit15:保留。

控制域C

bit7bit6bit4bit3bit2~bit0
传输方向DIR启动标志 PRM分帧标志保留扰码标志 SC

传输方向及启动标志位

传输方向位及启动标志位定义:

  • 传输方向位:bit7=0 表示此帧是由客户机发出的;bit7=1 表示此帧是由服务器发出的;
  • 启动标志位:bit6=0 表示此帧是由服务器发起的;bit6=1 表示此帧是由客户机发起的。
DIRPRM组合意义
00客户机对服务器上报的响应
01客户机发起的请求
10服务器发起的上报
11服务器对客户机请求的响应

分帧标志位

分帧标志位: bit5=0,表示此帧链路用户数据为完整APDU(应用层数据单元);bit5=1,表示此帧链路用户数据为APDU片段。

扰码标志位

扰码标志位: bit3=0,表示此帧链路用户数据不加扰码;bit3=1,表示此帧链路用户数据加扰码,发送时链路用户数据按字节加33H。

功能码

功能码服务类型应用说明
0保留
1链路管理链路连接管理(登录,心跳,退出登录)
2保留
3用户数据应用连接管理及数据交换服务
4~7保留

地址域A

地址域A由可变字节数的服务器地址SA和1字节的客户机地址CA组成。

服务器地址 SA

服务器地址SA由1字节地址特征和N个字节地址组成

bit7-bit6bit5-bit4bit3-bit0
地址类型逻辑地址地址长度
扩展逻辑地址/分路地址
地址
地址特征定义
  1. bit0…bit3:为地址的字节数,取值范围:0…15,对应表示 1…16 个字节长度;
  2. bit4…bit5:逻辑地址;
  3. bit5=0 表示无扩展逻辑地址,bit4 取值 0 和 1 分别表示逻辑地址 0 和 1;
  4. bit5=1 表示有扩展逻辑地址,bit4 备用;地址长度 N 包含 1 个字节的扩展逻辑地址,取值范围 2…255,表示逻辑地址 2…255;
  5. bit6…bit7:为服务器地址的地址类型,0 表示单地址,1 表示通配地址,2 表示组地址,3表示广播地址。

扩展逻辑地址和地址要求如下:

  1. 扩展逻辑地址取值范围 2…255;
  2. 编码方式为压缩 BCD 码,0 保留;
  3. 当服务器地址的十进制位数为奇数时,最后字节的 bit3…bit0 用 FH 表示。
单地址

单地址的长度为可变字节

组地址

组地址的长度为可变字节。组地址对系统中属于该群组的服务器有效,无需应答。

通配地址

通配地址的长度为可变字节。每字节二进制高低各4位分别编码表示两个0到9的十进制数或通配符AH。通配符按十进制位使用,对应的十进制位为AH时,表示该十进制位可为0到9的任意值。

广播地址

广播地址的长度固定为1字节,广播地址=AAH。广播地址对系统所有服务器有效,无需应答。

客户机地址 CA

客户机地址CA用1字节表示,0表示不关注客户机地址。

帧头校验 HCS/ 帧校验 FCS

帧头校验HCS为2字节,是对帧头部分不包含起始字符和HCS本身的所有字节的校验

/*
 * u16 represents an unsigned 16-bit number. Adjust the typedef for
 * your hardware.
 * Drew D. Perkins at Carnegie Mellon University.
 * Code liberally borrowed from Mohsen Banan and D. Hugh Redelmeier.
 */
typedef unsigned short u16;
/*
 * FCS lookup table as calculated by the table generator.
 */
static u16 fcstab[256] = {
    0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
    0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
    0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
    0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
    0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
    0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
    0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
    0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
    0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
    0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
    0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
    0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
    0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
    0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
    0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
    0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
    0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
    0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
    0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
    0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
    0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
    0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
    0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
    0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
    0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
    0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
    0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
    0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
    0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
    0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
    0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
    0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78};
#define PPPINITFCS16 0xffff /* Initial FCS value */
#define PPPGOODFCS16 0xf0b8 /* Good final FCS value */
/*
 * Calculate a new fcs given the current fcs and the new data.
 */
u16 pppfcs16(fcs, cp, len)
register u16 fcs;
register unsigned char *cp;
register int len;
{
    ASSERT(sizeof(u16) == 2);
    ASSERT(((u16)-1) > 0);
    while (len--)
        fcs = (fcs >> 8) ^ fcstab[(fcs ^ *cp++) & 0xff];
    return (fcs);
}
/*
 * How to use the fcs
 */
tryfcs16(cp, len) register unsigned char *cp;
register int len;
{
    u16 trialfcs;
    /* add on output */
    trialfcs = pppfcs16(PPPINITFCS16, cp, len);
    trialfcs ^= 0xffff;            /* complement */
    cp[len] = (trialfcs & 0x00ff); /* least significant byte first */
    cp[len + 1] = ((trialfcs >> 8) & 0x00ff);
    /* check on input */
    trialfcs = pppfcs16(PPPINITFCS16, cp, len + 2);
    if (trialfcs == PPPGOODFCS16)
        printf("Good FCS\n");
}

/*
 * Generate a FCS-16 table.
 * Drew D. Perkins at Carnegie Mellon University.
 * Code liberally borrowed from Mohsen Banan and D. Hugh Redelmeier.
 * The FCS-16 generator polynomial: x**0 + x**5 + x**12 + x**16.
 */
#define P 0x8408
/*
 * NOTE The hex to "least significant bit" binary always causes
 * confusion, but it is used in all HDLC documents. Example: 03H
 * translates to 1100 0000B. The above defined polynomial value
 * (0x8408) is required by the algorithm to produce the results
 * corresponding to the given generator polynomial
 * (x**0 + x**5 + x**12 + x**16)
 */
main()
{
    register unsigned int b, v;
    register int i;
    printf("typedef unsigned short u16;\n");
    printf("static u16 fcstab[256]={");
    for (b = 0;;)
    {
        if (b % 8 == 0)
            printf("\n");
        v = b;
        for (i = 8; i--;)
            v = v & 1 ? (v >> 1) ^ P : v >> 1;
        printf("\t0x%04x", v & 0xFFFF);
        if (++b == 256)
            break;
        printf(",");
    }
    printf("\n};\n");
}

传输规则

字节规则

采用串行通信方式发送数据时:

  1. 线路空闲状态为二进制 1;
  2. 在有效数据帧前加 4 个 FEH 作为前导码;
  3. 数据链路层帧的字节之间无线路空闲间隔;两帧之间的线路空闲间隔至少 33 位。

分帧传输

分帧传输规则

当一个APDU数据组帧的长度超过协商的最大帧长度时,采用分帧传输。采用分帧传输时,控制域中分帧标志位置1。数据接收端应对分帧进行逐条确认。

分帧传输格式定义

分帧传输时,数据链路层的链路用户数据为分帧传输帧,分为数据帧确认帧;分帧传输的数据帧包含分帧格式域和APDU片段。分帧传输的确认帧仅包含分帧格式域,不含APDU片段

bit15-bit14bit13-bit12bit11-bit0
分帧类型保留表示分帧传输的帧序号,取值范围 0…4095,循环使用

分帧类型定义:

  1. 表示分帧传输起始帧;
  2. 表示分帧传输末尾帧;
  3. 表示分帧传输确认帧;
  4. 表示分帧传输中间帧

分帧传输交互规则

分帧传输交互可由服务器或客户机任意一侧发起,适用于主动发起的数据服务或者被动应答的数据服务,发送方将APDU应用数据单元分割成若干个片段,通过分帧方式依次发送。

服务器或客户机启动的数据分帧传输过程

分帧过程如下:

  1. 分帧的第一帧数据,帧序号(block)=0,分帧类型=0;
  2. 分帧传输确认,分帧类型=2,block 值为最近一次收到正确的帧序号;
  3. 分帧的发送方在接收到确认帧后传输下一个数据帧,分帧类型=3,分帧序号 block=接收到确认帧的帧序号+1,重复 2 和 3;
  4. 分帧的最后一帧,block=最后一帧的帧序号,分帧类型=1,发送方在接收到最后一个确认帧后,分帧传输过程完成。

应用层

应用层服务对象是构成客户机和服务器应用层的主要组件,它使用的数据链路层提供的服务,服务规范包含客户机和服务器应用进程在各自应用层的逻辑接口,并向应用进程提供服务。客户机和服务器的应用服务对象都包括预连接、应用连接和数据交换三个必备组件。

应用层数据单元(APDU)的标记规则遵循ASN.1的抽象语法,详见GB/T 16262.1—2006。应用层数据单元(APDU)的编码规则遵循A-XDR,详见DL/T 790.6—2010。应用层紧凑服务的数据单元(APDU)的编码规则遵循PER,详见GB/T 16263.2-2006。

编码结构

A-XDR规定了一种编码规则,可用于对定义为单一ASN.1类型(最外层的类型)的抽象语法数值 进行编码或解码。这种单一ASN.1类型可以是简单类型也可以是复合类型。复合类型的数据项可以是简 单类型或复合类型。

A-XDR 编码规则利用了 DLMS PDU 发送端和接收端都用相同的抽象语法规范运行这一事实。用 BER 时,抽象语法的任何值的编码结构都是TLV(type-length-value,类型一长度一数值)形式。A-XDR 只在必要时才对数据的类型和长度编码,如不知道编码值的类型,就无法确定编码的结构。

为使A-XDR尽量简单,进行抽象语法编码时,应用以下限制条件:

  1. 不支持DLMS以外的ASN.1类型数据的编码”;
  2. ASN.1选择(CHOICE)类型数据只用于有显式标记4’的数据项。

A-XDR是面向字节的编码规则。这意味着每一部分乃至全部的编码的字节数是整数。

BER编码(见ITU-T的X.209)的基本结构:类型、长度和内容,这三部分在BER中可表示为标识符I(Identifier)长度L(Length)内容C(Contents),如图所示。标识符部分用于标识类型,长度部分用于查找内容区的末端,内容部分用于传送这种类型的可能值。内容域可简化为一系列字节6’(原始编码)或一系列嵌套编码(构造编码),

服务器或客户机启动的数据分帧传输过程

嵌套的深度按需要决定,并以原始编码或空内容的构造编码结束。

A-XDR的编码结构与BER基本相同,但为了利用DLMS PDU发送端和接收端按同样的抽象语法规范运行这一事实,当标识符和长度域传送冗余的信息时,A-XDR就不对它们编码(不对其中一个域或两个域编码不会导致编码不可解释或含糊不清)。因此,A-XDR编码的结构如图所示。

构造A-XDR编码的结构

A-XDR编码规则规定:

  • 用于内容域的编码规则;
  • 如有长度域,对长度域编码;
  • 如有标识域,对标识域编码。

例:

Value ::= SEQUENCE {
	A integer16,
	B unsigned16
}

integer16 ::= INTEGER(-32768~32768)
unsigned16 ::= INTEGER(0~65535)

假设对A和B编码,其值分别为0x1234和0x5678,上述序列的BER编码如下:

BER编码

同一序列的A-XDR编码如下:

A-XDR编码

编码规则

对任何ASN.1类型的数据进行A-XDR编码,其字节数都是整数,每个字节有8位。这些字节从最 外层的ASN.1类型的标识符域编码的第一个字节开始,可认为这个字节为最高位。DL/T 790的本部分 做以下规定:

  1. 不系统地对A-XDR编码的字节编号,但有时,为便于理解可加说明(例如,值的第1字节等)。
  2. 每个字节的位的编号为1~8,其中第8位是最高位。

标识符域

标识符域的作用是确定编码值的类型。假如信息的发送端和接收端都以相同抽象句法规范运行,只在以下情况下标识符域才传输信息:

  1. 应从不同CHOICE类型中选择一种数据类型;
  2. 应指出序列(SEQUENCE)中有可选(OPTIONAL)项存在;
  3. 应指出序列(SEQUENCE)中有默认(DEFAULT)项存在。

A-XDR只在上述情况时有标识符域。此外,当ASN.1规范(ASN.1的显式标记)要求对标识符域进行编码时,A-XDR对标识符编码。

在 1 情况下,A-XDR要求选择(CHOICE)的所有备选在ASN.1中定义为显式标记类型。这时,编码标识形成了标识符域。

在 2 和 3 情况下,可选(OPTIONAL)和默认(DEFAULT)项是否存在可由布尔(BOOLEAN) 类型的存在标记表示。这些可选项值的标识符域就是存在标记值的A-XDR编码。

另一方面,当ASN.1定义中包含ASN.1的显式标记时,A-XDR就必须对标识符域编码。

这些类型的 A-XDR 编码定义和它们的BER编码相同。这样做的目的是使对长度编码,便于省略一些结构。

这些类型的标识符域是ASN.1标记的编码值,所占字节数是整数,至少为1,如ITU-T的X.209规定。

LD/T698.45 接口类及对象实例使用的数据类型定义如下:

类型描述标记定义数值范围
NULL0
arraySEQUENCE OF Data(7.3.1 )
数组的元素在对象属性或方法的描述中定义
structureSEQUENCE OF Data(7.3.1 )
结构的元素在对象属性或方法的描述中定义
bool布尔值 1 或 0
bit-string位串
double-long32位整数  -2³...2³¹-1
double-long-unsigned32位正整数 0...2³²-1
保留7-8
octet-string8位字节串
visible-string10 ASCII字符串
保留11 
UTF8-string12 UTF-8编码的字符串
保留13-14
integer15 8位整数-128...127
long16 16位整数  -32768...32767
unsigned17 8位正整数0...255
long-unsigned1O
10
16位正整数 0...65535
保留19 
long6420 64位整数-26...2⁶³-1
long64-unsigned21 64位正整数0...2⁶⁴-1
enum22 枚举的元素在对象属性或方法的描述中定义0...255
float3223 32位浮点数
float6424 64位浮点数
date_time25 octet-string(SIZE(10))
date26 octet-string(SIZE(5))
time27 octet-string(SIZE(3))
date_time_s28 octet-string(SIZE(7))
保留29-79
OI80 0
0AD81 0
ROAD82 0
OMD83 0
TI84 0
TSA85 0
MAC86 0
RN87 0
Region88 0
Scaler_Unit89 0
RSD90 0
CSD91 0
MS92 0
SID93 0
SID_MAC94 0
COMDCB95 0
RCSD96 0
VQDS97 0
保留98-255
注:表中的表示1个二进制信息单位(bit)

长度域

在A-XDR中长度域(如存在)位于内容域的前面。它明确地表示内容区的长度,所占字节数为整数。如信息的发送端和接收端都以相同的抽象句法规范运行,只在对可变长度的ASN.1类型编码时长度域才传输信息。可能的情况如下:

  1. 长度可变的整数(INTEGER);
  2. 长度可变的位串(BIT STRING);
  3. 长度可变的字节串(BYTE STRING);
  4. 长度可变的类型序列(SEQUENCE OF)。

只在以上情况以及ASN.1规范(ASN.1显式标记)要求时,A-XDR才对长度域编码。

在上述四种情况下,长度域编码为一个可变长度的整数。其他情况,除只有确定形 式可以[见脚注7]使用的限制外,A-XDR采用与BER定义相同的方法(见ITU-T的X.209)。不允许 A-XDR的长度域用不确定型。

内容域

内容域是编码的本体。它传输实际值,由零或多个字节组成,总体来讲,组包和分析报文的过程其实也是查表的过程,没什么技术含量。

例1:登录

登录

我们开始分析应用层的数据单元部分。

LINK-APDU 定义

01H代表连接请求;81H代表连接应答。

LINK-Request 数据类型定义

PIID-ACD:带请求访问标识的序号及优先标志(Priority and Invoke ID with ACD)

PIID-ACD 数据类型定义

表6内容:

PIID 用于客户机 APDU(Client-APDU)的服务数据类型中,其中:

  • bit7(服务优先级)——0:普通优先级,1:高优先级,在应答 APDU 中,其值与请求的 APDU 相同。
  • bit6(保留)。
  • bit0…bit5(服务序号)——二进制编码表示 0…63,在应答 APDU 中,其值与请求的 APDU 相同。

综上所述,00表示普通优先级,服务序号为0。

请求类型为登录(0)。

心跳周期为180秒。

请求时间为date_time,其数据类型定义如下:

date_time 数据类型定义

报文中,07E0H表示2016;05H表示5月,其余如此类推。

例2:设置一个对象属性请求

设置一个对象属性请求

以上报文是设置时钟的请求。

Client-APDU 定义

06H是指设置请求。

SET-Request 数据类型定义

01H表示请求设置一个对象属性。

SetRequestNormal 数据类型定义

SetRequestNormal 由 3 部分组成: 服务序号-优先级(PIID)、对象属性描述符(OAD)、数据。

OAD 数据类型定义

40H 00H 02H 00H, 对象标识数据类型为 long-unsigned, 即 4000H;属性标识及其特征为02H,即表示在0值特征情况下的对象的所有属性;休息内元素索引为00,表示整个属性的全部内容。

综上所述,02H表示普通优先级,服务序号为2;设置整个时钟对象的全部属性内容。

date_time_s 数据类型定义

ICH 表示当前写入的数据类型是 date_time_s ;且没有时间标签域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2076713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浦发银行不良堆积,新任领导的无奈

撰稿|芋圆 浦发银行在2023年进行了一波董监高人员大变动,董事长和行长两位掌舵人双双离职,在其任内,浦发银行自2020年起的营收、利润状况和资产质量就一直难有起色。 目前,距新任领导班子上任已差不多过去一年之久。在这一年里&a…

Redis(面试题【速记】)

Redis简介 Redis 是一个开源(BSD 许可)内存数据结构存储用作数据库、缓存、消息代理和流引擎。Redis 提供数据结构,例如 字符串、散列、列表、集合、带范围查询的排序集合、位图、超日志、地理空间索引和流。Redis 内置了复制、Lua 脚本、LRU 驱逐、事务和不同级别的…

【Linux —— 线程同步 - 条件变量】

Linux —— 线程同步 - 条件变量 条件变量的概念互斥量与条件变量的关系条件变量的操作代码示例 条件变量的概念 条件变量是一种用于线程间同步的机制,主要用于协调线程之间的执行顺序,允许线程在某个条件不满足时进入等待状态,直到其他线程通…

【Linux I/O】万字长文带思维导图,一文彻底掌握Linux I/O:深入解析操作系统数据交互的艺术

Linux I/O Linux I/O(输入/输出)是操作系统与外部设备进行数据交互的过程。在Linux系统中,I/O操作的管理和优化对于系统性能有着至关重要的影响。本文将详细介绍Linux中的各种I/O模型,包括它们的工作原理、优缺点以及适用场景&am…

ImportError: DLL load failed while importing _ssl: 找不到指定的模块。

windonw cmd下的输出: (python3.9) PS D:\git\ImageAnalysisService\core\medical_bills> python Python 3.9.19 (main, May 6 2024, 20:12:36) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or …

计算机基础知识总结(八股文--计算机网络、操作系统、数据库、c++、数据结构与算法)

一、操作系统 0.内存管理 01.什么是虚拟内存?为什么需要虚拟内存? 虚拟内存为程序提供比实际物理内存更大的内存空间,同时提高内存管理的灵活性和系统的多任务处理能力。虚拟地址空间就是进程所能看到的内存空间,这段空间是连续…

苍穹外卖项目DAY11

苍穹外卖项目DAY11 1、Apache ECharts 1.1、介绍 Apache ECharts是一款基于JavaScript的数据可视化图标库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图标 官网&#xff1a;Apache ECharts 1.3、入门案例 <!DOCTYPE…

LlamaIndex 实现 RAG(四)- RAG 跟踪监控

RAG 整个流程不复杂&#xff0c;集成三大部分包括文档解析并生成向量、根据查询问题查找语意相似的数据文档块、把查询问题和召回文档作为上下文的数据传给模型进行解答。大语言模型的应用开发和传统的开发方式区别很大&#xff0c;以前开发完成&#xff0c;只要逻辑正确&#…

解决IDEA 控制台中文乱码及无法输入中文

一、IDEA 控制台中文乱码&#xff1a; 问题描述&#xff1a; IntelliJ IDEA 如果不进行相关设置&#xff0c;可能会导致控制台中文乱码、配置文件中文乱码等问题。 解决方案&#xff1a; ①&#xff1a;设置字体为支持中文的字体&#xff1a; 点击菜单 File - > settings …

二分查找【算法 09】

二分查找算法详解 二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;前提是数据必须是有序的。相比于线性查找&#xff0c;二分查找的时间复杂度从 O(n) 降低到了 O(log n)&#xff0c;适合处理大规模的数据查找问题。本文将详细介绍二分查找的原…

Catf1ag CTF Crypto(六)

前言 Catf1agCTF 是一个面向所有CTF&#xff08;Capture The Flag&#xff09;爱好者的综合训练平台&#xff0c;尤其适合新手学习和提升技能 。该平台由catf1ag团队打造&#xff0c;拥有超过200个原创题目&#xff0c;题目设计注重知识点的掌握&#xff0c;旨在帮助新手掌握C…

集团数字化转型方案(十六)

为了全面推进集团的数字化转型&#xff0c;我们将实施一系列战略举措&#xff0c;包括整合最新的人工智能、大数据分析和云计算技术&#xff0c;升级企业资源规划&#xff08;ERP&#xff09;系统&#xff0c;实现业务流程的自动化与优化&#xff1b;同时&#xff0c;建立全方位…

计算机是如何工作的(2)

文章目录 一. 寄存器和存储器二. 操作系统二. 进程PCB1. pid2. 内存指针3. 文件描述符表4. 属性1) 状态2) 优先级3) 上下文4) 记账信息 一. 寄存器和存储器 存储器是内存和硬盘的通称 内存, 存储空间比硬盘小, 速度比硬盘快, 价格比硬盘高, 掉电后数据流失寄存器是CPU上的一个…

ORACLE EBS R12系统的安装及维护案例

引言&#xff1a; Oracle E-Business Suite (EBS) R12 是企业中广泛应用的一体化管理解决方案&#xff0c;涵盖了财务、人力资源、供应链等多个业务领域。以下将详细介绍如何在 Windows 系统上安装 Oracle EBS R12&#xff0c;并分享一些日常维护的技巧和最佳实践。 点击下载…

基于imx6ull平台opencv的图像采集、ffmpeg推流和Windows端拉流(多线程)

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 验证功能一、概述 本文档是针对imx6ull平台opencv的图像采集、ffmpeg推流和Windows端拉流。首先创建一个线程opencv通过摄像头采集视频图像,接着再创建两个线程,其中一个线程获取采集的视频图…

Python编码系列—Python中的HTTPS与加密技术:构建安全的网络通信

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

驾驭高效编程:一探C++ STL的奥秘

1.什么是STL 2.:STL的版本 2.1:原始版本 2.2:P.J版本 2.3:RW版本 2.4:SGI版本 3:STL的六大组件 4:如何学习STL 5:STL的缺陷 1.什么是STL STL(standdard template library-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包含数据结构与算法软…

MJJ 必备自建 IDC 系统 WHMCS 开心版 圆你一个老板梦

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 WHMCS 是我们买 VPS 的最常见到的 IDC 系统,最近为了写 VPS 库存监控脚本,自己搭了一个 WHMCS 用来测试,顺便分享一下如何搭建属于自己的 WHMCS,圆你一个老板梦。WHMCS 开心版仅限学习、开发使用,商业用途请前往…

Linux内核学习之中断处理

Linux内核学习之中断处理 0 前言1 中断处理程序的嵌套执行1 Linux对x86异常的处理Linux中向量用途1 Linux中的中断门描述符Linux中的中断描述符硬中断软中断和tasklet软中断tasklet[^2]ksoftirqd内核线程kworker内核线程 0 前言 文本基于x86架构讲解Linux中对中断的处理&#…

Telink泰凌微如何添加Lib库

基于TLSR8258 SDK&#xff1a;b85m_ble_single_connection_sdk 1.首先把lib文件放在sdk的proj_lib文件夹中 2. properties - c/c build - Settings - TC32 C Linker - Libraries&#xff0c;把文件添加到编译设置中。注意添加的库文件名需要删除“lib前缀”。例如&#xff1…