主頁 > 軟體設計 > STM32--MODBUS 通訊篇

STM32--MODBUS 通訊篇

2020-10-12 04:41:28 軟體設計

STM32–MODBUS 通訊篇


文章目錄

  • STM32--MODBUS 通訊篇
  • 一、MODBUS簡介
  • 二、MODBUS功能碼詳解
    • 1. 暫存器分類
    • 2. 常用功能碼
    • 2. 常用功能碼說明
      • ①讀線圈暫存器——01H
      • ②讀離散輸入暫存器——02H
      • ③讀保持暫存器——03H
      • ④讀輸入暫存器——04H
      • ⑤寫單個線圈暫存器——05H
      • ⑥寫單個保持暫存器——06H
      • ⑦寫多個線圈暫存器——0FH
      • ⑧寫多個保持暫存器——10H
    • 3.小結
  • 三、MODBUS協議詳解
    • 1.兩種串行傳輸模式
      • ①.ASCII模式
      • ②.RTU模式
      • ③小結
    • 2. ModbusTCP
      • ①結構幀MBAP
      • ②結構幀PDU
      • ②小結
  • 四、基于STM32-MODBUS實作


一、MODBUS簡介

①Modbus協議是一種請求/應答的串行鏈路協議,是一種工業現場總線協議標準,是一項應用層報文傳輸協議,用于在通過不同型別的總線或網路連接的設備之間的客戶機/服務器通信,

②Modbus協議是一項應用層報文傳輸協議,包括ASCII、RTU、TCP三種報文型別,

③標準的Modbus協議物理層介面有RS232、RS422、RS485和以太網介面,采用master/slave方式通信,

④MODBUS 是一項應用層報文傳輸協議,用于在通過不同型別的總線或網路連接的設備之間的客戶機/服務器通信,

MODBUS 通用幀如圖:在這里插入圖片描述


二、MODBUS功能碼詳解

1. 暫存器分類

Modbus暫存器分為四種,如表

暫存器種類資料型別訪問型別功能碼PLC地址暫存器地址
線圈暫存器讀寫01H 05H 0FH00001-099990000H-FFFFH
離散輸入暫存器只寫02H10001-199990000H-FFFFH
輸入暫存器只寫04H30001-399990000H-FFFFH
保持暫存器讀寫03H 06H 10H40001-499990000H-FFFFH

2. 常用功能碼

Modbus中常用功能碼有8個,可以分為位操作和字操作兩類,如表所示:

功能碼描述PLC地址暫存器地址位/字操作運算元量
01H讀線圈暫存器00001-099990000H-FFFFH位操作單個或多個
02H讀離散輸入暫存器10001-199990000H-FFFFH位操作單個或多個
03H讀保持暫存器40001-499990000H-FFFFH字操作單個或多個
04H讀輸入暫存器30001-399990000H-FFFFH字操作單個或多個
05H寫單個線圈暫存器00001-099990000H-FFFFH位操作單個
06H寫單個保持暫存器40001-499990000H-FFFFH字操作單個
0FH寫多個線圈暫存器00001-099990000H-FFFFH位操作多個
10H寫多個保持暫存器40001-499990000H-FFFFH字操作多個

2. 常用功能碼說明

①讀線圈暫存器——01H

●功能碼01H讀取Modbus從機中線圈暫存器的狀態,可以是單個暫存器,或者多個連續的暫存器,

●假設從機地址為01H,讀取的線圈暫存器的起始地址為0017H,讀取38個暫存器,指令如表所示:
發送讀線圈暫存器指令:

從機地址功能碼起始地址高位起始地址低位暫存器數量高位暫存器數量低位CRC高位CRC低位
0101001700260DD4

●回應:各線圈的狀態與資料內容的每個bit對應,1代表ON,0代表OFF,如果查詢的線圈數量不是8的倍數,則在最后一個位元組的高位補0,

讀線圈暫存器狀態回應:

從機地址功能碼回傳位元組數資料1資料2資料3資料4資料5CRC高位CRC低位
010105CD6BB20E1B44EA

●其中,第一個位元組CDH對應線圈0017H到001E的狀態,轉為二進制是11001101,其中bit0對應0017H,bit7對應001E,如表所示:

線圈0017H到001EH的狀態:

001EH001DH001CH001BH001AH0019H0018H0017H
ONONOFFOFFONONOFFON

●最后一個位元組為1BH,對應線圈0037H到003CH的狀態,轉為二進制是00011011,其中bit0對應0037H,bit5對應003CH,其余兩位用0填充,如表所示:

線圈0037H到003CH的狀態:

001EH001DH001CH001BH001AH0019H0018H0017H
ONONOFFOFFONONOFFON

②讀離散輸入暫存器——02H

●功能碼02H讀取Modbus從機中離散輸入暫存器的狀態,可以是單個暫存器,或者多個連續的暫存器,

●假設從機地址為01H,讀取的離散輸入暫存器的起始地址為00C4H,讀取22個暫存器,指令如表所示:

發送讀離散輸入暫存器指令:

從機地址功能碼起始地址高位起始地址低位暫存器數量高位暫存器數量低位CRC高位CRC低位
010200C40016B839

●回應:各個離散輸入暫存器的狀態與資料內容的每個bit對應,1代表ON,0代表OFF,如果查詢的線圈數量不是8的倍數,則在最后一個位元組的高位補0

讀離散輸入暫存器的回傳結果:

從機地址功能碼回傳位元組數資料1資料2資料3CRC高位CRC低位
010203ACDB352288

●其中,第一個位元組ACH對應00C4H到00CBH暫存器的狀態,轉為二進制是10101100,其中bit0對應00C4H,bit7對應00CB,如表所示:

暫存器00C4H到00CBH的狀態:

00CBH00CAH00C9H00C8H00C7H00C6H00C5H00C4H
10101100
ONOFFONOFFONONOFFOFF

●最后一個位元組為35H,對應暫存器00D4H到00D9H的狀態,轉為二進制是00110101,其中bit0對應00D4H,bit5對應00D9H,其余兩位用0填充,如表所示:

暫存器00D4H到00D9H的狀態

00DBH00DAH00D9H00D8H00D7H00D6H00D5H00D4H
00110101
ONOFFONOFFONONOFFOFF

③讀保持暫存器——03H

●功能碼03H讀取Modbus從機中保持暫存器的資料,可以是單個暫存器,或者多個連續的暫存器,
●假設從機地址為01H,讀取的保持暫存器的起始地址為006BH,讀取3個暫存器,指令如表所示:

發送讀保持暫存器指令:

從機地址功能碼起始地址高位起始地址低位暫存器數量高位暫存器數量低位CRC高位CRC低位
0103006B00037417

●回應:每個保持暫存器的長度為2個位元組,保持暫存器之間,低地址暫存器先傳輸,高地址暫存器后傳輸,單個保持暫存器,高位元組資料先傳輸,低位元組資料后傳輸,

讀保持暫存器的回傳結果:

從機地址功能碼位元組數006BH高位位元組006BH低位位元組006CH高位位元組006CH低位位元組006BH高位位元組006BH低位位元組CRC高位CRC低位
010306006B00130000F579

④讀輸入暫存器——04H

●功能碼04H讀取Modbus從機中輸入暫存器的資料,可以是單個暫存器,或者多個連續的暫存器,
●假設從機地址為01H,讀取的保持暫存器的起始地址為0008H,讀取2個暫存器,指令如表所示:

發送讀輸入暫存器指令:

從機地址功能碼起始地址高位起始地址低位暫存器數量高位暫存器數量低位CRC高位CRC低位
0104006B00020017

●回應:每個輸入暫存器的長度為2個位元組,輸入暫存器之間,低地址暫存器先傳輸,高地址暫存器后傳輸,單個輸入暫存器,高位元組資料先傳輸,低位元組資料后傳輸,

讀輸入暫存器的回傳結果:

從機地址功能碼位元組數0008H高位位元組0008H低位位元組0009H高位位元組0009H低位位元組CRC高位CRC低位
010404000A000B9A41

⑤寫單個線圈暫存器——05H

●功能碼05H寫單個線圈暫存器,FF00H請求線圈處于ON狀態,0000H請求線圈處于OFF狀態,
●假設從機地址為01H,線圈暫存器的地址為00ACH,使其處于ON狀態的指令,如表所示:

發送寫單個線圈指令:

從機地址功能碼起始地址高位起始地址低位暫存器數量高位暫存器數量低位CRC高位CRC低位
010500ACFF004C1B

●回應:如果寫入成功,回傳發送的指令,即010500ACFF004C1B,

從機地址功能碼起始地址高位起始地址低位暫存器數量高位暫存器數量低位CRC高位CRC低位
010500ACFF004C1B

⑥寫單個保持暫存器——06H

●功能碼06H寫單個保持暫存器,
●假設從機地址為01H,保持暫存器的地址為0001H,資料位0003H,指令如表所示:

發送寫單個保持暫存器指令:

