跳到文章

用腳本編寫

腳本是用於順序發送和處理指令的特殊應用機制。 他們可以配置編程板設置、讀寫收發器內存以及執行其他操作。

當收發器需要不同於MSA標準的編程過程並且需要一系列特殊指令來成功保存存儲器改變時,使用腳本。 腳本還可以自動對不同收發器存儲區域進行重複編程,而操作員的參與最少。


如何使用腳本?

  1. 打開菜單 控制-使用腳本寫入-選擇腳本文件 指定腳本文件路徑;
  2. 如果腳本在執行期間使用編輯器數據,請確保編輯器包含正確的代碼;
  3. 單擊收發器存儲器寫入按鈕來運行腳本。

當運行腳本時,應用程序忽略當前選擇的存儲區域設置。 必須在腳本命令中指定讀取和寫入區域。

請注意,在腳本完成後,軟件不會驗證寫入是否成功。


如何清除選定的腳本?

進入菜單 控制-使用腳本寫入-重置腳本 清除所選腳本並返回到標準書寫。


如何創建腳本?

腳本命令語法基於SFPTotal命令協議。

示例:

// Write password AABBCCDD to page A2 at offset 7B
w2A2007B03AABBCCDD
// Write the code from the editor to page A0 at offset 00
w2A000007F{00;7F}
// Write value 80 to page A2 at offset 7F
w2A2007F0080
// Write value 01 to page A2 at offset FF
w2A200FF0001
PAUSE
// Read code from page A0 at offset 00
R2A000007F

創建文本文件並每行輸入一條指令。 保存腳本文件以在應用程序中使用此編程過程。


附加腳本命令

以下附加命令由應用程序處理。

PAUSE

暫停腳本執行。 默認暫停時間爲 100 毫秒。

可選參數設置以毫秒爲單位的暫停持續時間。

PAUSE
Delay 100ms
PAUSE=2000
Delay 2000ms


SETCHECKSUM

重新計算校驗和。


SETVAL

將偏移 XX 處的編輯器單元設置爲值 YY。 以大寫 HEX 格式指定參數值。

偏移參數接受從00到7F的值。

SETVAL 7F 03


{00;7F}

替換宏 {XX;YY} 在其他命令內部使用以從編輯器插入代碼段。 在腳本執行期間,宏將自動替換爲從字節 XX 開始並跨越 YY 字節的當前編輯器數據。

注意,YY參數值 00 HEX中的表示替換了1個字節,而值爲 7F HEX中的表示替換了128字節。 將 YY 設置爲以字節爲單位的段長度減一,以十六進製表示。

示例:將128字節段寫入頁A2h偏移量80h處。

w2A200807F{00;7F}

示例:將96字節DDM閾值段寫入頁A2h偏移量00h處,然後進行讀取。

W2A200005F{00;5F}

示例:將包含序列號的偏移量0x44處的16字節代碼段分配給變量。

$VAR2={44;0F}


$VAR1

緩衝區變量$VAR1。 使用緩衝區變量存儲編輯器中的代碼段並在腳本執行期間插入其內容。

應用程序支持10個緩衝器變量,$VAR0-$VAR9。

$VAR1={00;43}
$VAR2={44;0F}
$VAR3={54;2B}
$VAR4=002AFE
$VAR5=4F


$YYYY

將當前年份插入命令中。


$MM

將當前月份插入命令中。


$DD

將當前日期插入命令中。


BACKUPTOFILE

開始對應用程序設置中選擇的模塊類型進行備份。 應用程序按順序讀取可用頁面並將數據保存到文件中。 該命令相當於從應用程序菜單中調用該功能。


BACKUPDIR

設置備份目錄。 附加參數可用於創建具有特定名稱的目錄。

示例:創建名稱中包含日期的備份目錄。

$VAR5=SOMETEXT
BACKUPDIR=\$YYYY-$MM-$DD_$VAR5\
BACKUPTOFILE


