六、字串函式
此版本支援的字串操作函式有:
!Ascii2I(s)
!Bin2I(s)
!ByteArr2Str(ByteArr,str,count)
!Chr(n)
!Format(n,str)
!GetShortFromByteArr(ByteArr,start,n)
!GetIntFromByteArr(ByteArr,start,n)
!GetSingleFromByteArr(ByteArr,start,n)
!GetStrFromByteArr(ByteArr,start,count,str)
!Hbyte2HStr(arrByte,str)
!HStr2HByte(str,arrByte)
!Hex2I(s)
!I2Ascii(s)
!I2Bin(s)
!I2Hex(s)
!I2Oct(s)
!InStr(n,str1,str2)
!InStrRev(Begin, Str1, Str2)
!Lcase(str)
!Left(str,n)
!Len(str)
!Ltrim(str)
!lVal(str)
!Mid(str,n,k)
!MidEx(Str, Begin)
!Oct2I(s)
!Postfix(StrSrc, Postfix, Length)
!Prifix(StrSrc, Prefix, Length)
!Replace(Str, Find, Replace, Begin, Count)
!Right(str,n)
!Rtrim(str)
!SetIntToByteArr(ByteArr,start,n)
!SetShortToByteArr(ByteArr,start,n)
!SetSingleToByteArr(ByteArr,start,x)
!SetStrToByteArr(ByteArr,start,str)
!Sscanf(str1, str2, 任意個數變數)
!Space(n)
!Strings(str,n)
!Str(x)
!StrComp(str1,str2)
!StrFormat(FormatStr,任意個數變數)
!Trim(str)
!Ucase(str)
!Val(str)
!StrReverseFind(str, val)
!StrReverse(str)
!SvrByteArraySum(ByteArr,start,length)
!SvrByteArrayXOR(ByteArr,start,length)
!SvrByteArrayModbusCRC(ByteArr,start,length)
!SvrStrSum(str,Flag)
!SvrStrXOR(str,Flag)
!SvrStrModbusLRC(str,start,length)
!SvrGetByteFromByteArr(ByteArr,start,n,Flag)
!SvrGetShortFromByteArr(ByteArr,start,n,Flag)
!SvrGetIntFromByteArr(ByteArr,start, n,Flag)
!SvrGetSingleFromByteArr(ByteArr,start,x,Flag)
!SvrGetByteFromHexStr(str,n,Flag)
!SvrGetShortFromHexStr(str,n,Flag)
!SvrGetIntFromHexStr(str,n,Flag)
!SvrGetSingleFromHexStr(str,x,Flag)
!SplitString(sourceStr,strArr,splitStr)
!Ascii2I(s)
函式意義:返回字串s的首字母的Ascii值
參 數:s,字串,應為英文字串
返 回 值:整數
= 0~127,表示轉換成功
= -1,表示引數為非法值,轉換失敗
實 例:ret = !Ascii2I(“Afd”),轉換成功,ret = 65
ret = !Ascii2I(“你好”),轉換失敗,ret = -1
!Bin2I(s)
函式意義:把二進位制字串轉換為數值
參 數:s,字串,應為‘’、‘1’字元組成的字串,最多32個字元
返 回 值:整數
= -2^31~2^31,表示轉換成功
= 0,指定字串不是以或1開頭的全部返回失敗
實 例:ret = !Bin2I(“101”),轉換成功,ret = 5
ret = !Bin2I(“011vbn”),轉換成功,ret = 3
ret = !Bin2I(“assa”),轉換失敗,ret = 0
!ByteArr2Str(ByteArr,str,count)
函式意義:將ASCII碼位元組陣列ByteArr中的前Count個ASCII碼位元組的資料填入字串中。
參 數:ByteArr:ASCII碼位元組型陣列。
Str:字串,取得的字串。
Count:整數,由位元組陣列填充而形成的字串
返 回 值:整數,0表示成功,-1表示失敗。
實 例:!ByteArr2Str (BA,str, 5)其中BA為ASCII碼位元組陣列,BA中的資料為:“A”、“B”、“C”、“D”、“E”,則生成了一個長度為5的字串str:“ABCDE”。
!Chr(n)
函式意義:根據指定的ASCII碼值返回ASCII碼錶中對應的字元,與I2Ascii的功能一致,但支援unicode編碼的中文;
參 數:n:整數,要計算的ASCII碼值
返 回 值:字串,返回一個轉換後的字元
實 例:!Chr(65)函式返回“A”
!Format(n,str)
函式意義:格式化浮點數變數
參 數:n,浮點數,要格式化的數值
返 回 值:字串,格式化後的字串
str,字串,格式化數值的格式,應為“00。00”,的個數自定義
實 例:ret = !Format(1。236,“0。00”),轉換成功,ret = “1。24”
ret = !Format(1。236,“。00”),轉換成功,ret = “。24”
ret = !Format(1。236,“00。00”),轉換成功,ret = “01。24”
注意事項:(1)當小數點前沒有時,格式化時過濾數值的所有整數部分
(2)當小數點前為1個時,數值的整數部分按實際位數格式化
(3)當小數點前大於1個時,按的個數格式化數值的整數部分,位數不足前導補,位數超出前導截除
(4)小數點後按的個數格式化數值的小數部分,位數不足後導補,位數超出後四捨五入
!GetShortFromByteArr(ByteArr,start,n)
函式意義:將位元組陣列ByteArr中從start位置開始的內容輸出到變數n中,輸出的格式為2位元組整數,位元組陣列位置計數從1開始
參 數:ByteArr:位元組型陣列
start:整數,輸出的首位置,從1開始
n:整數,輸出的變數
返 回 值:整數
:正常
-1:start值
-2:表示start的值大於位元組陣列的長度
-3:表示ByteArr無足夠多的內容用以輸出
-5:表示其他錯誤
實 例:!GetShortFromByteArr (BA,2, A)位元組陣列為:則A=513
!GetIntFromByteArr(ByteArr,start,n)
函式意義:將位元組陣列ByteArr中從start位置開始的內容輸出到變數n中,輸出的格式為4位元組整數,位元組陣列位置計數從1開始
參 數:ByteArr:傳址型,位元組型陣列
start:整數,輸出的首位置,從1開始
n:整數,輸出的變數
返 回 值:整數
:正常
-1:start值
-2:表示start的值大於位元組陣列的長度
-3:表示ByteArr無足夠多的內容用以輸出
-5:表示其他錯誤
實 例:!GetIntFromByteArr (BA,2, A)位元組陣列為:則A=67305985
!GetSingleFromByteArr(ByteArr,start,n)
函式意義:將位元組陣列ByteArr中從start位置開始的4位元組內容輸出到浮點數變數n中,位元組陣列位置計數從1開始
參 數:ByteArr:位元組型陣列
start:整數,輸出的首位置,從1開始
n:浮點數,輸出的變數
返 回 值:整數
:正常
-1:start值
-2:表示start的值大於位元組陣列的長度
-3:表示ByteArr無足夠多的內容用以輸出
-5:表示其他錯誤
實 例:!GetSingleFromByteArr(BA,1, A)位元組陣列為:則A=12。5
!GetStrFromByteArr(ByteArr,start,count,str)
函式意義:將位元組陣列ByteArr中從start位置開始的內容輸出到字串變數str中,輸出的長度為count,位元組陣列位置計數從1開始
參 數:ByteArr:位元組型陣列
start:整數,輸出的首位置,從1開始
count:整數,輸出的位元組數量
str:字串,輸出的字串
返 回 值:整數
:正常
-1:start值
-2:表示start的值大於位元組陣列的長度
-3:表示ByteArr無足夠多的內容用以輸出
-5:表示其他錯誤
實 例:!GetStrFromByteArr(BA,2,5, A)位元組陣列為:{“B”,“C”,“D”,“E”,“F”,“G”,“H”}則A=“CDEFG”
!Hbyte2HStr(arrByte,str)
函式意義:將位元組陣列轉為字串
參 數:arByte:位元組陣列
str: 經過轉換後的字串
返 回 值:整數,表示成功,-1表示失敗
!HStr2HByte(str,arrByte)
函式意義:將字串轉為字元陣列。此函式會最佳化沒有使用的字元陣列空間
參 數:str:字串,需要校驗資料
arrByte: 經過轉換後的位元組陣列
返 回 值:整數
>0:成功,返回轉換的位元組個數
-1:沒有定義陣列arrByte
-3:str的長度必須為偶數
實 例:!HStr2Hbyte(str,arByte)str = “3132”則轉換後arByte值分別為0x31 0x32
!Hex2I(s)
函式意義:把16進位制字串轉換為數值
參 數:s,字串,s應為‘’~‘9’或‘a’~‘f’或‘A’~‘F’字元組成的字串,最多8個字元
返 回 值:整數
= -2^31~2^31,表示轉換成功
= 0,指定字串不是以0-9或A-F或a-f開頭的全部返回失敗
實 例:ret = !Hex2I(“11”),轉換成功,ret = 17
ret = !Hex2I(“qwe112”),轉換失敗,ret = 0
!I2Ascii(s)
函式意義:返回指定Ascii值的字元
參 數:s,整數,引數範圍0~127
返 回 值:字串
實 例:ret = !I2Ascii(65),轉換成功,ret = ‘A’
ret = !I2Ascii(65409),轉換失敗,ret = ‘?’
注意事項:(1)s = 0~33、127時對應不可見字元,函式將返回空字串
(2)s = 33~126時對應可見字元,函式將返回對應字元
(3)s = 0~127以外的資料時,返回值不確定。
!I2Bin(s)
函式意義:把數值轉換為二進位制字串
參 數:s,整數
返 回 值:字串
實 例:ret = !I2Bin(5),ret = “101”
!I2Hex(s)
函式意義:把數值轉換為16進位制字串
參 數:s,整數
返 回 值:字串
實 例:ret = !I2Hex(17),ret = “11”
!I2Oct(s)
函式意義:把數值轉換為8進位制字串
參 數:s,整數
返 回 值:字串
實 例:ret = !I2Oct(9),ret = “11”
!InStr(n,str1,str2)
函式意義:查詢一字串在另一字串中最先出現的位置
參 數:n,整數,開始搜尋的位置
str1,字串,被搜尋的字串,起始位置為1
str2,字串,要搜尋的字串
返 回 值:整數
> 0表示查詢成功
= 0表示查詢失敗
實 例:ret = !InStr(3,“sdlkfjwe”,“we”),查詢成功,ret = 7
ret = !InStr(10,“sdlkfjwe”,“we”),查詢失敗,ret = 0
ret = !InStr(1,“we”,“sdlkfjwe”),查詢失敗,ret = 0“
注意事項:(1)當n
(2)當1
(3)當n >字串str1的長度時,函式將返回
(4)當字串str1的長度
!InStrRev(n,str1,str2)
函式意義:查詢字串str2在另一字串str1中第一次出現的位置,字串的首位置為1;本函式與Instr函式的區別為,它是從字串的尾部開始進行查詢,尾部位置為1
參 數:n,整數,開始搜尋的位置,該位置是從字串的首位置開始計算的,字串的首位置為1
str1,字串,被搜尋的字串
str2,字串,要搜尋的字串
返 回 值:整數
>0表示查詢成功,返回查詢字串在被查詢字串的位置
=-1表示查詢失敗
實 例:!InStrRev(1,”selkfjsd“,”sd“) = 7;!InStrRev(3,”sdlkfjsd“,”sd“) = 1;!InStrRev(3,”lkfjsd“,”sd“) = -1;
注意事項:(1)當n
(2)當1
(3)當n >字串str1的長度時,函式將返回-1
(4)當字串str1的長度
!Lcase(str)
函式意義:把字串變數str的所有大寫英文字元A~Z轉換成對應的小寫英文字元a~z
參 數:str,字串
返 回 值:字串
實 例:ret = !LCase(”sedERT“),ret = ”sedert“
!Left(str,n)
函式意義:字串變數str左邊起,取n個字元
參 數:str,字串,源字串
n,整數,要獲取的字元個數,n>=0
返 回 值:字串,返回獲取到的字串
實 例:ret = !Left(”ABCDEFG“,2),ret = ”AB“
ret = !Left(”ABCDEFG“,20),ret = ”ABCDEFG“
注意事項:(1)n >字串str的長度時,返回字串str
(2)n = -1時,返回整串字元
!Len(str)
函式意義:求字串變數str的字串長度
參 數:str,字串
返 回 值:整數,返回字串的個數
實 例:ret = !Len(”ABCDEFG“),ret = 7
ret = !Len(”A你好“),ret = 3
!Ltrim(str)
函式意義:把字串變數str中最左邊的空格剔除
參 數:str,字串
返 回 值:字串
實 例:ret = !LTrim(” dsfk“),ret = ”dsfk“
!lVal(str)
函式意義:將字串轉化為整數數值
參 數:str,字串,待轉換的字串
返 回 值:整數,轉換後的數值
= 0,指定字串不是以0-9開頭或負號+數字開頭的全部返回失敗
!Mid(str,n,k)
函式意義:從字串變數str左邊第n個字元起,取k個字元。計算字元時,從1開始算起
參 數:str,字串,源字串,起始位置為1
n,整數,起始位置,1
k,整數,取字元數,k > 0
返 回 值:字串
實 例:ret = !Mid(”ABCDEFG“,4,2),ret = ”DE“
注意事項:(1)當n以後的字元個數小於k時,函式將返回n以後的所有字串
(2)當k = -1時,返回n以後的所有字元
!MidEx(Str,Begin)
函式意義:取字串中從左的指定位置起到結尾的字串
參 數:Str:字串,要操作的字串資料
Begin:整數,要操作的起始位置
返 回 值:字串,獲取的字串
實 例:!MidEx(”ABCDEFG“,3)函式返回“CDEFG”
!Oct2I(s)
函式意義:把8進位制字串轉換為數值
參 數:s,字串
s應為‘’~‘7’字元組成的字串,最多11個字元
返 回 值:整數
= -2^31~2^31,表示轉換成功
= 0,若引數字面意義為,表示轉換成功;若引數第一個‘’~‘7’以外的字元前的字串不是由‘’~‘7’組成,表示轉換失敗
實 例:ret = !Oct2I(”11“),轉換成功,ret = 9
ret = !Oct2I(”11dfghj“),轉換成功,ret = 9
ret = !Oct2I(”你好“),轉換失敗,ret = 0
注意事項:當引數字面意義值介於-2^31~2^31以外時,函式將返回-1
!Prifix(StrSrc,Prefix,Length)
函式意義:在源字串前面新增字首字串,形成一個指定長度的新字串。
參 數:StrSrc:字串,要處理的源字串
Prefix:字串,字首字串
Length:整數,表示生成的新字串的長度。有效值從1開始。
返 回 值:字串,返回一個新的字串
實 例:!Prifix(”abc“,”def“,10)函式返回“fdefdefabc”
!Postfix(StrSrc,Postfix,Length)
函式意義:在源字串後面新增字尾字串,形成一個指定長度的新字串。
參 數:StrSrc:字串,要處理的源字串
Postfix:字串,字尾字串
Length:整數,表示生成的新字串的長度。有效值從1開始。
返 回 值:字串,返回一個新的字串
實 例:!Postfix(”abcdef“,”ghijkl“,10)函式返回“abcdefghij”
!Replace(Str,Find,Replace,Begin,Count)
函式意義:在字串中查詢特定的字串,找到後按條件以指定的字串替換之
參 數:Str:字串,要處理的字串物件。
Find:字串,查詢條件字串。
Replace:字串,替換字串。
Begin:整數,查詢的起始位置,有效值從1開始。
Count:整數,要替換的個數,-1表示替換所有找到的子串,正數表示只替換前Count個找到的子串
返 回 值:字串,返回替換後的字串
實 例:!Replace(”sdlkfjsd“,”sd“,”A“,1,-1)函式在“sdlkfjsd”中從第1個字元開始,查詢“sd”,並替換所有找到的子串為“A”,執行結果為“AlkfjA”
!Replace(”sdlkfjsd“,”sd“,”A“,3,-1)函式在“sdlkfjsd”中從第3個字元開始,查詢“sd”,並替換所有找到的子串為“A”,執行結果為“sdlkfjA”
!Right(str,n)
函式意義:從字串變數str右邊起,取n個字元
參 數:str,字串,源字串
n,浮點數,取字元個數,n >= 0
返 回 值:字串
實 例:ret = !Right(”ABCDEFG“,2),ret = ”FG“
ret = !Right(”ABCDEFG“,20),ret = ”ABCDEFG“
注意事項:(1)當n大於字串str的字元個數時,函式將返回str的全部字元
(2)當n = -1時,返回整個字串
!Rtrim(str)
函式意義:把字串變數str中最右邊的空格剔除
參 數:str, 字串
返 回 值:字串,為剔除空白字元後的字串
實 例:ret = !Rtrim(”dsfk“),ret =”dsfk“
!SetIntToByteArr (ByteArr,start,n)
函式意義:對位元組陣列ByteArr中從start位置開始的內容進行填充,填充的長度為4位元組,填充的內容為n,按4位元組整數進行填充,位元組陣列位置計數從1開始
參 數:ByteArr:位元組型陣列,被填充的位元組陣列。
start:整數,填充的首位置,從1開始
n:整數,填充的內容
返 回 值:整數,判斷是填充是否正常
:表示正常
-1:表示start的值小於1
-2:表示start的值大於位元組陣列的長度
-3:表示填充後的結果的某些位置超出ByteArr的長度
-5:表示其它錯誤
實 例:!SetIntToByteArr (BA,1, 65)則形成的位元組陣列為:65 00 00 00
!SetShortToByteArr(ByteArr,start,n)
函式意義:對位元組陣列ByteArr中從start位置開始的內容進行填充,填充的長度為2位元組,填充的內容為n,按2位元組整數進行填充,位元組陣列位置計數從1開始
參 數:ByteArr:位元組型陣列,被填充的位元組陣列。
start:整數,填充的首位置,從1開始
n:整數,填充的內容
返 回 值:整數
:表示成功
-1:表示start的值小於1
-2:表示start的值大於位元組陣列的長度
-3:表示填充後的結果的某些位置超出ByteArr的長度
-5:表示其它錯誤
實 例:!SetShortToByteArr (BA,1, 65)則形成的位元組陣列為:65 00
!SetSingleToByteArr(ByteArr,start,x)
函式意義:對位元組陣列ByteArr中從start位置開始的內容進行填充,填充的長度為4位元組,填充的內容為x,按4位元組整數進行填充,位元組陣列位置計數從1開始
參 數:ByteArr:位元組型陣列,被填充的位元組陣列
start:整數,填充的首位置,從1開始
x:浮點數,填充的內容
返 回 值:整數
:表示正常
-1:表示start的值小於1
-2:表示start的值大於位元組陣列的長度
-3:表示填充後的結果的某些位置超出ByteArr的長度
-5:表示其它錯誤
實 例:!SetSingleToByteArr (BA,1, 12。3)則形成的位元組陣列的前四個位元組為BASIC中單精度浮點數的內部表示
!SetStrToByteArr(ByRef ByteArr,start,str)
函式意義:對位元組陣列ByteArr中從start位置開始的內容進行填充,填充的長度為字串str的長度位元組,填充的內容為字串str,位元組陣列位置計數從1開始。
參 數:ByteArr:位元組型陣列,被填充的位元組陣列
start:整數,填充的首位置,從1開始
str:字串,填充的內容
返 回 值:整數
:表示正常
-1:表示start的值小於1
-2:表示start的值大於位元組陣列的長度
-3:表示填充後的結果的某些位置超出ByteArr的長度
-5:表示其它錯誤
實 例:!SetStrToByteArr (BA,2, ”BC“ )則形成的位元組陣列為:{”B“ ”C“}
!Sscanf(StrSrc,StrFormat,可變引數)
函式意義:把指定的字串表示的數值按照特定的格式轉換成數值並存放到指定的變數中
參 數:StrSrc:字串,要轉換的字串
StrFormat:字串,轉換格式。StrFormat支援%d,%f兩種格式。%f和%mf:%f表示把對應的字串中可以用來表示數值的部分轉換成浮點數,如“123。4aa”會被轉換成123。4。對於%mf,m用於指定取對應字串中開頭的m個字元用來轉換,如“123。4”用格式“%2f”會被系統轉換成12。%d和%md:表示把對應的字串中可以用來表示數值的部分轉換成整數。使用方法同%f和%mf。可以在格式中新增普通字元,用於在StringSource中分隔字串,通常用“,”分隔。如“123abc456”按格式“%fabc%f”會轉換成123和456,而“123,456”按格式“%f,%f”也會被轉換成123和456
可變引數:浮點數或者整數,轉換後的數值存放的變數
返 回 值:整數,-1表示失敗,表示成功
實 例:!Sscanf(”123。235abc1234“, ”%fabc%f“,value,value1 ) ‘函式返回,value = 123。235 value1 =1234
!Space(n)
函式意義:指字空格的個數,形成一個字串
參 數:n:整數,空格數量
返 回 值:字串,返回n個空格組成的字串
實 例:!Space(3)函式返回“ ”
!Strings(Str,Length)
函式意義:生成一個由多個模板字串組成的限制長度的字串
參 數:Str:字串,用作生成字串的模板
Length:整數,生成的字串的長度。該值應該大於
返 回 值:字串,由多個StringTemplate組成的長度為Length的字串
實 例:!Strings(”as“,5)函式返回“asasa”
!Str(x)
函式意義:將浮點數變數x的值轉換成字串
參 數:x,浮點數
返 回 值:字串
注意事項:自動選擇指數形式或普通小數形式(保留6位)
!StrComp(str1,str2)
函式意義:比較字串變數str1和str2是否相等,不區分大小寫字母
參 數:str1,字串
str2,字串
返 回 值:整數,= 0,表示兩個字串相等,反之表示不相等
實 例:ret = !StrComp(”ABC“,”abc“),ret = 0
!StrFormat(FormatStr,任意個數變數)
函式意義:格式化字串,可以格式化任意多個變數。使用方法為!StrFormat(”%d“,23),或!StrFormat(”%g-%g-%g“,2。3,2。1,2。2)等,類似C語言中的printf的語法
參 數:FormatStr,字串,字串的格式化格式
後面的引數可以任意多個,與格式化格式的個數對應
返 回 值:字串
實 例:ret = !StrFormat(”%g “, 12。34),ret = ”12。34“
ret = !StrFormat(”%f“, 12。34),ret = ”12。34000“
ret = !StrFormat(”%d “, 12),ret = ”12“
ret = !StrFormat(”%s “, ”12“),ret = ”12“
注意事項:(1)支援的格式化格式有
%d,格式化為整數
%f,格式化為浮點數,輸出單精度浮點數,小數點後有效位數為6位
%g,格式化為浮點數,保留6位有效數,去掉小數後的若干
%s,格式化為字串型
(2)當FormatStr為非格式字串時,返回FormatStr本身
(3)當FormatStr含非法格式時,會返回非法格式本身,表示格式化失敗
(4)當FormatStr中格式和對應變數型別不匹配時,會返回格式本身,表示格式化失敗
(5)確保要格式化的字串中的格式符號與後面引數個數要一致,否則出現一半格式化一半顯示格式符號
!Trim(str)
函式意義:把字串變數str中左右兩端的空格剔除
參 數:str, 字串
返 回 值:字串
實 例:ret = !Trim(”dsfk“),ret =”dsfk“
!Ucase(str)
函式意義:把字串變數str的所有英文字元a~z轉換成大寫英文字元A~Z
參 數:str,字串
返 回 值:字串
實 例:ret = !UCase(”sedERT“),ret = ”SEDERT“
!Val(str)
函式意義:把字串變數str的值轉換成數值
參 數:s,字串
s為‘’~‘9’以及‘-’字元組成的字串,字面意義值介於-2^31~2^31之間
返 回 值:浮點數
= 0,若引數字面意義為,表示轉換成功;若引數為‘’~‘9’以外的字元,表示轉換失敗
實 例:ret = !Val(”0。712“),ret = 0。712
!StrReverseFind(str, val)
函式意義:查詢一字串val在另一字串str中最後出現的位置
參 數:str,字串;
val,字串
返 回 值:整數,表示找到的位置;= -1,反之沒有找到
實 例:ret = !StrReverseFind(”abbd“, ”b“),ret = 2
!StrReverse(str)
函式意義:翻轉字串
參 數:str,字串
返 回 值:字串
實 例:ret = !UCase(”abc“),ret = ”cba“
!SvrByteArraySum(ByteArr,start,length)
函式意義:從陣列中start索引開始,連續length個位元組,按求和方式計算返回校驗結果
參 數:ByteArr:位元組型陣列
start:整數,檢驗資料的啟始位元組在陣列中
length:整數,連續校驗資料的個數
返 回 值:整數,返回正確的校驗值/判斷是輸出是否正常:
>=0:返回校驗結果
-1:啟始索引start小於1
-2:啟始索引start大於陣列上限
-4:位元組陣列長度不足
-5:其他錯誤
實 例:!SvrByteArraySum(ByteArr,1,4)ByteArr為:00 01 02 03 04 05 06 07則n = 0x06
!SvrByteArrayXOR(ByteArr,start,length)
函式意義:從陣列中start索引開始,連續length個位元組,按異或方式計算返回校驗結果
參 數:ByteArr:位元組型陣列
start:整數,檢驗資料的啟始位元組在陣列中
length:整數,連續校驗資料的個數
返 回 值:整數,返回正確的校驗值/判斷是輸出是否正常:
>=0:返回校驗結果
-1:啟始索引start小於1
-2:啟始索引start大於陣列上限
-4:位元組陣列長度不足
-5:其他錯誤
實 例:n = !SvrByteArraySum(ByteArr,1,4) ByteArr為:00 01 02 03 04 05 06 07則n = 0
!SvrByteArrayModbusCRC(ByteArr,start, length)
函式意義:從陣列中start索引開始,連續length個位元組,按ModbusCRC方式計算返回校驗結果
參 數:ByteArr:位元組型陣列。
start:整數,檢驗資料的啟始位元組在陣列中
length:整數,連續校驗資料的個數
返 回 值:整數,返回正確的校驗值/判斷是輸出是否正常:
>=0:返回校驗結果
-1:啟始索引start小於1
-2:啟始索引start大於陣列上限
-4:位元組陣列長度不足
-5:其他錯誤
實 例:nReturn = !SvrByteArrayModbusCRC(ByteArr,1,6) //ByteArr為:01 03 00 00 00 08
!SvrStrSum(str,Flag)
函式意義:對字串str按求和方式計算返回校驗結果
參 數:str,字串,需要校驗資料
Flag,整數,:按2個字元形成1BYTE HEX值進行校驗;1:直接按ASCII字元值進行校驗
返 回 值:字串,成功返回正確的校驗值
失敗返回空字串
實 例:strRe = !SvrStrSum(str,0), str為:”0001020304050607“,則strRe = “1C”
!SvrStrXOR(str,Flag)
函式意義:對字串str按異或方式計算返回校驗結果
參 數:str,字串,需要校驗資料
Flag,整數,:按2個字元形成1BYTE HEX值進行校驗;1:直接按ASCII字元值進行校驗
返 回 值:字串,返回正確的校驗值/判斷是輸出是否正常:
失敗返回空字串
實 例:strRe = !SvrStrSum(str,0) str為:“0001020304050607”則strRe = “00”
!SvrStrModbusLRC(str,start, length)
函式意義:對字串str中start索引開始,連續length個位元組,按LRC方式計算返回校驗結果
參 數:str,字串,需要校驗資料
Flag,整數,:按2個字元形成1BYTE HEX值進行校驗;1:直接按ASCII字元值進行校驗
返 回 值:字串,成功返回正確的校驗值
失敗返回值:
“-1”:校驗陣列長度小於等於零
“-2”:啟始索引start小於1
“-3”:啟始索引start大於陣列上限
“-4”:位元組陣列長度不足, 或者所校驗的位數為奇數個
!SvrGetByteFromByteArr(ByteArr,start,n,Flag)
函式意義:將位元組陣列ByteArr中從start位置開始的內容輸出到變數n中,輸出的格式為1位元組整數,位元組陣列位置計數從1開始
參 數:ByteArr,位元組型陣列
start,整數,輸出的首位置,從1開始
n,整數,輸出的變數
Flag,整數,解析方式[0:8位無符號;1:8位有符號;2:8位BCD碼]
返 回 值:整數,判斷是輸出是否正常:
=0:正常
-1:啟始索引start小於1
-2:啟始索引start大於陣列上限
-3:陣列為空
-4:BCD格式不正確
-5:其他錯誤
實 例:! SvrGetByteFromByteArr (BA,2, A,1),位元組陣列為:00 01 02 03 04 05 06 07 08 09 00 00則A=1
!SvrGetShortFromByteArr(ByteArr,start,n,Flag)
函式意義:將位元組陣列ByteArr中從start位置開始的內容輸出到變數n中,輸出的格式為2位元組整數,位元組陣列位置計數從1開始
參 數:ByteArr,位元組型陣列
start,整數,輸出的首位置,從1開始
n,整數,輸出的變數
Flag,整數,解析方式[0:16位無符號;1:16位有符號;2:16位BCD碼]
返 回 值:整數,判斷是輸出是否正常:
=0:正常
-1:啟始索引start小於1
-2:啟始索引start大於陣列上限
-3:位元組陣列長度不足
-4:BCD格式不正確
-5:其他錯誤
實 例:!SvrGetByteFromByteArr (BA,2, A,1),位元組陣列為:00 01 02 03 04 05 06 07 08 09 00 00則A=513
!SvrGetIntFromByteArr(ByteArr,start,n,Flag)
函式意義:將位元組陣列ByteArr中從start位置開始的內容輸出到變數n中,輸出的格式為4位元組整數,位元組陣列位置計數從1開始
參 數:ByteArr,位元組型陣列
start,整數,輸出的首位置,從1開始
n,整數,輸出的變數
Flag,整數,解析方式[0:32位無符號;1:32位有符號;2:32位BCD碼]
返 回 值:整數,判斷是輸出是否正常:
=0:正常
-1:啟始索引start小於1
-2:啟始索引start大於陣列上限
-3:位元組陣列長度不足
-4:BCD格式不正確
-5:其他錯誤
實 例:!SvrGetIntFromByteArr (BA,2, A,1),位元組陣列為:00 01 02 03 04 05 06 07 08 09 00 00則A=67305985
!SvrGetSingleFromByteArr(ByteArr,start,x,Flag)
函式意義:將位元組陣列ByteArr中從start位置開始的內容輸出到變數x中,輸出的格式為4位元組浮點數,位元組陣列位置計數從1開始
參 數:ByteArr,位元組型陣列
start,整數,輸出的首位置,從1開始
x,浮點數,輸出的變數
Flag,整數,對應4種解碼次序數值範圍0~3:[0:1234,1:2134,2:3412,34321]
返 回 值:整數,判斷是輸出是否正常:
=0:正常
-1:啟始索引start小於1
-2:啟始索引start大於陣列上限
-3:位元組陣列長度不足
-5:其他錯誤
實 例:SvrGetSingleFromByteArr(BA,1, x,3)位元組陣列為:00 00 80 40 04 05 06 07 08 09 00 00則A=4。0
!SvrGetByteFromHexStr(str,n,Flag)
函式意義:獲得將HEX表示的字元資料的內容輸出到變數x中,輸出的格式為1位元組浮點數,從頭取2個字元轉換成一個位元組的整數值
參 數:str,字串,16進位制字串
n,整數
Flag,整數,解析方式[0:8位無符號;1:8位有符號;2:8位BCD碼]
返 回 值:整數,判斷是輸出是否正常:
:正常
-1:解析字元長度不足,至少長度為2字元
-2:解析字元長度一定為偶數個
-3:解析字元長度大於2個,只取左邊2字元解析
-4:BCD格式不正確
實 例:!SvrGetByteFromHexStr (str,n,0),str為:“0102030405060708”則n = 1
!SvrGetShortFromHexStr(str,n,Flag)
函式意義:將16進製表示的字元資料str的內容輸出到變數n中,輸出的格式為2位元組浮點數,從頭取4個字元轉換成2個位元組短整數值
參 數:str,字串,16進位制字串
n,整數,長整數
Flag,整數,解析方式[0:16位無符號;1:16位有符號;2:16位BCD碼]
返 回 值:整數,判斷是輸出是否正常:
:正常;
-1:解析字元長度不足,至少長度為2字元
-2:解析字元長度一定為偶數個
-3:解析字元長度大於2個,只取左邊2字元解析
-4:BCD格式不正確
實 例:!SvrGetShortFromHexStr (str,n,0) str為:“0201030405060708”則n = 513,其十六進位制為0201
!SvrGetIntFromHexStr(str,n,Flag)
函式意義:獲得將HEX表示的字元資料的內容輸出到變數x中,輸出的格式為4位元組浮點數,從頭取8個字元轉換成4個位元組整數值
參 數:str,字串,16進位制字串
n,整數,輸出變數
Flag,長整數,解析方式[0:32位無符號;1:32位有符號;2:32位BCD碼]
返 回 值:整數,判斷是輸出是否正常:
:正常
-1:解析字元長度不足,至少長度為4字元
-2:解析字元長度一定為偶數個
-3:解析字元長度大於4個,只取左邊4字元解析
-4:BCD格式不正確
實 例:!SvrGetIntFromHexStr (str,n,0),str為:“00000201030405060708”則n = 513
!SvrGetSingleFromHexStr(str,x,Flag)
函式意義:獲得將HEX表示的字元資料的內容輸出到變數x中,輸出的格式為4位元組浮點數,從頭取8個字元轉換成4個位元組單精度浮點值
參 數:str,字串,16進位制字串
x,浮點數,輸出變數
Flag,整數,對應4種解碼次序,數值範圍:0~3[0:1234,1:2134,2:3412,34321]
返 回 值:整數,判斷是輸出是否正常:
:正常
-1:解析字元長度不足,至少長度為4字元
-2:解析字元長度一定為偶數個
-3:解析字元長度大於4個,只取左邊4字元解析
實 例::!SvrGetSingleFromHexStr (str,x,3),str為:“000080400102030405060708”則x = 4。0
!SplitString(sourceStr,strArr,splitStr)
函式意義:將指定字串按照指定分隔符進行分割
參 數:sourceStr,字串,需要分割的字串
strArr,字串陣列,輸出,存放按分隔符分隔後的字串
splitStr,字串,輸入,分隔符,支援長度為1的英文字串,若分隔符字串長度超過1,則按第一個字元分隔
返 回 值:整數
> 0,成功,返回拆分後的陣列大小
失敗返回值:
= -216,引數無效
實 例:ret = !SplitString(“abc,des,dsf,def,ghi”,strArr,”,”),將字串”abc,des,dsf,def,ghi“按”,”分隔,存入strArr,並返回拆分後陣列大小5。