(0)Lora及LoraWAN

news/2024/4/16 22:29:45

Lora和LoraWAN的区别

LoRa经常被误用来描述整个LPWAN通信系统,其实Lora是Semtech拥有的专有调制格式。 SX1272和SX1276 LoRa芯片使用称为chirp扩频(CSS)的调制技术来组成技术栈的物理层(PHY)。

LoRaWAN是一个开放标准,它定义了基于LoRa芯片的LPWAN技术的通信协议。 LoRaWAN在数据链路层定义媒体访问控制(MAC),由LoRa联盟维护。 LoRaWAN是一种媒体访问控制(MAC)层协议,专为具有单一运营商的大型公共网络而设计。

总体而言,LoRa仅包含链路层协议,并且非常适用于节点间的P2P通信;LoRaWAN也包含网络层,因此可以将信息发送到任何已连接到云平台的基站。

Lora及LoraWAN层级关系

LoRa = PHY Layer
LoRaWAN or Symphony Link = MAC Layer

Lora的一些知识点介绍

Lora调制方式优势

1、LoRa扩频调制解调技术使器件传输距离远远超出现有的基于 FSK 或 OOK 调制方式的系统,能到25公里以上的距离;
2、它还提供了很大的灵活性,用户可自行决定扩频调制带宽(BW)、扩频因子(SF)和纠错率(CR)。
3、每个扩频因子均呈正交分布,因而多个传输信号可以占用同一信道而不互相干扰,并且能够与现有基于 FSK 的系统简单共存。
4、LoRa调制解调器采用专利扩频调制技术。与传统调制技术相比, LoRa可以增加链路预算并增强对带内干扰的抗干扰能力。同时,放松了对晶体基准振荡器的频率容限要求,从而能够在降低系统成本的基础上提高性能。

SX1276/77/78 器件与关键参数

图中可以看出,sx1276功能和频段覆盖是最完善的,可以针对欧洲标准、美国标准、中国标准、国际标准市场,目前中国一般使用的是sx1278(iot520芯片);
SX1278接收灵敏度-148dbm,接收电流10.3mA,包长最大256个字节(Payload有效字节长度)。实际LoraWAN在SF7模式下只使用到了222个字节。

SX1276/77/78 器件频段、功率硬件控制

1、SX1276/77/78 配备了三个不同的射频功率放大器。其中两个分别与 RFO_LF 和 RFO_HF引脚连接,能够实现高达+14dBm 的功率放大功能。第三个功率放大器与 PA_BOOST 引脚连接,能够通过专门的匹配网络实现高达+20dBm 的功率放大功能。与高效功率放大器不同的是,这个高稳定性功率放大器能够覆盖频率合成器处理的所有频段。
RFO_LF 主要针对LF频段( 低频段169M和433M、470M),RFO_HF主要针对高频频段(868M-915M),而PA_BOOST能覆盖所有频段,一般现在设计使用PA_BOOST引脚,能保证+20dBM的发送功率。

2、SPI通信可以达到10M,一般LoraWAN时要求使用10M保证SPI通信时间可以忽略。

电源策略

SX1276/77/78在整个工作温度及操作电压范围内采用内部电压调控机制,以保证电压及器件特性的稳定性。 在1.8V-3.7V电压范围内, +17dBm输出功率保持稳定,以及保证2.4V-3.7V电压范围+20dBm输出功率保持稳定。

BW、SF、CR、RSSI、SNR值

  • 扩频调制带宽(BW):增加信号带宽,可以提高有效数据速率缩短传输时间,但会牺牲灵敏度。 一般使用125K
    注意: 较低频段( 169 MHz )不支持 250kHz 和 500kHz 的带宽。
  • 扩频因子(SF):SF7~SF12,还有一个比较特殊的SF6一般很少使用,要使用时对寄存器操作要做特殊的操作。
  • 纠错率(CR):一般使用4/5
    前向纠错技术
    信道编码之所以能够检出和校正接收比特流中的差错,是因为加入一些冗余比特,把几个比特上携带的信息扩散到更多的比特上。为此付出的代价是必须传送比该信息所需要的更多的比特。
    为进一步提高链路的鲁棒性, LoRaTM调制解调器采用循环纠错编码进行前向错误检测与纠错。使用这样的纠错编码之后,会产生传输开销。
    在存在干扰的情况下,前向纠错能有效提高链路的可靠性。由此,编码率(及抗干扰性能)可以随着信道条件的变化而变化——可以选择在报头中加入编码率以便接收端能够解析。有关LoRaTM数据包及报头的更多信息。
  • 接收信号强度指示(RSSI):常规情况下,公式是这样:
/*
RSSI (dBm) = -157 + Rssi, (高频口) 
RSSI (dBm) = -164 + Rssi, (低频口) 
另外在SNR<0的噪声环境下,要按照
Packet Strength (dBm) = -157 + PacketRssi + PacketSnr*0.25 (或者低频时,Packet Strength (dBm) = -164 + PacketRssi + PacketSnr * 0.25)这样的公式。
1.PktRssiValue指单个包的信号强度,是收包这段时间内的RSSI的平均值。RssiValue指当前的信号强度。 
2.数值-157以及-164会根据实际射频前端情况有差异(比如 LnaBoost 表示是否有外部LNA 这个数值与实际LNA的输入不匹配)。建议对RSSI数值做单点校准,让RSSI显示更准确。 
3.当信号强度超过-100dBm之后,PacketRssi就不能保证线性,结果会偏离 1dB/dB 的曲线。因此需要做一定的校正。当SNR>0时,可以参考如下公式:RSSI = -157+16/15 * PacketRssi (or RSSI = -164+16/15 * PacketRssi)。当然SNR<0时,还要注意同样做噪声干扰的校正,在公式后面 + PacketSnr * 0.25*/

在纯净环境下,RSSI跟与距离是一个非线性曲线的关系,所以路测时在一定距离内RSSI值有参考价值,过距离后基本没有参考价值。

基本表现为:太近、太远RSSI变化并不太明显,而中间有一段距离表现比较明显;但是,RSSI值受环境影响太大,一般情况下仅供参考使用。

  • 信噪比(SNR):
    SNR:Signal-to-Noise Ratio即信噪比。信噪比这个概念具有统一的计算方法:
    SNR(dB)=Signal(dBm)/Noise(dBm)
    上式的意思是信噪比等于信号的功率减去噪声的功率。在没有干扰的情况下(也即电磁环境绝对干净的情况下)噪声功率是由自然界的环境决定的我们称之为基底噪声(Noise Floor)。当然我们也可以把基底噪声和其它干扰统称为噪声。
    SNR值可以作为RSSI值的一个补充。

Lora的数据包结构

前导码Preamble:前导码用于保持接收机与输入的数据流同步。
默认情况下, 数据包含有12个符号长度的前导码。 前导长度是一个可以通过编程来设置的变量,所以前导码的长度可以扩展。接收机的前导码长度应与发射机一致。如果前导码长度为未知或可能会发生变化,应将接收机的前导码长度设置为最大值。
可以通过设置前导码值进行地址过滤,实现分组通信。
报头Header:分显示报头(默认模式)和隐式报头;
显示报头包括:
 以字节数表示的有效负载长度;
 前向纠错码率;
 是否打开可选的16位负载CRC。
报头按照最大纠错码(4/8)发送。
有效数据Payload:真正发送的数据
Payload CRC:对Payload数据的CRC校验

空中传输时间

已知扩频因子(SF)、编码率(CR)及信号带宽(BW),可以使用提供的公式计算出单个LoRa数据包的总传输时间,在LoraWAN需要知道每次数据传输在空中的传输时间。

LoRa跳频

当单个数据包时间可能超过相关法规允许的最大信道停留时间,一般采用跳频扩频技术(FHSS);FHSS方案的工作原理为:每个LoRa数据包的部分内容通过在微控制器MCU管理的频率查询表中选取的跳频信道进行发送。在预定的跳频周期结束之后, 发射机和接收机切换到跳频预定义列表中的下一个信道,以便继续发送和接收数据包的下一部分内容。