IMPORTFILE

將HEX代碼從二進制文件導入到編輯器中。

IMPORTFILE=\catalog\filename.bin


IMPORTHEX

將HEX代碼導入編輯器。

示例:將128字節的代碼段導入到編輯器中。

IMPORTHEX=030407100000000000000006670000000802001E4F454D2020202020202020202020202000000B4053465031302D535220202020202020204120202003520091001A000058473936535230313020202020202020303830393236202068F0031200001111A8DD05AA642FAA6F5A64DAF3285A9D000000000000000000F05E482F

通過連接緩衝區變量將代碼導入到編輯器中。

$VAR1={00;43}
$VAR2={44;0F}
$VAR3={54;2B}
IMPORTHEX=$VAR1$VAR2$VAR3


INCREMENT

增加包含代碼的十六進製表示的變量的值,使得其文本表示末尾的數字增加1。

例如,變量的文本表示 SN129YY00201 轉換爲 SN129YY00202.

如果數字部分之前有零,則當遞增的數字需要附加數字時,應用程序嘗試保留原始字符串長度,從而將值向左移動。 因此,值 SN129YY00999 轉換爲 SN129YY01000.

$VAR1={00;43}
// Assign the code area containing the serial number to a variable
$VAR2={44;0F}
$VAR3={54;2B}
INCREMENT $VAR2
IMPORTHEX=$VAR1$VAR2$VAR3


ERASEVENDORCODE

用零填充編輯器中的供應商特定區域。


COUNTER

腳本迭代計數器。

將此命令放置在循環運行的腳本文件的開頭。 當前迭代計數可通過 $COUNTER 變量獲得。

// Invoke the iteration counter
COUNTER
// Assign the current counter value to a variable
$VAR0=$COUNTER
// Display the counter value
ECHO $COUNTER


IF A ... B THEN ...

比較值。 使用此結構比較 A 和 B,如果指定條件爲 true,則執行 THEN 之後的命令。

// Assign numeric values to variables
$VAR1=10
$VAR2=20
// Display a message box if the condition is true.
IF $VAR1 < $VAR2 THEN MSGBOX HELLO WORLD!


LOOP

重複腳本。 將此命令放在腳本文件的末尾,以告訴應用程序再次運行該過程。 UNLOOP 命令取消 LOOP。 使用條件退出循環並避免無休止的重複。

具有條件的示例。

COUNTER
...
R1A000007F
...
// Repeat the script until 10 iterations have completed
IF $COUNTER < 10 THEN LOOP

如果腳本進入無限循環,請使用<工具-中斷進程>中的全局中斷命令來停止它。


STRTOHEX

將運算符後面的文本轉換爲HEX字符串。

$VAR9=STRTOHEX QSFP28-SR4 
MSGBOX $VAR9


HEXTOSTR

將運算符後面的HEX字符串轉換爲文本。

$VAR9=HEXTOSTR 5153465032382D535234202020202020
MSGBOX $VAR9


PADRIGHTHEX

用代碼爲YY的字符填充右側$VAR1中的十六進制值,直到其文本表示的長度達到XX。

命令格式:

PADRIGHTHEX XX YY $VAR1

  • XX 指定HEX字符串的文本表示的長度的十進制數;
  • YY 用於將字符串填充到所需長度的字符的HEX代碼;
  • $VAR1 包含要轉換的HEX字符串的變量。
// Convert text to a HEX string and store it in a variable
$VAR9=STRTOHEX QSFP28-SR4 
// Pad the variable on the right with spaces (HEX code 0x20) to 16 bytes 
$VAR8=PADRIGHTHEX 16 20 $VAR9
ECHO $VAR8

當將文本分配給變量並將其轉換爲特定長度的HEX字符串時,該命令很有用。


PADLEFTHEX

與 PADRIGHTHEX 類似。 用代碼爲YY的字符填充左側$VAR1中的十六進制值,直到其文本表示的長度達到XX。


SAVECODEDIR

設置自動保存代碼文件的路徑,無需對話框。

示例:設置代碼輸出路徑爲以代碼中序號命名的目錄:

$VAR4=HEXTOSTR {44;0F}
SAVECODEDIR=C:\Users\DemoUser\Desktop\Codes\$VAR4


SAVEFILE

將代碼保存到由 SAVECODEDIR 設置的路徑上的文件。 該應用程序根據所選擇的模塊類型和頁面自動創建文件名。

$VAR4=HEXTOSTR {44;0F}
SAVECODEDIR=C:\Users\DemoUser\Desktop\Codes\$VAR4
SAVEFILE


SIGNATURE

用預設參數運行發生器。

該特徵需要應用程序中的擴展生成器許可證,其不包括在標準包中。


外部API處理程序

APIURL

設置用於調用外部API處理程序的URL。

APIURL=http://localhost/example/api.php

APICALL

調用外部API處理程序。 這相當於單擊主應用程序窗口中的 API 按鈕。

調用 APIURL 的 POST 請求格式

POST Fields: code=0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000&module_type=1&table=A0&offset=00
  • code 代碼:256個字符的字符串(HEX,大寫);
  • module_type 模塊類型 (0 — GBIC, 1 — SFP, 2 — SFP-DD, 3 — XFP, 4 — QSFP, 5 — QSFP-DD, 6 — OSFP);
  • table 表地址(HEX,大寫;例如:A0、A2);
  • offset 表偏移量(HEX,大寫;例如:00、80)。

服務器必須返回 JSON 字符串:

{"status":1,"script":"R1A000007F\r\nW1A000007F{00;7F}\r\n","message":"","code":"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","module_type":"1","table":"A0","offset":"00"}

服務器響應必須包含以下參數:

  • status 處理狀態:1——導入並執行腳本; 0 — 顯示消息而不導入代碼;
  • script 導入代碼後執行的腳本文本; 如果未指定腳本,則留空;
  • message 返回消息,status=0時顯示;
  • code 返回碼:256個字符的字符串(HEX,大寫);
  • module_type 模塊類型 (0 — GBIC, 1 — SFP, 2 — SFP-DD, 3 — XFP, 4 — QSFP, 5 — QSFP-DD, 6 — OSFP);
  • table 表地址(HEX,大寫;例如:A0、A2);
  • offset 表偏移量(HEX,大寫;例如:00、80)。


算術運算

腳本處理器通過以下方式支持加法、減法、乘法和除法: MATH.

命令格式:

MATH Value1 %Operator Value2

支持的算術運算符:

  • + -添加;
  • - -減法;
  • * —乘法;
  • / -分部;
COUNTER
$VAR0=MATH 10 - $COUNTER
ECHO $VAR0
// Repeat the script while the condition is true
IF $VAR0 > 0 THEN LOOP


用戶文件

用於處理用戶文件的命令。

USERFILEPATH

設置用戶文件路徑。

USERFILEPATH=C:\Users\User\Desktop\user-file.txt

GETUSERFILESTRING

從用戶文件中讀取指定行。

GETUSERFILESTRING 10

SAVETOUSERFILE

將數據保存到用戶文件。

示例:

// Store the serial number in a variable
$VAR2={44;0F}
// Save the variable value to the user file
SAVETOUSERFILE HEXTOSTR $VAR2
// Add a line feed and carriage return
SAVETOUSERFILE HEXTOSTR 0D0A

$STRCOUNTUSERFILE

該值包含用戶文件中的行數。

// Find the inserted line's position by subtracting the script iteration count from the file's line count 
$VAR0=MATH $STRCOUNTUSERFILE - $COUNTER
ECHO $VAR0
// Read the most recently inserted line from the file
GETUSERFILESTRING $VAR0
更新: