自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 软件测试方法与内容

数据存储应按照国标要求,数据存储时间应满足h,数据存储量不应低于。

2024-04-17 09:21:39 428

原创 关于数据大小端的部分问题

存入单个寄存器,直接将数据逆序就行了,对于多寄存器方式的存入或传输,在逆序后还需要将单个字节进行交换,所以需要加入一个交换的函数。写程序的时候碰到了数据写入数据库时需要对数据的大小端的处理,所以记录一下这个问题。00 01 00 02 00 03 00 04(高位在前低位在后的一个逻辑)04 00 03 00 02 00 01 00(低位在前,高位在后)具体怎么实现,我就不多说了,原理很简单。对于寄存器来说,小端模式符合存储的逻辑。附上我通用的转换代码。

2023-12-06 11:07:18 443

原创 关于哈希表的使用和原理

当要插入或查找一个数据时,先用哈希函数计算出它的哈希地址,然后在数组中找到对应的位置,如果该位置为空,就可以直接插入或返回查找失败;如果不同的键值产生了相同的哈希地址,就会发生哈希冲突(Hash collision),这时候需要采用一些方法来解决冲突,比如开放地址法(Open addressing)或链表法(Chaining)。大概用法就是通过查询对应的编号,来找到对应的函数,做一个函数的转绑,当然这只是哈希表的一种逻辑思路,哈希表的函数和使用逻辑都需要你自己去设计。

2023-11-28 08:41:19 402

原创 容器Vector的用法(基础版)

容器vector是一种C++标准库提供的动态数组,它可以存储任何类型的数据,并且可以根据需要自动调整大小。可以使用resize、reserve、shrink_to_fit等方法调整容器的大小和容量。可以使用emplace、emplace_back等方法在容器中直接构造元素,提高效率。可以通过下标或迭代器访问元素,支持随机访问,时间复杂度为O(1)。可以使用范围for循环遍历元素,或者使用STL算法对元素进行操作。可以在尾部插入或删除元素,时间复杂度为O(1)。

2023-11-14 11:53:50 111

原创 Linux下的基本ip操作

destination是目标主机的IP地址或主机名,例如:192.168.10.12。ifconfig eth0 192.168.10.1(随意举例个ip)ifconfig eth0 up(以第一个网口举例子)

2023-11-06 16:38:24 91

原创 modbus的网络传输组帧结构

即:00 00(事务标识符) 00 00(协议标识符) 00 0x(数据帧长度) 0x(单元标识符) 0x(功能码) 00 0x(起始寄存器地址) 0x(收取的数据字节数) 00 0x 00 0x 00 0x......00 0x 00 0x 00 0x(数据)即:00 00(事务标识符) 00 00(协议标识符) 00 0x(数据帧长度) 0x(单元标识符) 0x(功能码) 00 0x(起始寄存器地址) 00 0x(收取的数据字节数)modbus网络传输采用以下组帧方式。

2023-10-20 11:21:44 135

原创 如何在SecureCRT上连接服务器并更新代码

通过mkdir -p myfilename 在自己的根目录下创建文件夹,myfilename是文件夹名称,可自定义。svn co URL 注:URL是你在svn上建立的仓库地址,svn上传你的文件数据即可获取URL。svn up 在myfilename文件夹下使用该指令,可以更新svn上同步更新的数据内容。使用cd ..可退出到服务器下各服务器成员目录,进入其他服务器成员拿取资料和文件。获取完后,myfilename 文件夹内即存在svn上的文件数据。用户名填写你在该服务器申请的ip账号。

2023-10-20 11:02:51 144

原创 win下串口异步通讯示例解析

根据你的具体需求,你可能需要在读写完成后调用相应的回调函数(如ReadCompletionRoutine。找了太多太多资料,就是没找到一篇完完整整的串口异步通讯,那我就自己写一个示例吧。和WriteCompletionRoutine。

2023-09-14 14:07:54 335

原创 CreateFile详解

FILE_SHARE_READ 或 FILE_SHARE_WRITE 表示允许对文件进行读/写共享访问;·FILE_FLAG_DELETE_ON_CLOSE:关闭了上一次打开的句柄后,将文件删除。·FILE_FLAG_SEQUENTIAL_SCAN:针对连续访问对文件缓冲进行优化。·FILE_FLAG_WRITE_THROUGH:操作系统不得推迟对文件的写操作。·FILE_FLAG_RANDOM_ACCESS:针对随机访问对文件缓冲进行优化。·FILE_ATTRIBUTE_READONLY:文件为只读。

2023-09-12 16:12:09 250

原创 C++String对象转换char类型数组

具体过程就是先将寄存器地址中的数据取出来,寄存器数据大小为8个字节,那就使用8个字节类型的对象来取数据,再将取数据的对象转换成对应大小的字节数组,再将数组通过to_string转换成string类型,再建立对应大小的数组,通过拷贝将字符串拷贝到数组中去。我的解决思路是这样的,既然我要拿到这个数据,那就先把数据从寄存器中取出来,寄存器的配置大小为八个字节,所有我设置一个 unsigend long long类型,大小为8个字节。最后,将该字符串存储在一个 char 数组中。

2023-09-06 19:22:27 544

原创 遥信、遥测、遥控、遥调的具体作用

遥信、遥测、遥控、遥调技术的应用,可以实现对储能系统的远程监控和控制,提高储能系统的可控性和灵活性,同时也可以提高储能系统的安全性和可靠性。遥测:功能码04(只读),主要用于记录设备的参数信息,例如温度、电压、电流、SOC、SOH等。遥调:功能码03、10、16(读写),主要针对于远程或就地对储能设备下达策略,实现具体的命令。遥信:功能码02(只读),使用位域(BIT)记录数据项,主要用于记录告警信息、故障信息。遥控:功能吗03(只写),多用于控制设备升级。

2023-09-05 16:40:56 1872

原创 关于PCS的基础认知和基础知识

实现 PCS 的方法有很多种,其中最常见的是采用电力电子器件,如 IGBT(绝缘栅双极晶体管)、MOSFET(金属氧化物半导体场效应晶体管)等,通过控制这些器件的开关状态来实现直流-直流转换、直流-交流转换、功率因数校正等功能。总的来说,PCS 是电池管理系统中的重要组成部分,它通过将电池的直流电转换为适合外部设备使用的交流电或直流电,为电池管理系统提供了更加灵活的电力输出方式,同时也提高了电池管理系统的可靠性和安全性。开关状态:包括 PCS 中所有开关的开关状态,如开关是否闭合、是否打开等。

2023-09-05 16:27:33 2496

原创 EMS设计工艺与流程介绍

上位机:逻辑上来说在本软件之上的系统,包括但不限于:触控屏、生产调试软件(modbus的调试仿真软件Mthing、组态读取和设置软件CL790D.exe、modbuspoll、SecureCRT等)、EMS、PCS、BMS。3.电池健康状态(SOH):显示电池模块的健康状态,如健康、衰减、维护等。6.故障信息:显示电池模块的故障信息,过压、欠压、过温等。4.与总控通讯,上传电池信息(标注要求100ms电池信息,实际大部分是1s,电池信息一般给BA和EMS保存)。1.电池状态(正常、异常、故障)。

2023-08-29 10:36:24 683

原创 电池管理系统的技术规范

2.综合充放电分析应能按区域、电压等级、自定义群组、分布式储能项目等类别对象,以日、月、季、年或其他时间段等时间维度对系统采集的电能量进行组合分析,包括统计电能量查询、电能量同比/环比分析、电能量峰谷分析和排名等。监控系统应具备接受分布式储能系统公关连接点、并网点、储能变流器、储能本体、运行环境等的模拟量、状态量、报警信息与保护动作及其他数据的功能。监控系统典型硬件配置应包括数据库服务器、前置服务器、应用服务器、安全网关、通信服务器、工作站、网络设备、安全防护设备、卫星对时设备等。

2023-08-28 16:13:14 156 1

原创 电池储能技术的标准与发展

应包括电压越限、电压极差越限、簇电流越限、温度越限、簇内电池单体温度极差越限、绝缘电阻越限、电压采集线异常、温度采集线异常、电池簇充放电回路异常、通信异常等,对于两簇以上电池直流端并联的锂/钠离子电池等还应具有电池簇间环流越限报警。电池管理系统应具有对电池系统配置参数,电池正常运行截止参数,异常状态的报警阈值盒保护阈值等参数进行设置的功能,除此之外还应具有参数设置的权限功能,就地参数设置和远程参数设置的功能。电池管理系统应具有对电池簇绝缘电阻的检测功能:当接收到外部其他设备启动绝缘检测功能是应自动关闭。

2023-08-28 14:15:09 424 1

原创 EVBMASoft-V2.3.5.6、CAN盒、modbuspoll的使用

若时使用modbuspoll通讯,则将读取的IP填写至modbuspoll的TCP/IP中。点击系统设置、ESBCME/EVIBMM参数设置,读取参数。若有多余弹窗,表示使用的是教育版,只有三十天试用时间。根据CAN盒的型号去下载对应的驱动。点击系统设置、通讯设置,设置如下。下载对应驱动后将驱动连接。具体连接根据实际情况。BC插入网线,确保联网。如何向寄存器读取或写入。

2023-08-28 09:03:19 252 1

原创 电网知识:模电数电

设置:a相电压为240,b相电压为240,c相电压为240,a相电流为2.5,b相电流为2.5,c相电流为2.5。假设电感电阻为R(欧姆),电感值为L(亨利),线电压为U(伏特),电感电流为I(安培),电网频率为f(赫兹)。ab线电压 = |a相电压 - b相电压| = |240V - 240V| = 0V。bc线电压 = |b相电压 - c相电压| = |240V - 240V| = 0V。ca线电压 = |c相电压 - a相电压| = |240V - 240V| = 0V。

2023-08-18 10:16:34 286 1

原创 C++中的Using的四种用法

在C++中,函数重载是指在同一个作用域中定义多个同名函数,但它们的参数列表不同。关键字也可以用于引入命名空间中的成员,使得我们可以直接使用这些成员而不必使用完整的命名空间限定符。来引入重载函数,可以让它们在同一个作用域中可见,并且可以根据调用时的参数类型选择正确的重载函数。关键字可以用来声明类型的别名,使得我们可以用一个短的、易于理解的名称来代替较长或复杂的类型名。命名空间中的所有成员引入到当前的命名空间中,让我们可以直接使用。,使得我们可以直接使用它们,而不必使用完整的命名空间限定符。

2023-08-18 09:13:03 1594 1

原创 关于modbus仿真软件的参数配置

给定数值范围是0~1000和分辨率为0.1,我们可以计算取值范围的数量。取值范围的数量等于数值范围除以分辨率再加1。取值范围数量 = (最大值 - 最小值) / 分辨率 + 1。小数位数只是作为显示有几位小数使用,无实际意义。关于小数位数、偏移、系数。

2023-08-17 15:31:23 128 1

原创 功能码02modbus协议数据帧排列问题

2023-08-17 14:55:29-941]COM6-接收:01 02 00 01 00 3a a9 d9。