從機地址功能碼起始地址高位起始地址低位暫存器數量高位暫存器數量低位CRC高位CRC低位
010600010003980B

●回應:如果寫入成功,回傳發送的指令,即010600010003980B,

從機地址功能碼起始地址高位起始地址低位暫存器數量高位暫存器數量低位CRC高位CRC低位
010600010003980B

⑦寫多個線圈暫存器——0FH

●功能碼0FH寫多個線圈暫存器,如果對應的資料位為1,表示線圈狀態為ON;如果對應的資料位為0,表示線圈狀態為OFF,線圈暫存器之間,低地址暫存器先傳輸,高地址暫存器后傳輸,單個線圈暫存器,高位元組資料先傳輸,低位元組資料后傳輸,如果寫入的線圈暫存器的個數不是8的倍數,則在最后一個位元組的高位補0,

●假設從機地址為01H,線圈暫存器的起始地址為0013H,寫入10個暫存器,指令如表所示:

發送寫入多個線圈暫存器指令:

從機地址功能碼起始地址高位起始地址低位暫存器數量高位暫存器數量低位位元組數資料1資料2CRC高位CRC低位
010F0013000A02CD0172CB

●其中,CDH對應線圈0013H到001AH的內容,01H對應線圈001B到001CH的內容,未使用位用0填充,

線圈暫存器0013H到001CH的內容:

001AH0019H0018H0017H0016H0015H0014H0013H
11001101
0022H0021H0020H001FH001EH001DH001CH001BH
00000001

●回應:如果寫入成功,回傳寫入的暫存器數量,如表所示

寫多個線圈暫存器的回傳結果:

從機地址功能碼起始地址高位起始地址低位暫存器數量高位暫存器數量低位CRC高位CRC低位
010F0013000A2409

⑧寫多個保持暫存器——10H

●功能碼10H寫多個保持暫存器,其中每個保持暫存器的長度為兩個位元組,
●假設從機地址為01H,保持暫存器的起始地址為0001H,寫入2個暫存器,指令如表所示:

發送寫入多個保持暫存器指令:

從機地址功能碼起始地址高位起始地址低位暫存器數量高位暫存器數量低位位元組數0001H高位0001H低位0002H高位0002H低位CRC高位CRC低位
010100001000204000A01029230

●回應:如果寫入成功,回傳寫入的暫存器數量,如表所示:

從機地址功能碼起始地址高位起始地址低位暫存器數量高位暫存器數量低位CRC高位CRC低位
0110000100021008

3.小結

●功能碼詳解主要參考文獻為:
https://blog.csdn.net/lakerszhy/article/details/68927178?locationNum=4&fps=1


三、MODBUS協議詳解

1.兩種串行傳輸模式

①.ASCII模式

編碼系統:
十六進制,ASCII 字符 0-9, A-F,報文中每個 ASCII 字符含有 1 個十六進制字符

Bits per Byte:
1 起始位
7 資料位, 首先發送最低有效位
1 位作為奇偶校驗
1 停止位

奇偶校驗 :
●偶校驗是要求的, 其它模式 ( 奇校驗, 無校驗 ) 也可以使用, 為了保證與其它產品的最大兼容性,同時支持無校驗模式是建議的,默認校驗模式模式 必須為偶校驗,
注 : 使用無校驗要求 2 個停止位,

字串行傳送:
●每個字符或位元組均由此順序發送(從左到右):
●最低有效位 (LSB) . . . 最高有效位 (MSB),資料傳輸如圖:
●有奇偶檢驗
在這里插入圖片描述
●無奇偶檢驗:
在這里插入圖片描述

Modbus ASCII 報文幀:
在 ASCII 模式, 報文用特殊的字符區分幀起始和幀結束,一個報文必須以一個‘冒號’ ( : )(ASCII 十六進制 3A )起始,以 ‘回車-換行’ (CR LF) 對 (ASCII 十六進制 0D 和 0A) 結束,
注 : LF 字符可以通過特定的 Modbus 應用命令 (參見 Modbus 應用協議規范) 改變,

對于所有的域,允許傳送的字符為十六進制 0–9, A–F (ASCII 編碼), 設備連續的監視總線上的 ‘冒號’ 字符, 當收到這個字符后,每個設備解碼后續的字符一直到幀結束,

報文幀包括:起始、地址、功能碼、資料、LRC校驗位、結束,如圖:

在這里插入圖片描述
注:每個字符子節需要用兩個字符編碼,因此,為了確保 ASCII 模式 和 RTU 模式在 Modbus 應用級兼容,ASCII
資料域最大資料長度為 (2x252) 是 RTU 資料域 (252) 的兩倍,
必然的, Modbus ASCII 幀的最大尺寸為 513 個字符,

