BACnet device对象详解以及协议栈相关代码

2024-03-14 06:12

本文主要是介绍BACnet device对象详解以及协议栈相关代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • BACnet 设备对象device详细介绍和应用场景
    • BACnet设备对象类型及其相关的函数
    • 查找BACnet设备对象类型的辅助函数
    • 获取特定对象类型的特殊属性列表Device_Objects_Property_List
    • 处理BACnet协议中的写属性操作 Device_Write_Property_Local
    • 处理BACnet协议中的读属性操作 Device_Read_Property_Local

BACnet 设备对象device详细介绍和应用场景

BACnet(Building Automation and Control Networks)是一种用于建筑自动化和控制系统的通信协议。BACnet设备对象是BACnet协议中的一个重要概念,用于表示建筑自动化系统中的设备。

BACnet设备对象(Device Object)是BACnet网络中的主要实体,代表了一个物理设备或网络上的虚拟设备。每个BACnet设备对象都有一个唯一的标识符,称为设备实例号(Device Instance)。

BACnet设备对象具有以下属性:

设备标识(Device Identifier):一个唯一的标识符,用于区分BACnet网络中的不同设备。

设备类型(Device Type):指定设备的类型,例如控制器、传感器、执行器等。

设备名称(Device Name):设备的人类可读名称,用于标识设备。

设备描述(Description):对设备的描述信息,用于提供有关设备的详细说明。

系统状态(System Status):表示设备当前的状态,例如正常、故障、离线等。

支持的对象类型(Supported Object Types):列出设备支持的其他BACnet对象类型,例如输入对象、输出对象、变量对象等。

BACnet设备对象的主要应用场景是建筑自动化和控制系统,其中包括楼宇管理系统、智能家居系统、工业控制系统等。通过BACnet设备对象,可以实现以下功能:

监测和控制:BACnet设备对象允许监测和控制建筑自动化系统中的各种设备,例如传感器、执行器、控制器等。通过读取和写入设备对象的属性,可以获取传感器的测量值、控制执行器的操作等。

系统管理:BACnet设备对象提供了管理设备和网络的功能。可以通过设备对象的属性设置设备的参数、配置网络设置、监控设备状态等。

通信和集成:BACnet设备对象作为BACnet网络中的实体,可以与其他设备进行通信和集成。通过BACnet协议的通信机制,设备对象之间可以交换数据、发送命令和通知等。

事件和报警:BACnet设备对象可以生成事件和报警,用于监测系统中的异常情况。例如,当温度传感器检测到过高的温度时,设备对象可以生成一个报警,并通知相关的设备或操作人员。

BACnet设备对象是BACnet协议中的核心概念,用于表示建筑自动化系统中的设备,并提供了监测、控制、管理和通信等功能。它在楼宇管理、智能家居、工业控制等领域都有广泛的应用。

BACnet设备对象类型及其相关的函数