2023-08-17 15:16:28 123 1

原创 SVN更新后代码出现错误,且删除代码文档后再次更新后依然存在

并进行再次更新,出现问题的原因:cn文件夹下存在之前的参数设置,导致出现影响,应该清理cn文件夹下的文件,让代码重新加载。对于SVN更新后代码出现问题,且多次更新依然存在问题时,应选择删除D盘下fafile文件夹下的cn文件夹。

2023-08-16 15:00:14 312 1

原创 往modbus寄存器地址写数据

在*.cpp文件中设置数据库寄存器地址,并通过Readitm(),读取已经通过组态设置的值。往*.h文件中定义和声明。

2023-08-15 09:33:03 127

原创 pcs部分寄存器地址

bit13:BMS干接点输入;bit14-bit15:保留;bit5:远程/就地状态;bit2:运行状态;bit3:总故障状态;bit6:急停输入状态;bit4:总报警状态;bit0:停机状态;bit1:待机状态;bit7:并网状态;bit8:离网状态;bit9:过载降容;

2023-08-14 14:13:21 91

原创 list容器详解

当你需要在C++中处理一个线性列表时,可以使用list容器。list是一个双向链表容器,提供了高效地插入和删除元素的能力。以下是有关list。

2023-08-10 18:05:42 93 1

原创 C++迭代器详解

迭代器是一种用于遍历容器中元素的对象,它提供了对容器中元素的访问和操作方法。在C++中,不同类型的容器提供了不同种类的迭代器。接下来,我将详细介绍迭代器的类型和使用方法,并提供相应的代码演示。迭代器在C++中的具体头文件取决于所使用的容器类型。不同的容器类有不同的迭代器类型和对应的头文件。运算符递减迭代器,使其指向前一个元素(适用于双向迭代器和随机访问迭代器)。运算符解引用迭代器,访问迭代器当前指向的元素。声明迭代器类型和迭代器对象。函数获取容器的起始迭代器。函数获取容器的终止迭代器。

2023-08-10 17:59:38 272 1

原创 C++中SetCommMask的作用和使用方法

SetCommMask()函数用于设置要监视的串口事件,通过指定相应的事件掩码,可以选择监视需要的事件类型。在事件发生时,可使用WaitCommEvent()函数等待事件的发生并采取相应的处理措施。在C++中,SetCommMask()是Windows API提供的一个函数,用于设置串口通信的事件掩码。

2023-08-09 18:12:34 303 1

原创 C++中SetupComm的作用和使用方法

在C++中,SetupComm()是Windows API提供的一个函数,用于设置串口通信的缓冲区大小。

2023-08-09 18:10:57 554 1

原创 C++中CreateFile、ReadFile和WriteFile的作用和使用方法

需要注意的是,上述函数中的句柄变量(如hFile)必须是有效的句柄,而且对应的文件或设备必须已经成功打开。同时,我们还可以根据具体需求设置其他参数,如读写操作的偏移量、重叠(overlapped)方式等。在C++中,CreateFile、ReadFile和WriteFile是一组用于文件和设备IO操作的函数。

2023-08-09 18:02:32 1493 1

原创 C++的ResetEvent的作用和使用方法

需要注意的是,ResetEvent函数只是将事件对象的状态重置为非触发状态,并不会清除事件对象。如果需要清除事件对象,可以使用CloseHandle函数关闭事件对象的句柄。ResetEvent函数的作用是将事件对象的状态重置为非触发状态。当事件对象处于非触发状态时,任何等待该事件对象的线程都会被阻塞,直到事件对象被触发。创建事件对象时,需要指定事件的初始状态。在C++中,ResetEvent函数用于将指定的事件对象重置为非触发状态。重置事件对象后,等待该事件对象的线程将会被阻塞,直到事件对象被触发。

2023-08-09 17:53:21 270 1

原创 c++类的知识总结

【代码】c++类的知识总结。

2023-08-09 14:37:07 242 1

原创 c++中的类型转换

在C++中,可以使用不同的类型转换来将一个值从一种类型转换为另一种类型。

2023-08-09 14:16:36 63 1

原创 关于智能指针以及智能指针的后续处理措施

类型的智能指针管理着它所拥有的对象的内存,通过自动调用析构函数释放内存。函数可以直接利用这个右值引用,在向量的末尾就地构造对象,而不需要额外的移动或拷贝操作。函数可以在向量的末尾就地构造对象,避免了不必要的复制或移动操作,提高了代码的性能和效率。它可以直接在向量的末尾就地构造对象,省去了拷贝或移动的开销。函数接受构造函数的参数,并使用这些参数在向量的末尾就地构造新的对象。提供的成员函数,用于返回指向所拥有对象的原始指针。智能指针内部的原始指针,并将其作为参数传递给需要原始指针的函数。类型的指针作为参数。

2023-08-09 13:46:23 85 1

原创 组态数据读取失败

接下来,根据 bProto 的值,通过 switch 语句选择不同的协议。如果 bProto 等于 Proto00_Clou,则创建一个 CFaProto 类的实例,并将其转换为 CProto 类的指针赋给 pProto。最后,如果 pProto 不为 nullptr,则将通信接口和协议进行绑定,即调用 AttachIf 函数将 pProto 和 pLocaCommIf 绑定,然后调用 AttachProto 函数将 pLocaCommIf 和 pProto 绑定。最终,函数返回 pProto。

2023-08-09 10:52:33 103 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除