ASCII 傳輸模式狀態如圖:

在這里插入圖片描述
幀檢驗域:
①幀檢驗方式為::縱向冗余校驗 (LRC - Longitudinal Redundancy Checking)

②LRC 域檢驗不包括起始“冒號”和結尾 CRLF 對的整個報文的內容,不管報文有無奇偶校驗,均執行此檢驗,

③LRC 域為一個子節,包含一個 8 位二進制值,LRC 值由發送設備計算,然后將 LRC 附在報文后面,接收設備在接收報文時重新計算 LRC 的值,并將計算結果于實際接收到的 LRC 值相比較,如果兩個值不相等,則為錯誤,LRC 的計算, 對報文中的所有的連續 8 位位元組相加,忽略任何進位,然后求出其二進制補碼,執行檢驗針對不包括起始“冒號”和結尾 CRLF 對的整個 ASCII 報文域的內容,在 ASCII 模式,LRC 的結果被 ASCII 編碼為兩個位元組并放置于 ASCII 模式報文幀的結尾, CRLF 之前,


②.RTU模式

RTU模式:報文中每個 8 位位元組含有兩個 4 位十六進制字符,這種模式的主要優點是較高的資料密度,在相同的波特率下比ASCII 模式有更高的吞吐率,每個報文必須以連續的字符流傳送,

編碼系統:

8–位二進制報文中每個 8 位位元組含有兩個 4 位十六進制字符(0–9, A–F)

Bits per Byte:

1 起始位
8 資料位, 首先發送最低有效位
1 位作為奇偶校驗
1 停止位

奇偶校驗 :
●偶校驗是要求的, 其它模式 ( 奇校驗, 無校驗 ) 也可以使用, 為了保證與其它產品的最大兼容性,同時支持無校驗模式是建議的,默認校驗模式模式 必須為偶校驗,
注 : 使用無校驗要求 2 個停止位,

字串行傳送:
●每個字符或位元組均由此順序發送(從左到右):
●最低有效位 (LSB) . . . 最高有效位 (MSB),資料傳輸如圖:
●有奇偶校驗:
在這里插入圖片描述
●無奇偶校驗:
在這里插入圖片描述

Modbus RTU 報文幀:

RTU 報文幀描述如圖 :
在這里插入圖片描述
注意: Modbus RTU 幀最大為 256 位元組,

●在 RTU 模式,報文幀由時長至少為 3.5 個字符時間的空閑間隔區分,在后續的部分,這個時間區間被稱作 t3.5,如果兩個字符之間的空閑間隔大于 1.5 個字符時間,則報文幀被認為不完整應該被接收節點丟棄,傳輸格式如圖:


在這里插入圖片描述
注 :
RTU 接收驅動程式的實作,由于 t1.5 和 t3.5 的定時,隱含著大量的對中斷的管理,在高通信速率下,這導致 CPU 負擔加重,因此,在通信速率等于或低于 19200 Bps 時,這兩個定時必須嚴格遵守;對于波特率大于 19200 Bps 的情形,應該使用 2 個定時的固定值:建議的字符間超時時間(t1.5)為 750μs,幀間的超時時間 (t1.5) 為 1.750ms,

●下圖表示了對 RTU 傳輸模式狀態圖的描述, “主節點” 和 “子節點” 的不同角度均在相同的圖中表示:
在這里插入圖片描述
上面狀態圖的一些解釋:
● 從 “初始” 態到 “空閑” 態轉換需要 t3.5 定時超時: 這保證幀間延遲
● “空閑” 態是沒有發送和接收報文要處理的正常狀態,
●在 RTU 模式, 當沒有活動的傳輸的時間間隔達 3.5 個字符長時,通信鏈路被認為在 “空閑”
態,
●當鏈路空閑時, 在鏈路上檢測到的任何傳輸的字符被識別為幀起始, 鏈路變為 “活動” 狀態,
然后, 當鏈路上沒有字符傳輸的時間間個達到 t3.5 后,被識別為幀結束,
● 檢測到幀結束后,完成 CRC 計算和檢驗,然后,分析地址域以確定幀是否發往此設備,如果不是,則丟棄此幀, 為了減少接收處理時間,地址域可以在一接到就分析,而不需要等到整個幀結束,這樣,CRC 計算只需要在幀尋址到該節點 (包括廣播幀) 時進行,

幀檢驗域:
①幀檢驗方式為:回圈冗余校驗 (CRC)

②CRC 包含由兩個 8 位位元組組成的一個 16 位值,

③CRC 域作為報文的最后的域附加在報文之后,計算后,首先附加低位元組,然后是高位元組,CRC

④高位元組為報文發送的最后一個子節,附加在報文后面的 CRC 的值由發送設備計算,接收設備在接收報文時重新計算 CRC 的值,
并將計算結果于實際接收到的 CRC 值相比較,如果兩個值不相等,則為錯誤,CRC 的計算, 開始對一個 16 位暫存器預裝全 1, 然后將報文中的連續的 8 位子節對其進行后續的計算,只有字符中的 8 個資料位參與生成 CRC 的運算,起始位,停止位和校驗位不參與 CRC計算,

⑤CRC 的生成程序中, 每個 8–位字符與暫存器中的值異或,然后結果向最低有效位(LSB)方向移動(Shift) 1 位,而最高有效位(MSB)位置充零, 然后提取并檢查 LSB:如果 LSB 為 1, 則暫存器中的值與一個固定的預置值異或;如果 LSB 為 0, 則不進行異或操作,
這個程序將重復直到執行完 8 次移位,完成最后一次(第 8 次)移位及相關操作后,下一個 8位位元組與暫存器的當前值異或,然后又同上面描述過的一樣重復 8 次,當所有報文中子節都運算之后得到的暫存器忠的最終值,就是 CRC,


③小結

MODBUS分為兩種傳輸模式,ASCII方式、RTU方式,這兩種模式的區別在于: 1、起始符,與結束符不一樣;

●ASCII模式,起始符是一個冒號“:” ASCII碼為3AH H是十六進制表示結束符是“回車換行符” ASCII碼為0DH 0AH

●RTU 模式,起始符與結束符都是至少3.5倍字符傳輸時間的停頓間隔時間標定3.5倍字符的傳輸時間的計算方法,根據“通訊格式、傳輸方式及MODBUS協議簡介”視頻中介紹的一個字符的傳輸時間的計算方法,很容易計算出來,

2、校驗和計算不一樣;

●ASCII模式,是LRC校驗
●RTU 模式,是CRC校驗
3、發送格式不一樣;
●ASCII模式,在訊息中的每個位元組都作為兩個ASCII字符發送
●RTU 模式,在訊息中的每個位元組包含兩個 4Bit的十六進制字符,


2. ModbusTCP

●ModbusTCP的資料幀可分為兩部分:MBAP+PDU,

①結構幀MBAP

MBAP為報文頭,長度為7位元組,組成如下:

事務緊急處理標識協議標識長度單元識別符號
2位元組2位元組2位元組1位元組

事務處理標識 : 可以理解為報文的序列號,一般每次通信之后就要加1以區別不同的通信資料報文,
協議識別符號 : 00 00表示ModbusTCP協議,
長度 : 表示接下來的資料長度,單位為位元組,
單元識別符號 : 可以理解為設備地址,

②結構幀PDU

PDU由功能碼+資料組成,功能碼為1位元組,資料長度不定,由具體功能決定,該處使用的url網路請求的資料,

②小結

modbus設備可分為主站(poll)和從站(slave),主站只有一個,從站有多個,主站向各從站發送請求幀,從站給予回應,在使用TCP通信時,主站為client端,主動建立連接;從站為server端,等待連接,

●主站請求:功能碼+資料
●從站正常回應:請求功能碼+回應資料
●從站例外回應:例外功能碼+例外碼,其中例外功能碼即將請求功能碼的最高有效位置1,例外碼指示差錯型別
●注意:需要超時管理機制,避免無期限的等待可能不出現的應答

在linux下使用modbusTCP連接
IANA(Internet Assigned Numbers Authority,互聯網編號分配管理機構)給Modbus協議賦予TCP埠號為502,這是目前在儀表與自動化行業中唯一分配到的埠號,
通信程序
1.connect 建立TCP連接
2.準備modbus報文
3.使用send命令發送報文
4.在同一連接下等待應答
5.使用recv命令讀取報文,完成一次資料交換
6.通信任務結束時,關閉TCP連接


四、基于STM32-MODBUS實作

有點累了,改天再寫,,,

如需要技術指導,小編QQ:271841502

如需要進入QQ技術交流群,電賽資料共享群:484040216

電賽資料共享群二維碼如下:

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/168487.html

標籤:其他

上一篇:ADS1292R測量心電+呼吸

下一篇:樹-1-二叉樹的三種遍歷

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more