static object_functions_t My_Object_Table[] = {
{ OBJECT_DEVICE, NULL /* Init - don't init Device or it will recourse! /,
Device_Count, Device_Index_To_Instance,
Device_Valid_Object_Instance_Number, Device_Object_Name,
Device_Read_Property_Local, Device_Write_Property_Local,
Device_Property_Lists, DeviceGetRRInfo, NULL / Iterator /,
NULL / Value_Lists /, NULL / COV /, NULL / COV Clear /,
NULL / Intrinsic Reporting / },
#if (BACNET_PROTOCOL_REVISION >= 17)
{ OBJECT_NETWORK_PORT, Network_Port_Init, Network_Port_Count,
Network_Port_Index_To_Instance, Network_Port_Valid_Instance,
Network_Port_Object_Name, Network_Port_Read_Property,
Network_Port_Write_Property, Network_Port_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /, NULL / Intrinsic Reporting / },
#endif
{ OBJECT_ANALOG_INPUT, Analog_Input_Init, Analog_Input_Count,
Analog_Input_Index_To_Instance, Analog_Input_Valid_Instance,
Analog_Input_Object_Name, Analog_Input_Read_Property,
Analog_Input_Write_Property, Analog_Input_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /,
Analog_Input_Encode_Value_List, Analog_Input_Change_Of_Value,
Analog_Input_Change_Of_Value_Clear, Analog_Input_Intrinsic_Reporting },
{ OBJECT_ANALOG_OUTPUT, Analog_Output_Init, Analog_Output_Count,
Analog_Output_Index_To_Instance, Analog_Output_Valid_Instance,
Analog_Output_Object_Name, Analog_Output_Read_Property,
Analog_Output_Write_Property, Analog_Output_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /, NULL / Intrinsic Reporting / },
{ OBJECT_ANALOG_VALUE, Analog_Value_Init, Analog_Value_Count,
Analog_Value_Index_To_Instance, Analog_Value_Valid_Instance,
Analog_Value_Object_Name, Analog_Value_Read_Property,
Analog_Value_Write_Property, Analog_Value_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /,
Analog_Value_Encode_Value_List, Analog_Value_Change_Of_Value,
Analog_Value_Change_Of_Value_Clear, Analog_Value_Intrinsic_Reporting },
{ OBJECT_BINARY_INPUT, Binary_Input_Init, Binary_Input_Count,
Binary_Input_Index_To_Instance, Binary_Input_Valid_Instance,
Binary_Input_Object_Name, Binary_Input_Read_Property,
Binary_Input_Write_Property, Binary_Input_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /,
Binary_Input_Encode_Value_List, Binary_Input_Change_Of_Value,
Binary_Input_Change_Of_Value_Clear, NULL / Intrinsic Reporting / },
{ OBJECT_BINARY_OUTPUT, Binary_Output_Init, Binary_Output_Count,
Binary_Output_Index_To_Instance, Binary_Output_Valid_Instance,
Binary_Output_Object_Name, Binary_Output_Read_Property,
Binary_Output_Write_Property, Binary_Output_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /, NULL / Intrinsic Reporting / },
{ OBJECT_BINARY_VALUE, Binary_Value_Init, Binary_Value_Count,
Binary_Value_Index_To_Instance, Binary_Value_Valid_Instance,
Binary_Value_Object_Name, Binary_Value_Read_Property,
Binary_Value_Write_Property, Binary_Value_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /, NULL / Intrinsic Reporting / },
{ OBJECT_CHARACTERSTRING_VALUE, CharacterString_Value_Init,
CharacterString_Value_Count, CharacterString_Value_Index_To_Instance,
CharacterString_Value_Valid_Instance, CharacterString_Value_Object_Name,
CharacterString_Value_Read_Property,
CharacterString_Value_Write_Property,
CharacterString_Value_Property_Lists, NULL / ReadRangeInfo /,
NULL / Iterator /, NULL / Value_Lists /, NULL / COV /,
NULL / COV Clear /, NULL / Intrinsic Reporting / },
{ OBJECT_COMMAND, Command_Init, Command_Count, Command_Index_To_Instance,
Command_Valid_Instance, Command_Object_Name, Command_Read_Property,
Command_Write_Property, Command_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /, NULL / Intrinsic Reporting / },
{ OBJECT_INTEGER_VALUE, Integer_Value_Init, Integer_Value_Count,
Integer_Value_Index_To_Instance, Integer_Value_Valid_Instance,
Integer_Value_Object_Name, Integer_Value_Read_Property,
Integer_Value_Write_Property, Integer_Value_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /, NULL / Intrinsic Reporting / },
#if defined(INTRINSIC_REPORTING)
{ OBJECT_NOTIFICATION_CLASS, Notification_Class_Init,
Notification_Class_Count, Notification_Class_Index_To_Instance,
Notification_Class_Valid_Instance, Notification_Class_Object_Name,
Notification_Class_Read_Property, Notification_Class_Write_Property,
Notification_Class_Property_Lists, NULL / ReadRangeInfo /,
NULL / Iterator /, NULL / Value_Lists /, NULL / COV /,
NULL / COV Clear /, NULL / Intrinsic Reporting / },
#endif
{ OBJECT_LIFE_SAFETY_POINT, Life_Safety_Point_Init, Life_Safety_Point_Count,
Life_Safety_Point_Index_To_Instance, Life_Safety_Point_Valid_Instance,
Life_Safety_Point_Object_Name, Life_Safety_Point_Read_Property,
Life_Safety_Point_Write_Property, Life_Safety_Point_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /, NULL / Intrinsic Reporting / },
{ OBJECT_LOAD_CONTROL, Load_Control_Init, Load_Control_Count,
Load_Control_Index_To_Instance, Load_Control_Valid_Instance,
Load_Control_Object_Name, Load_Control_Read_Property,
Load_Control_Write_Property, Load_Control_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /, NULL / Intrinsic Reporting / },
{ OBJECT_MULTI_STATE_INPUT, Multistate_Input_Init, Multistate_Input_Count,
Multistate_Input_Index_To_Instance, Multistate_Input_Valid_Instance,
Multistate_Input_Object_Name, Multistate_Input_Read_Property,
Multistate_Input_Write_Property, Multistate_Input_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /, NULL / Intrinsic Reporting / },
{ OBJECT_MULTI_STATE_OUTPUT, Multistate_Output_Init,
Multistate_Output_Count, Multistate_Output_Index_To_Instance,
Multistate_Output_Valid_Instance, Multistate_Output_Object_Name,
Multistate_Output_Read_Property, Multistate_Output_Write_Property,
Multistate_Output_Property_Lists, NULL / ReadRangeInfo /,
NULL / Iterator /, NULL / Value_Lists /, NULL / COV /,
NULL / COV Clear /, NULL / Intrinsic Reporting / },
{ OBJECT_MULTI_STATE_VALUE, Multistate_Value_Init, Multistate_Value_Count,
Multistate_Value_Index_To_Instance, Multistate_Value_Valid_Instance,
Multistate_Value_Object_Name, Multistate_Value_Read_Property,
Multistate_Value_Write_Property, Multistate_Value_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /,
Multistate_Value_Encode_Value_List, Multistate_Value_Change_Of_Value,
Multistate_Value_Change_Of_Value_Clear,
NULL / Intrinsic Reporting / },
{ OBJECT_TRENDLOG, Trend_Log_Init, Trend_Log_Count,
Trend_Log_Index_To_Instance, Trend_Log_Valid_Instance,
Trend_Log_Object_Name, Trend_Log_Read_Property,
Trend_Log_Write_Property, Trend_Log_Property_Lists, TrendLogGetRRInfo,
NULL / Iterator /, NULL / Value_Lists /, NULL / COV /,
NULL / COV Clear /, NULL / Intrinsic Reporting / },
#if (BACNET_PROTOCOL_REVISION >= 14) && defined(BACAPP_LIGHTING_COMMAND)
{ OBJECT_LIGHTING_OUTPUT, Lighting_Output_Init, Lighting_Output_Count,
Lighting_Output_Index_To_Instance, Lighting_Output_Valid_Instance,
Lighting_Output_Object_Name, Lighting_Output_Read_Property,
Lighting_Output_Write_Property, Lighting_Output_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /, NULL / Intrinsic Reporting / },
{ OBJECT_CHANNEL, Channel_Init, Channel_Count, Channel_Index_To_Instance,
Channel_Valid_Instance, Channel_Object_Name, Channel_Read_Property,
Channel_Write_Property, Channel_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /, NULL / Intrinsic Reporting */ },
#endif#if defined(BACFILE)
{ OBJECT_FILE, bacfile_init, bacfile_count, bacfile_index_to_instance,
bacfile_valid_instance, bacfile_object_name, bacfile_read_property,
bacfile_write_property, BACfile_Property_Lists,
NULL /* ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /, NULL / Intrinsic Reporting / },
#endif
{ OBJECT_OCTETSTRING_VALUE, OctetString_Value_Init, OctetString_Value_Count,
OctetString_Value_Index_To_Instance, OctetString_Value_Valid_Instance,
OctetString_Value_Object_Name, OctetString_Value_Read_Property,
OctetString_Value_Write_Property, OctetString_Value_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /, NULL / Intrinsic Reporting / },
{ OBJECT_POSITIVE_INTEGER_VALUE, PositiveInteger_Value_Init,
PositiveInteger_Value_Count, PositiveInteger_Value_Index_To_Instance,
PositiveInteger_Value_Valid_Instance, PositiveInteger_Value_Object_Name,
PositiveInteger_Value_Read_Property,
PositiveInteger_Value_Write_Property,
PositiveInteger_Value_Property_Lists, NULL / ReadRangeInfo /,
NULL / Iterator /, NULL / Value_Lists /, NULL / COV /,
NULL / COV Clear /, NULL / Intrinsic Reporting / },
{ OBJECT_SCHEDULE, Schedule_Init, Schedule_Count,
Schedule_Index_To_Instance, Schedule_Valid_Instance,
Schedule_Object_Name, Schedule_Read_Property, Schedule_Write_Property,
Schedule_Property_Lists, NULL / ReadRangeInfo /, NULL / Iterator /,
NULL / Value_Lists /, NULL / COV /, NULL / COV Clear /,
NULL / Intrinsic Reporting / },
{ OBJECT_ACCUMULATOR, Accumulator_Init, Accumulator_Count,
Accumulator_Index_To_Instance, Accumulator_Valid_Instance,
Accumulator_Object_Name, Accumulator_Read_Property,
Accumulator_Write_Property, Accumulator_Property_Lists,
NULL / ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /, NULL / Intrinsic Reporting / },
{ MAX_BACNET_OBJECT_TYPE, NULL / Init /, NULL / Count /,
NULL / Index_To_Instance /, NULL / Valid_Instance /,
NULL / Object_Name /, NULL / Read_Property /,
NULL / Write_Property /, NULL / Property_Lists /,
NULL / ReadRangeInfo /, NULL / Iterator /, NULL / Value_Lists /,
NULL / COV /, NULL / COV Clear /,
NULL / Intrinsic Reporting */ }
};

这段代码定义了一个名为My_Object_Table的静态数组,该数组存储了一系列object_functions_t类型的结构体对象。

每个结构体对象表示一个BACnet设备对象类型及其相关的函数和属性列表。每个结构体对象包含以下字段:

type:对象类型,这里是BACnet设备对象类型。
Init:初始化函数指针,用于初始化该BACnet设备对象类型的实例。
Count:计数函数指针,用于获取该BACnet设备对象类型的实例数量。
Index_To_Instance:索引转实例函数指针,用于将索引转换为BACnet设备对象的实例号。
Valid_Instance:验证实例函数指针,用于验证给定的BACnet设备对象实例号是否有效。
Object_Name:对象名称函数指针,用于获取BACnet设备对象的名称。
Read_Property:读取属性函数指针,用于读取BACnet设备对象的属性值。
Write_Property:写入属性函数指针,用于写入BACnet设备对象的属性值。
Property_Lists:属性列表函数指针,用于获取BACnet设备对象支持的属性列表。
ReadRangeInfo:读取范围信息函数指针,用于获取BACnet设备对象属性的范围信息。
Iterator:迭代器函数指针,用于在BACnet设备对象实例之间进行迭代。
Value_Lists:值列表函数指针,用于获取BACnet设备对象属性的值列表。
COV:COV(Change Of Value)函数指针,用于处理BACnet设备对象属性值的变化。
COV_Clear:COV清除函数指针,用于清除BACnet设备对象属性值的变化标志。
Intrinsic_Reporting:内在报告函数指针,用于处理BACnet设备对象的内在报告。