占空比(DutyCycle)

节点发射LoRa数据的时间t1与发射周期T的比值就是占空比。占空比跟国家无线电管理的相关规定有关系,占空比满足不了国家法律时过国家相关认证会比较麻烦。
例如:470频段占空比要求为 1%,节点使用该频段某个信道发送一组数据耗时 10 ms,那么这个节点的本次发送周期为T1。节点在本周期结束,也就是 T1−10 ms 以后才可以再次发送数据。
T1=10/%=1000ms,需要等待 1000−10=990ms 才可以再次发送。
当占空比无法满足国家法律时,通过跳频手段可以解决。

信道活动检测(CAD)

可使用信道活动检测器来检测其他LoRa信号是否占用了本信道;可以一定程度上减轻信道冲突问题。

SX1276状态机

状态名称
IdleMode1: 睡眠模式
FromStart00:进入 LowPowerSelection 状态
LowPowerSelection1:进入空闲状态
FromIdle1:发生 T1 中断时进入接收状态
FromReceive110:发生 PreambleDetect 中断时进入定序器关闭状态

状态间切换跟监听模式有一定的关系。

LoraWAN的一些知识点介绍

LoraWAN网络的射频芯片介绍

主要组成sx1276/77/78芯片作为终端芯片;sx1301+2片sx1255/1257作为基站芯片;
Lora 470M频段有96路上行,48路下行;上、下行的通信信道是不相同的。而上行信道对应的下行信道有一定的算法关系。

sx1301+sx1255/57

SX1301一般外接2片SX1257(或SX1255)。SX125x是射频前端芯片,它负责将I/Q(In-phase / Quadrature,同相正交数字信号)转换成无线电模拟信号。
1255支持的频段为400~510M,1257为862~1020M

SX1301的结构图,它是由2个MCU和ASIC(ApplicationSpecific Integrated Circuit,专用集成电路)的综合体。主要部件包括:
射频MCU:该MCU通过SPI总线连接2片SX125x,主要负责实时自动增益控制、射频校准和收发切换。
数据包MCU:该MCU负责分配8个LoRa调制解调器给多个通道,它仲裁数据包的机制包括速率、通道、射频和信号强度。
IF0~IF7的LoRa通道:它们的带宽固定为125kHz,每个通道可以设置中心频率,每个通道可以接收SF7~SF12共6种速率的LoRa信号。
理论上可以同时处理6*8=48个终端的上行数据,但是它只有8路LoRa解调器,所以一个通道(IF0~IF7)接收了6个正交数据包,解调器也只负责处理其中一个。
IF8通道:带宽支持125 / 250 / 500kHz,用于基站之间的高速通信。
IF9通道:收发(G)FSK信号,LoRaWAN在欧洲地区使用了该通道。

一般基站设计时,推荐使用GPS作为标准时钟信号源(误差50ns)

LoraWAN网络本该是个大角色

虽然目前LoraWAN在中国的前景貌似只能走小型私网为主(运营商没有主推),但是LoraWAN天生就比较适用于大型公共网络,而不是私网; 目前LoraWAN公网在欧洲发展得比较快。

Lora的调制方式导致通信速率很慢,数据在空中传输的时间是比较长的,信道只有96路上行48路下行(中国470标准),在单一区域如果有多个LoraWAN网络,就更容易产生碰撞问题;由于网络可能来自不同厂家,这种碰撞是无法单方面避免的。

LoraWAN的网络结构

LoraWAN采用星型拓扑结构,由后台服务器统一管理,能比较好的解决多基站多节点的接入问题;每个节点将数据传输到一个或多个基站。然后基站将数据转发到网络服务器,在网络服务器对信息进行必要的处理。
终端设备可能用任何可用的信道、任何可用的通信速率通信,终端的每次通信以伪随机的方式改变通信信道。

后台服务分运营商服务和应用商服务。

LoraWAN通信

通信模式CLASS A CLASS B CLASS C

所有LoRaWAN设备至少实现了CLASSA的功能。此外,他们还可能实现了CLASS B,CLASS C或被其他人自定义的功能。

  • CLASSA 双向终端设备
    每一个终端设备的上行传输,跟随两个短的下行接收窗口。每次只能先终端上行数据才能收到基站的下行数据;CLASSA适用于超低功耗终端系统的应用。
  • CLASSB 带接收时隙的双向终端设备
    除A类随机接收窗口,B类设备中在计划的时间打开额外的接收窗口。在计划的时间中接收到来自基站的同步信标(Beacon帧)。
  • CLASSC 最大接收时隙的双向终端设备
    C类有近连续打开接收窗口的终端设备,只有发射时才关闭接收。
    本次主要针对CLASS A模式下进行介绍。

Message type 消息类型,通信命令

000     Join Request                Join请求帧
001     Join Accept                 Join接受帧
010     Unconfirmed Data Up         上行非确认帧
011     Unconfirmed Data Down       下行非确认帧
100     Confirmed Data Up           上行确认帧
101     Confirmed Data Down         下行确认帧
110     Rejoin Request               Rejoin请求帧
111     Proprietary                 (自定义专有帧)

MAC commands MAC层命令

MAC层命令(最大15个字节)可以夹带在上、下行数据中, MAC层命令对于应用程序、应用服务器以及终端上的应用程序来说都是不可见的。
Link Check commands (LinkCheckReq, LinkCheckAns) :链路检测
Link ADR commands (LinkADRReq, LinkADRAns) : ADR设置
End-Device Transmit Duty Cycle (DutyCycleReq, DutyCycleAns):占空比设置
Receive Windows Parameters (RXParamSetupReq, RXParamSetupAns) :接收窗口参数设置
End-Device Status (DevStatusReq, DevStatusAns) :设备状态
Creation / Modification of a Channel (NewChannelReq, NewChannelAns) :信道修改
Setting delay between TX and RX (RXTimingSetupReq, RXTimingSetupAns) :设置接收窗口时间

Join过程

网络在建立之初,终端设备启动后需要向服务端发起Join请求(接入请求),只有在接入请求得到成功答复,并根据答复配置相关参数后,终端才算成功加入网络。Join成功后才能进行数据的上行、下行通信。
Join过程、CLASS A等模式下,服务器、终端之间约定了两个下行接收窗口(时间窗口)来实现数据的交互。一般通信方式为:终端上行数据包后进入低功耗模式,等到约定的时间窗口后开始进入接收模式,接收服务器下行来的数据。
在Join之前要了解一下Receive Windows概念。

接收窗口Receive Windows
在每次上行传输的终端设备打开两个短的接收窗口。接收窗口开始时间是一个配置周期的传输结束的最后一个上行比特。 终端在上行结束后考虑到功耗等问题不会立即进入接收模式,低功耗到合适时机再打开接收,接收下行数据。此协议约定了两个窗口,数据只会在其中一个窗口中接收到。 开窗时间误差要求为+/- 20us

First receive window:第一接收窗口,一般第一接收窗口的信道值是上一次上行信道对应的下行信道值,而通信速率相同。
Second receive window:第二接收窗口,一般第二窗口的信道值和数据速率是不变的,但是可通过MAC命令修改的第二接收窗口的频率和数据速率。
接收窗口持续时间
接收窗口的长度必须至少为有效地检测的下行链路前同步码(前导码)所要求的终端设备的无线电收发机的时间。比如同为12字节的前导码,SF7和SF12的有效监测时间是不同的。
基站发送数据要求
如果网络打算发送的下行链路到一个终端设备,必须在接收窗口(两个之一)开始之前发起传输。
终端发送数据要求
一个终端不得发送另一个上行消息给基站,除非它已经接收在上次发送的第一或第二接收窗的下行基站消息,或者前一次传输的第二接收窗口已过期。

Join-request Join请求主要信息

Join-request信息包含终端的AppEUI、DevEUI及随机的DevNonce(2字节)。
DevNonce是一个随机值,主要用于重放攻击;在Join过程中要求服务器对每个终端保留一定数量的DevNonce历史值(一般5个以上);当检测到某次Join时值为DevNonce历史值则判断为发生了安全问题,将直接拒绝本次Join。

Join-accept Join接受主要信息

1) 假如终端被允许接入网络,网络服务器将用join-accept响应终端的join-request请求。Join-accept信息将像普通的下行一样的发送,只不过会使用JOIN_ACCEPT_DELAY1 或JOIN_ACCEPT_DELAY2,而不是分别用RECEIVE_DELAY1和RECEIVE_DELAY2 这样的延时。
2) Join-accept信息中包含3字节的App应用随机数(AppNonce),一个网络标示(NetID),一个设备地址(DevAddr),一个TX和RX之间延时(RxDelay)以及一个终端正在加入的网络的频率信道列表选项(CFList)。 以后该终端的通信将随机使用该CFList信道值。
DevEUI是IEEE标准中的全球终端ID;EUI64地址空间是终端的全球唯一标示。相当于是设备的MAC地址。
AppEUI是IEEE标准的全球APP应用ID,EUI地址空间是终端APP应用供应商的唯一标示。
所述AppEUI、DevEUI在执行激活过程之前就被存储在终端中。DevEUI AppEUI需要向相关机构申请。
AppNonce是一个随机值或者基于某些形式的由网络服务器提供的唯一ID值,AppNonce用于终端导出NwkSKey和AppSKey两个会话密钥;作为网络安全登录的一个参与变量。
NetID格式如下:低7位(LSB)命名为NwkID与前面章节所述的的7位MSB短地址相匹配。相邻或者重叠的网络必须具有不同的NwkIDs。剩下的17个高位可以由网络运营商任意选择。
NetID不同运营商或者漫游网络标识。
**AppKey**AES-128加密/解密密钥,该密钥由应用程序所有者分配给该终端设备。
设备地址(DevAddr)由当前运营商网络提供的设备地址。终端提供了DevEUI、AppEUI,服务器将答复一个DevAddr和一个随机的AppNonce,以后通信就直接可以用DevAddr通信了,而AppNonce则是密钥产生者。

配网方式

终端要加入LoRaWAN网络,有2种方法完成入网:ABP(Activation by Personalization,个性化激活)和OTAA(Over-the-Air Activation,空中激活)。

ABP方式

一般向服务器端提供终端的DevEUI,由服务器端生成:设备地址(DevAddr),APP应用标示(AppEUI),网络会话密钥(NwkSKey),APP应用密钥 (AppSKey)信息并将该信息写入终端中,终端重启后将直接接入基站(没有Join过程)。

OTAA方式

终端Join之前必须要明确以下信息:全球唯一终端标示(DevEUI)、APP应用标示(AppEUI)、AES-128加密/解密密钥(AppKey)。
终端Join以后将保存:设备地址(DevAddr),APP应用标示(AppEUI),网络会话密钥(NwkSKey),APP应用密钥 (AppSKey)信息。
NwkSKey、AppSKey都是基于由AppNonce、AppKey、NetID 等参数经过一定的算法得出。
NwkSKey仅作用于MIC校验(数据完整性校验)和和Payload MAC层相关的加密;如MAC commands操作。
AppSKey APP应用会话密钥。网络服务器和终端通过AppSKey加密和解密Payload字段中APP应用程序特定数据信息。它也可以用来计算和验证包含在Payload字段中应用程序特定数据消息的应用程序级的MIC。
终端并没有设置任何形式的网络密钥,相比ABP而言OTAA方式可以自动接入任意运营商的网络。
安全性评估:NwkSKey为运营商级的网络密钥不能解析数据,而AppSKey是应用商级的密钥;这样能保证运营商无法获取到应用商的真实数据,保证了应用商数据的安全性。

指令解析
010Unconfirmed Data Up上行非确认帧
011Unconfirmed Data Down下行非确认帧
100Confirmed Data Up上行确认帧
101Confirmed Data Down下行确认帧

使用DevAddr与基站通信

Fopts 携带的是MAC cmd指令(如果有的话)
FRMPayload 为实际要上行的数据

470M频段(中国)特性

同步字长度要求

ModulationSync wordPreamble length
LORA0x348 symbols
GFSK0xC194C15 bytes

96路上行,470.3 MHz 每 200 kHz递增一个到 489.3 MHz,SF7~SF12 4/5
48路下行,500.3 MHz 每 200 kHz递增一个到 509.7 MHz,SF7~SF12 4/5
• 默认发送功率 14 dBm.
• 125 kHz BW 最大至 +17 dBm.
• 传输时间不大于 5000 ms.
• 所有终端必须支持96路信道
• Join过程中要求从SF7~SF12并从96路信道中随机挑选一个接入

JoinResp CFList 信道列表分配

Join答复中,服务器将信道列表带给终端;以后终端将以这些信道值与基站通信。

Size (bytes)[2][2][2][2][2][2][3][1]
CFListChMaskChMaskChMaskChMaskChMaskChMaskRFUCFListType

信道分配列表,从470.3 MHz开始,每200 kHz一个,一直讲96个分配完。

LinkADRReq ADR请求信道分配列表

当终端开启了ADR后,服务器检测到要启动ADR时,将发生LinkADRReq重新配置终端的通信速率、发生功率和信道列表。

ChMaskCntlChMask applies to
0Channels 0 to 15
1Channels 16 to 31
2Channels 32 to 47
3Channels 48 to 63
4Channels 64 to 79
5Channels 80 to 95
6All channels ONThe device should enable all currently defined channels independently of the ChMask field value.
7RFU

Max Payload最大发送长度要求

DataRateMN(有控制域)
05951
15951
25951
3123115
4230222
5230222
6:15Not defined

Tx和Rx窗口信道的对应关系

第一窗口

Rx1第一窗口信道:Rx1 = |本次Tx信道-48|;如本次Tx为49、47信道,则下行信道为1信道。
Rx1第一窗口DR值选择:

取决于RX1DROffset (0~7)及上行的DR值,目前RX1DROffset4~7预留

第二窗口

• DR值保持与第一窗口相同
• RX2 信道值 = DevAddr%48,当然也可以通过MAC commands修改。

470M频段默认配置参数

RECEIVE_DELAY1          1 s
RECEIVE_DELAY2          2 s //(must be RECEIVE_DELAY1 + 1s)
JOIN_ACCEPT_DELAY1      5 s
JOIN_ACCEPT_DELAY2      6 s
MAX_FCNT_GAP            16384
ADR_ACK_LIMIT           64
ADR_ACK_DELAY           32
ACK_TIMEOUT             2   //+/- 1 s (random delay between 1 and 3 seconds)

MAX_FCNT_GAP: 为接收方会同步保存接收数据的的帧号,对比收到的增加过的值和当前保存的值如果两者之差大于 MAX_FCNY_GAP 就说明中间丢失了很多数据然后就会丢掉这条数据。
ADR_ACK_LIMIT ADR_ACK_DELAY: 如果终端的数据速率经过网络优化比最低速率大,那节点就要定期检查保证服务器仍然能够收到上传的数据。 终端上行的帧计数器每递增一次(重传时计数器不递增)的同时,设备的 ADR_ACK_CNT 计数器也递增。如果 ADR_ACK_LIMIT (ADR_ACK_CNT >= ADR_ACK_LIMIT)次上行之后没有收到下行回复,就会设置 ADR 请求响应位(将 ADRACKReq 设为1)。此时要求网络在接下来的 ADR_ACK_DELAY 次上行之内做出响应,在任何一次上行后收到下行数据,节点都会重置计数器 ADR_ACK_CNT。在此期间的下行数据不需设置ACK位,因为终端在等待接收期间收到任何应答都表示网关还能接收来自该设备的上行数据。如果在接下来 ADR_ACK_DELAY 次之内(比如:总共发送次数 ADR_ACK_LIMIT + ADR_ACK_DELAY)没有收到回复,就切换到更低的数据速率上,以获得更远的射频传输距离,并重复上述过程7。终端设备每达到 ADR_ACK_DELAY 就会再次降低自己的数据速率。

LoraWAN的使用场景

低数据量、容忍高时延的非移动(或偶尔移动)的终端设备


http://www.ppmy.cn/news/524745.html

相关文章

达梦数据库之是否以字符为单位

CHARSET/UNICODE_FLAG 字符集(0)&#xff0c;可选值&#xff1a;0[GB18030]&#xff0c;1[UTF-8]&#xff0c;2[EUC-KR] LENGTH_IN_CHAR VARCHAR类型长度是否以字符为单位(N)&#xff0c;可选值&#xff1a;Y/N&#xff0c;1/0 取值&#xff1a;1、Y表示是&#xff0c;0、N表示…

TechCrunch Disrupt SF 来啦!快和小探看看本届都有哪些亮点?

硅谷Live / 实地探访 / 热点探秘 / 深度探讨 还记得美剧《硅谷》里Richard他们的创新公司是怎么拿到第一笔资金的吗&#xff1f;没错&#xff0c;人家是靠TechCrunch Disrupt 的“颠覆科技” Pitch 大赛拿到了奖金&#xff01; 图片来自网络&#xff0c;版权属于原作者 TechCru…

从重庆再出发:金康SERES两江智能工厂投产,SF5上海车展开启预订...

两年一度的上海国际车展再过几天就要开幕了&#xff0c;很多汽车品牌都会选在车展前进行造势&#xff0c;特别是这两年新造车势力的兴起&#xff0c;他们也加入到了这个行列之中。 4 月 10 日这天&#xff0c;在江苏常州&#xff0c;李想创办的车和家旗下的首款增程式电动车理…

GROUP_CONCAT用法

GROUP_CONCAT 是用于将分组后的多个行连接为一个字符串的聚合函数。它可以在 SELECT 查询中使用&#xff0c;并结合 GROUP BY 子句来实现对分组数据的字符串拼接操作。 GROUP_CONCAT 的一般语法如下&#xff1a; GROUP_CONCAT([DISTINCT] expression [ORDER BY clause] [SEPA…

9 月 18 日:美国旧金山 Blockchain Bridge SF | ArcBlock 预告

2019 年 9 月 18 日&#xff0c;ArcBlock 区块基石市场和商务总监 Matt McKinney 将出席 Blockchain Bridge SF 参加一个行业领先的圆桌讨论&#xff0c;与 Parity、以太坊经典实验室讨论区块链可扩展性和互操作性。 为期两天的 Blockchain Bridge SF 峰会聚焦于将开发者、设计…

从重庆再出发:金康SERES两江智能工厂投产,SF5上海车展开启预订

两年一度的上海国际车展再过几天就要开幕了&#xff0c;很多汽车品牌都会选在车展前进行造势&#xff0c;特别是这两年新造车势力的兴起&#xff0c;他们也加入到了这个行列之中。 4 月 10 日这天&#xff0c;在江苏常州&#xff0c;李想创办的车和家旗下的首款增程式电动车理…

net.sf.json.JSONNull[empty])异常解决方案

之前遇到这个问题的情况是&#xff1a;给App做转发接口的&#xff0c;当时的项目是存在和其他平台交互出现的问题&#xff0c;所以他们那边平台比较大&#xff0c;东西封装的比较多&#xff0c;可能他们的架构师当时没有想到这个问题&#xff0c;所以导致出现这个bug&#xff0…

IDEA导入maven中导入net.sf.json报错的解决方法

使用IDEA搭建Maven项目导入架包时&#xff0c; 添加net.sf.json的jar包的时候&#xff0c;代码如下&#xff1a; 在pom.xml文件时&#xff1a; <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version…

pom文件添加net.sf.json时报错

项目中涉及json转换&#xff0c;所以就在pom文件里面引入了net.sf.json&#xff0c;如下&#xff1a; <dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version> </dependency&…

听说你想 520 表白

又到520&#xff0c;一个狂虐单身狗的日子&#xff0c;看看知乎的热门话题&#xff1a; 这里给大家提供几个虐狗的新姿势。 69 表白从 69 开始&#xff0c;给对方发个网页 http://118.24.158.116:8888/loveyou.html 用浏览器打开&#xff0c;按Ctrlf 输入9&#xff0c;效果…

关于今天的异常:net/sf/ezmorph/Morpher

使用JSON&#xff0c;在SERVLET或者STRUTS的ACTION中取得数据时&#xff0c;如果会出现异常&#xff1a;java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher 是因为需要的类没有找到&#xff0c;一般&#xff0c;是因为少导入了JAR包&#xff0c; 使 用JSON时&#xff0c…

这个 SQL 语句加了哪些锁?

美团问数据库应该是非常多的&#xff0c;尤其喜欢考手写 SQL 然后问你这个 SQL 语句上面加了哪些锁&#xff0c;你会发现其他厂面试基本很少会这样考&#xff0c;所以很多小伙伴遇到这种问题的时候都是一脸懵逼&#xff0c;这篇文章就来详细总结下 InnoDB 存储引擎中的行锁的加…

趣味算法探索:栈和队列的神秘之旅

前言 在计算机科学中&#xff0c;栈和队列是两种基础的数据结构&#xff0c;它们在编程和算法设计中发挥着重要的作用。本篇博客将带您进入栈和队列的神秘世界&#xff0c;让我们一起去探索吧&#xff01; 一、栈的魔力 栈&#xff08;Stack&#xff09;是一种特殊的数据结构…

牛客练习赛108 E.琉焰(非树边性质/线段树分治+可撤销并查集 or LCT)

题目 思路来源 官方题解 题解 针对每个连通块&#xff0c;单独考虑&#xff1a; 一方面&#xff0c; 任取连通块的某棵生成树&#xff0c; 对于任意非树边(u,v)&#xff0c;把树边u到v上的所有边都选中&#xff0c;即被覆盖1次&#xff0c; 任取某个非树边集合S&#xff…

qrcodejs2

使用第三方包将当前路径转为二维码 使用步骤&#xff1a; 下载第三方包&#xff1a; npm install qrcodejs2 --save导入第三方包&#xff1a; import QRCode from qrcodejs2调用&#xff1a; 添加结构&#xff1a; <div id"qrcode" ref"qrcode">…

【Matlab】水文气象数据分析——MK趋势检验及突变检验

MK检验 前言一、MK趋势检验1. 定义2.代码3.结果 二、MK突变检验1. 定义2.代码3.结果 前言 在时间序列趋势分析中&#xff0c;Mann-Kendall检验是使用广泛的非参数检验方法&#xff0c;是一种定量的方式&#xff0c;被广泛应用于非正态分布的数据趋势分析中&#xff0c;而且该方…

2.二进制部署K8s集群

1 网段规划 主机节点网段 192.168.200.0/24Service网段 10.244.0.0/16Pod网段 10.96.0.0/16网段不能有冲突 2 集群资源配置 Master节点 4C8G * 3Node节点 4C8G * 33 系统设置 – 所有节点 关闭Selinux # 临时关闭 setenforce 0 # 永久关闭 sed -i "s/SELINUXenfo…

(2)线性代数基础

目录描述 1.本征值分解与最大本征值问题1.1 本征向量与本征值&#xff08;又称特征向量与特征值&#xff09;1.2 本征值分解&#xff08;又称特征值分解&#xff0c;eigenvalue decomposition&#xff09;1.3 最大本征值问题1.3.1 代码实例 1.4 最大本征值问题的幂级数求解法1.…

check_mk的性能案例

check_mk的性能案例 http://wiki.lustre.org/Check_MK/Graphite/Graphios_Setup_Guide Dell PowerEdge R515 2x 8-Core AMD Opteron 4386 300GB RAID1 15K SAS 200GB Enterprise SSD 64GB RAM ~150k checks per minute ~200k metrics per minute 每台服务器用于存储rrd的空间平…

为Oracle 11gr2数据库打PSU补丁

安装11gr2 操作系统为Oracle Linux 7u6。此主机上已安装Oracle Database 18c。 $ cat /u01/app/oraInventory/ContentsXML/inventory.xml <?xml version"1.0" standalone"yes" ?> <!-- Copyright (c) 1999, 2013, Oracle and/or its affilia…
最新文章