查找BACnet设备对象类型的辅助函数

/*** 辅助函数,用于让Device对象在被处理程序调用时查找需要调用的对象类型。* @ingroup ObjHelpers* @param Object_Type [in] 处理程序希望访问的BACnet对象类型。* @return 指向实现此类型对象的对象辅助函数组的指针。*/
static struct object_functions *Device_Objects_Find_Functions(BACNET_OBJECT_TYPE Object_Type)
{struct object_functions *pObject = NULL;// 将pObject指向对象表的起始位置pObject = Object_Table;// 遍历对象表中的每个对象类型while (pObject->Object_Type < MAX_BACNET_OBJECT_TYPE) {/* 处理每个对象类型 */// 如果找到与传入的Object_Type相匹配的对象类型if (pObject->Object_Type == Object_Type) {// 返回该对象类型的对象辅助函数组return (pObject);}// 指向下一个对象类型pObject++;}// 如果没有找到匹配的对象类型,则返回NULLreturn (NULL);
}
该函数通过遍历Object_Table数组中的对象辅助函数组,将pObject指针逐个与传入的Object_Type进行比较,直到找到匹配的对象类型为止。如果找到了匹配的对象类型,则返回该对象类型的对象辅助函数组的指针;如果没有找到匹配的对象类型,则返回NULL。这个辅助函数在处理BACnet设备对象时非常有用,它允许根据需要动态查找和调用不同类型的对象辅助函数。/*** 辅助函数,尝试查找所请求对象类型的rr_info_function辅助函数。* @ingroup ObjIntf** @param object_type [in] 处理程序希望访问的BACnet对象类型。* @return 指向实现该对象类型的ReadRangeInfo函数(Object_RR_Info)的对象辅助函数指针,*         如果不支持该对象类型或该对象类型没有ReadRangeInfo函数,则返回空指针(NULL)。*/
rr_info_function Device_Objects_RR_Info(BACNET_OBJECT_TYPE object_type)
{struct object_functions *pObject = NULL;// 查找对象类型对应的对象辅助函数组pObject = Device_Objects_Find_Functions(object_type);// 如果找到对应的对象辅助函数组return (pObject != NULL ? pObject->Object_RR_Info : NULL);
}这段代码是一个用于查找BACnet对象类型的ReadRangeInfo函数辅助函数。它尝试查找所请求的对象类型的rr_info_function辅助函数。该函数首先调用Device_Objects_Find_Functions函数,通过传入的object_type参数查找并返回相应BACnet对象类型的对象辅助函数组。然后,它返回对象辅助函数组中的Object_RR_Info函数指针作为ReadRangeInfo函数的实现。如果找到了支持ReadRangeInfo函数的对象类型的对象辅助函数组,则返回该函数指针;如果不支持该对象类型或该对象类型没有ReadRangeInfo函数,则返回空指针(NULL)。这个辅助函数在处理BACnet对象时有用,它允许根据对象类型动态获取和调用相应的ReadRangeInfo函数,以实现对对象属性范围信息的读取操作。

获取特定对象类型的特殊属性列表Device_Objects_Property_List

这段代码是一个用于获取特定对象类型的特殊属性列表的函数。该函数用于处理ReadPropertyMultiple调用,该调用只需要必需属性、可选属性或所有属性。
/**

  • 对于给定的对象类型,返回特殊属性列表。

  • 此函数用于ReadPropertyMultiple调用,它只需要必需属性、可选属性或所有属性。

  • @ingroup ObjIntf

  • @param object_type [in] 所需的BACNET_OBJECT_TYPE,其属性将被列出。

  • @param pPropertyList [out] 引用结构的指针,该结构将在返回时分别列出必需、可选和专有对象属性及其计数。
    */
    void Device_Objects_Property_List(BACNET_OBJECT_TYPE object_type,
    uint32_t object_instance,
    struct special_property_list_t *pPropertyList)
    {
    struct object_functions *pObject = NULL;

    (void)object_instance;

这篇关于BACnet device对象详解以及协议栈相关代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807463

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip