MCGS腳本驅(qū)動開發(fā)工具使用指導(dǎo)手冊_第1頁
MCGS腳本驅(qū)動開發(fā)工具使用指導(dǎo)手冊_第2頁
MCGS腳本驅(qū)動開發(fā)工具使用指導(dǎo)手冊_第3頁
MCGS腳本驅(qū)動開發(fā)工具使用指導(dǎo)手冊_第4頁
MCGS腳本驅(qū)動開發(fā)工具使用指導(dǎo)手冊_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、北京昆侖通態(tài)自動化軟件科技有限公司腳本驅(qū)動V2.0使用指導(dǎo)手冊版本號:0.1目 錄第一章 新腳本驅(qū)動說明一 腳本驅(qū)動適用范圍1. 腳本驅(qū)動適用的版本A. MCGS嵌入式組態(tài)軟件;版本號:6.5(01.0010)注:此版本以上為新版本,以下為舊版本B. MCGS通用版的定制版組態(tài)軟件C. MCGS網(wǎng)絡(luò)版的定制版組態(tài)軟件2. 腳本驅(qū)動適用的設(shè)備A. 獨立板卡設(shè)備B. 串口通信設(shè)備3. 腳本驅(qū)動適用的協(xié)議二 腳本驅(qū)動兼容性1. 舊版本腳本驅(qū)動兼容新版本組態(tài)軟件2. 新版本腳本驅(qū)動不兼容舊版本的組態(tài)軟件,舊版本組態(tài)軟件無法識別新版本腳本驅(qū)動三 腳本驅(qū)動新增內(nèi)容1. 腳本驅(qū)動新增功能新增加生成向?qū)Чδ埽?/p>

2、具體參照第三章內(nèi)容。2. 腳本驅(qū)動新增函數(shù)(1) 數(shù)據(jù)解析函數(shù)1.!SvrGetByteFromByteArr(ByRef ByteArr, start, ByRef n, Flag)2.!SvrGetShortFromByteArr(ByRef ByteArr, start, ByRef n, Flag)3.!SvrGetIntFromByteArr(ByRef ByteArr, start, ByRef n, Flag)4.!SvrGetSingleFromByteArr(ByRef ByteArr, start, ByRef x, Flag)5.!SvrGetByteFromHexStr

3、(str, ByRef n, Flag)6.!SvrGetShortFormHexStr(str, ByRef n, Flag)7.!SvrGetIntFromHexStr(str, ByRef n, Flag)8.!SvrGetSingleFromHexStr(str, ByRef x, Flag)(2) 數(shù)據(jù)校驗函數(shù)1.!SvrByteArraySum(ByRef ByteArr, start, length)2.!SvrStrSum(str, Flag)3.!SvrByteArrayXOR(ByRef ByteArr, start, length)4.!SvrStrXOR(str, Fl

4、ag)5.!SvrStrModbusCRC(ByRef ByteArr, start, length)6.!SvrStrModbusLRC(str, start, length)7.!OpenLog()8.!CloseLog()(3) 字節(jié)數(shù)組操作函數(shù)1.!HStr2HByre(str, arByte)2.!HByte2HStr(arByte, str)第二章 基礎(chǔ)概念講解一 通訊協(xié)議1. ACSII碼通訊協(xié)議(字符型協(xié)議)通訊信息按照ASCII碼方式解析得到的參數(shù)信息稱為ASCII碼通訊。比如:主站接收到從站發(fā)送的4個字符:0x31 0x34 0x2E 0x36,用ASCII碼表示為14.6

5、。2. HEX通訊協(xié)議(字節(jié)數(shù)組協(xié)議)通訊信息按照十六進制方式解析得到的參數(shù)信息稱為十六進制通訊。比如:主站接收到從站發(fā)送的4個字符:0x31 0x34 0x2E 0x36,用HEX表示為0x31342E363. ASCII碼通訊與HEX通訊的區(qū)別1) ASCII碼通訊傳送的字符能清楚的了解發(fā)送命令和接收信息,但是傳送的信息速度量少;十六進制通訊發(fā)送的字符信息速度量大,但是發(fā)送命令和接收信息不明了。2) ASCII碼的通訊幀1個字占4個字符,而HEX的通訊幀1個字占2個字符。如:發(fā)送0x1427信息,ASCII碼發(fā)送4個字符:0x31 0x34 0x32 0x37,而HEX只需要發(fā)送2個字符:

6、0x14 0x27。二第三章 向?qū)褂谜f明一 完全適用向?qū)У膮f(xié)議1. ASCII碼協(xié)議,多條命令通訊示例1.1 步驟1:協(xié)議分析通訊命令1:模仿ADAM4018協(xié)議,協(xié)議格式如下:發(fā)送命令:#xxr幀頭:長1個字符,固定為#地址:固定長2個字符幀尾:長1個字符,為回車接收命令:#+xxx.xx+xxx.xx+xxx.xx+xxx.xx+xxx.xx+xxx.xx+xxx.xx+xxx.xxr幀頭:長1個字符,固定為#數(shù)據(jù)體:共8個數(shù)據(jù)體,每個數(shù)據(jù)體固定長7個字符,按ASCII碼方式解析幀尾:長1個字符,為回車模擬數(shù)據(jù):發(fā)送命令1:#01r接收命令1:#+11.111+22.222+33.333

7、+44.444+55.555+66.666+77.777+88.888r通訊命令2:自己定義,解析數(shù)據(jù)非等長通訊協(xié)議,分兩種情況:數(shù)據(jù)長度已知;數(shù)據(jù)長度未知。下面以數(shù)據(jù)長度未知,數(shù)據(jù)之間用分隔符分離的協(xié)議,協(xié)議格式如下:發(fā)送命令:#xxxxxxr幀頭:長1個字符,固定為#,參與校驗地址:固定長2個字符,參與校驗校驗:長2個字符,累加和校驗結(jié)束符號:長1個字符,固定為回車接收命令:#xxAA,BBB,CCCC,DDDDD,EEEE,FFF,GG,HHHHxxr幀頭:長1個字符,固定為#數(shù)據(jù)體:8個數(shù)據(jù)體,以“,”分隔校驗:長2個字符,累加和校驗結(jié)束符號:長1個字符,固定為回車模擬數(shù)據(jù):發(fā)送命令:

8、#0184r接收命令:#11,222,3333,44444,5555,666,77,8888E3r1.2 步驟2:新建工程進入向?qū)陆üこ毯筮M入新建工程模式,如圖3-1-1-1所示。圖3-1-1-11. 選擇“使用向?qū)陆üこ獭?,則進入向?qū)Ы缑?,如圖3-1-1-2所示。2. 選擇“不使用向?qū)陆üこ獭保鞒毯驮瓉硪粯?,直接生成示例腳本。整個腳本配置分為4個步驟,前一個步驟不執(zhí)行,不允執(zhí)行下個步驟設(shè)置腳本驅(qū)動的名稱和注釋內(nèi)容圖3-1-1-21.3 步驟3:配置驅(qū)動屬性圖3-1-1-31. 添加屬性,添加除“設(shè)備地址”和“通訊延時”以外的屬性,當(dāng)所添加屬性的數(shù)據(jù)類型選擇枚舉型時,屬性范圍處填寫枚舉

9、量,并用“;”隔開,如圖3-1-1-4所示。2. 刪除屬性,對多余的屬性進行刪除,其中“設(shè)備地址”和“通訊延時”為默認屬性,不允許刪除。3. 設(shè)置屬性,修改設(shè)置已添加的屬性。圖3-1-1-41.4 步驟4:配置通道圖3-1-1-51. 添加通道,可進行批量添加操作。2. 刪除通道,對多余的通道進行刪除,可批量刪除(按住Ctrl鍵,選擇要刪除的通道,點擊“刪除通道”按鈕即可),其中“通訊狀態(tài)”為默認通道,不允許刪除。3. 設(shè)置通道,修改設(shè)置已添加的通道,設(shè)置通道中不能修改通道個數(shù)。1.5 步驟5:配置通訊幀圖3-1-1-65.1 添加收發(fā)通訊幀根據(jù)協(xié)議分析知,2組通訊幀結(jié)構(gòu)信息配置分別如圖3-1

10、-1-7,圖3-1-1-8所示。圖3-1-1-7圖3-1-1-85.2 設(shè)置收發(fā)通訊幀1. 進入設(shè)置數(shù)據(jù)屬性畫面,設(shè)置每個數(shù)值的屬性2. 設(shè)置過的選項,將顯示設(shè)置內(nèi)容和相應(yīng)的屬性3. 命令預(yù)瀏功能,直觀的查看收發(fā)命令的格式圖3-1-1-9對于ASCII碼通訊幀的數(shù)據(jù)體設(shè)置主要有以下幾種情況:1. 無特別屬性,數(shù)據(jù)內(nèi)容為可見ASCII字符,如圖圖3-1-1-10所示。數(shù)據(jù)類型:ASCII字符數(shù)據(jù)數(shù)據(jù)長度:1字符數(shù)據(jù)內(nèi)容:#數(shù)據(jù)屬性:無當(dāng)此數(shù)據(jù)體參與校驗時,需要選擇。圖3-1-1-102. 無特別屬性,數(shù)據(jù)內(nèi)容為不可見ASCII字符,如圖圖3-1-1-11所示。對于相同的數(shù)據(jù)體,設(shè)置好一個后,其他

11、可選擇默認設(shè)置,設(shè)置與前一個相同的參數(shù)數(shù)據(jù)類型:字節(jié)數(shù)據(jù)HEX格式數(shù)據(jù)長度:1字節(jié),用2個字符表示數(shù)據(jù)內(nèi)容:0D,注意一定以HEX格式填寫,無空格數(shù)據(jù)屬性:無注釋:提供ASCII表,可以方便的直接選擇不可見的ASCII字符圖3-1-1-113.數(shù)值不確定的數(shù)據(jù)體,配置“設(shè)備屬性”中的某個屬性獲得其值,如圖圖3-1-1-12所示。數(shù)據(jù)類型:ASCII字符數(shù)據(jù)數(shù)據(jù)長度:2字符數(shù)據(jù)內(nèi)容:無數(shù)據(jù)屬性:設(shè)備屬性中的設(shè)備地址圖3-1-1-124. 數(shù)據(jù)解析1)可知長度的解析,如圖3-1-1-13所示。數(shù)據(jù)類型:ASCII字符數(shù)據(jù)數(shù)據(jù)長度:7字符數(shù)據(jù)內(nèi)容:無數(shù)據(jù)屬性:解析數(shù)據(jù)中的ASCII碼數(shù)據(jù)可知長度圖3

12、-1-1-132)未知長度的解析,如圖3-1-1-14所示。數(shù)據(jù)類型:ASCII字符數(shù)據(jù)數(shù)據(jù)長度:1字符,此處數(shù)據(jù)長度為“解析數(shù)據(jù)間分隔符號”的長度數(shù)據(jù)內(nèi)容:無數(shù)據(jù)屬性:解析數(shù)據(jù)中的ASCII碼數(shù)據(jù)未知長度,解析數(shù)據(jù)間分隔符號是“,”。圖3-1-1-145. 校驗,如果命令中的數(shù)據(jù)都是確定的,那么可以直接計算出校驗值,如圖3-1-1-15所示。1. 此處需校驗的數(shù)據(jù)是選擇了“是否參與校驗”的數(shù)據(jù)體。2. 可選框無效,如:即使不選擇“幀頭”,它也參與校驗。圖3-1-1-156. 預(yù)覽功能,命令信息設(shè)置完之后,可點擊“命令預(yù)覽”查看命令格式,如圖3-1-1-16所示。圖3-1-1-167. 對于各

13、屬性同前一個的數(shù)據(jù)體,點擊“默認設(shè)置”即可。1.6 步驟6:配置預(yù)覽在此預(yù)覽通道和解析數(shù)據(jù)的匹配關(guān)系,并檢查配置是否正確,如果正確就可以,完成配置生成驅(qū)動,否則不完成配置生成代碼。圖3-1-1-171.7 步驟7:完成配置,進行調(diào)試1.代碼的生成與編譯。(1)配置都正確后,可以“完成配置”直接生成腳本代碼,如圖3-1-1-18所示。組建命令幀發(fā)送命令幀并接收數(shù)據(jù),對接收數(shù)據(jù)進行校驗對接收的數(shù)據(jù)進行解析,并設(shè)置通道值圖3-1-1-18(2)編譯生成的代碼。選擇“調(diào)試” “檢查整個驅(qū)動”,若沒有問題輸出窗口會提示“設(shè)備編輯檢查通過”,如圖3-1-1-19所示。 圖3-1-1-192. 配置“串口參

14、數(shù)”。(1)創(chuàng)建虛擬串口,如圖3-1-1-20所示,串口COM2和COM3虛擬串口。圖3-1-1-20(2)配置腳本驅(qū)動中的串口參數(shù)選擇“設(shè)置” “串口父設(shè)備配置”,配置串口參數(shù),如圖3-1-1-21所示。 圖3-1-1-21(3)設(shè)置串口轉(zhuǎn)發(fā)工具SmartCom.exe。首先,設(shè)置串口,如圖3-1-1-22所示。1. 除串口號外,其他需要與腳本驅(qū)動中串口參數(shù)一致2. 數(shù)據(jù)格式選擇ASCII圖3-1-1-22其次,設(shè)置模擬設(shè)備,串口設(shè)置完后,打開串口,選擇“使能”,添加收發(fā)幀,如圖3-1-1-23所示。圖3-1-1-23然后,將2組命令幀的模擬數(shù)據(jù)分別添加進去,選擇啟動,如圖3-1-1-24所

15、示。圖3-1-1-253. 進行調(diào)試。在腳本驅(qū)動中,選擇“調(diào)試” “定時通道采集”進行調(diào)試,如圖3-1-1-26所示。圖3-1-1-262. HEX碼協(xié)議,單條命令通訊示例2.1 步驟1:協(xié)議分析通訊命令:模仿ModbusRTU協(xié)議,協(xié)議格式如下:發(fā)送命令: 從4區(qū)寄存器地址0開始,連續(xù)讀8個16位無符號二進制地址:長1BYTE,內(nèi)容從屬性“設(shè)備地址”中獲得命令碼:長1BYTE,固定為0x03起始地址:長2BYTE,固定為0x0000連續(xù)元件個數(shù):長2BYTE,固定為0x0008校驗:長2BYTE,CRC校驗接收命令:地址:長1BYTE,內(nèi)容不重要命令碼長1BYTE,內(nèi)容預(yù)計為0x03回收字節(jié)

16、長度:長1BYTE,內(nèi)容預(yù)計為0x10數(shù)據(jù)體00:長2BYTE,內(nèi)容由回收數(shù)據(jù)解析獲得,解析方式為 16位無符號二進制數(shù)據(jù)數(shù)據(jù)體01:長2BYTE,內(nèi)容由回收數(shù)據(jù)解析獲得,解析方式為16位無符號二進制數(shù)據(jù)數(shù)據(jù)體02:長2BYTE,內(nèi)容由回收數(shù)據(jù)解析獲得,解析方式為16位無符號二進制數(shù)據(jù)數(shù)據(jù)體03:長2BYTE,內(nèi)容由回收數(shù)據(jù)解析獲得,解析方式為16位無符號二進制數(shù)據(jù)數(shù)據(jù)體03:長2BYTE,內(nèi)容由回收數(shù)據(jù)解析獲得,解析方式為16位無符號二進制數(shù)據(jù)數(shù)據(jù)體05:長2BYTE,內(nèi)容由回收數(shù)據(jù)解析獲得,解析方式為16位無符號二進制數(shù)據(jù)數(shù)據(jù)體06:長2BYTE,內(nèi)容由回收數(shù)據(jù)解析獲得,解析方式為16位無

17、符號二進制數(shù)據(jù)數(shù)據(jù)體07:長2BYTE,內(nèi)容由回收數(shù)據(jù)解析獲得,解析方式為16位無符號二進制數(shù)據(jù)校驗:長2BYTE,內(nèi)容不重要2.2 步驟2:新建工程進入向?qū)陆üこ毯筮M入新建工程模式,如圖3-1-2-1所示。圖3-1-2-11. 選擇“使用向?qū)陆üこ獭?,則進入向?qū)Ы缑?,如圖圖3-1-2-2所示。2. 選擇“不使用向?qū)陆üこ?,流程和原來一樣,直接生成示例腳本。 圖3-1-2-22.3 步驟3:配置驅(qū)動屬性圖3-1-2-31. 添加屬性,添加除“設(shè)備地址”和“通訊延時”以外的屬性,當(dāng)所添加屬性的數(shù)據(jù)類型選擇枚舉型時,屬性范圍處填寫枚舉量,并用“;”隔開,如圖3-1-2-4所示。2. 刪除屬性

18、,對多余的屬性進行刪除,其中“設(shè)備地址”和“通訊延時”為默認屬性,不允許刪除。3. 設(shè)置屬性,修改設(shè)置已添加的屬性。圖3-1-2-42.4 步驟4:配置通道圖3-1-2-51. 添加通道,可進行批量添加。2. 刪除通道,對多余通道進行刪除,可批量刪除,其中“通訊狀態(tài)”為默認通道,不允許刪除。3. 設(shè)置通道,修改設(shè)置已添加的通道,設(shè)置通道中不能修改通道個數(shù)。2.5 步驟5:配置通訊幀圖3-1-2-65.1 添加收發(fā)通訊幀根據(jù)協(xié)議分析知,通訊幀結(jié)構(gòu)信息配置分別如圖3-1-2-7所示。圖3-1-2-75.2 設(shè)置收發(fā)通訊幀圖3-1-2-8對于HEX格式命令幀的數(shù)據(jù)體設(shè)置主要有以下幾種情況:(注釋:對

19、于HEX格式的命令幀,其各幀數(shù)據(jù)體的數(shù)據(jù)類型均為字節(jié)數(shù)據(jù)HEX格式)1. 無特別屬性,如圖3-1-2-9所示。圖3-1-2-92.數(shù)值不確定的數(shù)據(jù)體,配置“設(shè)備屬性”中的某個屬性獲得其值,如圖3-1-2-10所示。圖3-1-2-103. 解析屬性數(shù)據(jù),數(shù)據(jù)內(nèi)容為不需要填寫,由回收數(shù)據(jù)解析獲得,如圖3-1-2-11所示。圖3-1-2-114. 校驗,如果命令中的數(shù)據(jù)都是確定的,那么可以直接計算出校驗值,如圖3-1-2-12所示。圖3-1-2-125. 預(yù)覽功能,命令信息設(shè)置完之后,可點擊“命令預(yù)覽”查看命令格式,如圖3-1-2-13所示。圖3-1-2-132.6 步驟6:配置預(yù)覽在此預(yù)覽通道和解

20、析數(shù)據(jù)的匹配關(guān)系,并檢查配置是否正確,如果正確就可以,完成配置生成驅(qū)動,否則不完成配置生成代碼。圖3-1-2-142.7 步驟7:完成配置1.代碼的生成與編譯。(1)配置都正確后,可以“完成配置”直接生成腳本代碼,如圖3-1-2-15所示。組建命令幀發(fā)送命令幀并接收數(shù)據(jù),對接收數(shù)據(jù)進行校驗對接收的數(shù)據(jù)進行解析,并設(shè)置通道值圖3-1-2-15(2)編譯生成的代碼。選擇“調(diào)試” “檢查整個驅(qū)動”,若沒有問題輸出窗口會提示“設(shè)備編輯檢查通過”,如圖3-1-2-16所示。 圖3-1-2-162. 配置“串口參數(shù)”。(1)創(chuàng)建虛擬串口,如圖3-1-2-17所示,串口COM2和COM3虛擬串口。圖3-1-

21、2-17(2)配置腳本驅(qū)動中的串口參數(shù)選擇“設(shè)置” “串口父設(shè)備配置”,配置串口參數(shù),如圖3-1-2-18所示。 圖3-1-2-18(3)設(shè)置Modbus串口轉(zhuǎn)發(fā)工具mbslave.exeA. 打開mbslave.exe,選擇“Connection” “Connect”進行設(shè)置,如圖3-1-2-19所示。圖3-1-2-19B. 選擇“Setup” “Slave Definition”進行設(shè)置,如圖3-1-2-20所示。圖3-1-2-20C. 選擇“Connection” “Quick connect”運行,并設(shè)置各地址數(shù)據(jù)。3. 進行調(diào)試。在腳本驅(qū)動中,選擇“調(diào)試” “定時通道采集”進行調(diào)試,

22、如圖3-1-2-22所示。圖3-1-2-22二 不完全適用向?qū)?. 步驟1:協(xié)議分析設(shè)備命令:模仿三菱Q系列串口協(xié)議,協(xié)議格式如下:發(fā)送命令:從D寄存器地址0開始,連續(xù)讀8個16位無符號二進制幀頭:長1個字符,固定為ENQ即0x05幀識別號:長2個字符,固定為FB本地站號:長2個字符,內(nèi)容從設(shè)備屬性中獲得上位站號(即設(shè)備地址):長2個字符,內(nèi)容從設(shè)備屬性中獲得命令碼:長1個字符,固定為2寄存器地址:長2個字符,固定為D*起始地址:長6個字符,固定為000000軟元件個數(shù):長4個字符,固定為0008累加和校驗:長2個字符,通過自動計算獲得接收命令:幀頭:長1個字符,內(nèi)容不重要幀識別號:長2個字符

23、,內(nèi)容不重要本地站號:長2個字符,內(nèi)容不重要上位站號:長2個字符,內(nèi)容不重要數(shù)據(jù)體0007:長4個字符,內(nèi)容由回收數(shù)據(jù)解析獲得,解析方式為 16位無符號二進制數(shù)據(jù)幀尾:長1個字符,內(nèi)容不重要校驗:長2個字符,內(nèi)容不重要分析:由協(xié)議格式所知,腳本驅(qū)動向?qū)o法生成此協(xié)議格式,但是此協(xié)議可以由腳本驅(qū)動實現(xiàn),因此,我們先通過腳本驅(qū)動向?qū)煽蚣埽缓笤谏傻拇a中修改即可。2. 步驟2:根據(jù)向?qū)赡0逑驅(qū)褂貌襟E在此不在介紹,主要說明需注意的幾部分:1. 配置屬性由協(xié)議知,本地站號也需要通過設(shè)備屬性獲得,因此設(shè)備屬性添加“本地站號”,如圖3-2-1所示。圖3-2-12. 配置通訊幀A. 配置通訊幀結(jié)

24、構(gòu)信息,如圖3-2-2所示。圖3-2-2B. 設(shè)置收發(fā)通訊幀,如圖3-2-3所示。圖3-2-3注釋:1. 由于“本地站號”用向?qū)o法生成,因此需要在代碼中修改;幀識別號是固定值,可在向?qū)е刑砑樱ê显趲^中),也可在代碼中修改。2. 由于接收命令只需要各部分的數(shù)據(jù)長度,因此:幀頭為幀頭+幀識別號;地址為本地站號+設(shè)備地址3. 步驟3:修改向?qū)傻拇a1. 根據(jù)向?qū)傻拇a如下所示。2. 根據(jù)步驟2所知,組幀部分代碼需要修改,添加“本地站號”和“幀識別號”,修改完代碼如下所示。4. 步驟4:進行調(diào)試調(diào)試過程與ASCII碼協(xié)議的調(diào)試相同,此處不再介紹。第四章 新增函數(shù)使用說明一 數(shù)據(jù)解析函數(shù)1.

25、!SvrGetByteFromByteArr(ByRef ByteArr, start, ByRef n, Flag)函數(shù)意義:將字節(jié)數(shù)組ByteArr中從start位置開始的內(nèi)容輸出到變量n中,輸出格式為1個字節(jié)整數(shù),字節(jié)數(shù)組位置計數(shù)從1開始。返 回 值:整型,判斷輸出是否正常。0:正常小于0:錯誤,具體意義如下:-1:起始索引start小于1;-2:起始索引start大于數(shù)組上限;-3:字節(jié)數(shù)組長度不足;-4:n不是整型變量;-5:其他錯誤。參數(shù):ByteArr:傳址型,字節(jié)型數(shù)組。start:整型,輸出的首位置,從1開始。n:傳址型,長整型。Flag:長整型,解析方式0:8位無符號;1:

26、8位有符號;2:8位BCD碼。實例: !SvrGetByteFromByteArr(BA, 2, A, 1),字節(jié)數(shù)組為:00 01 02 03 04 05 06 07 08 09 00,則A=1。2.!SvrGetShortFromByteArr(ByRef ByteArr, start, ByRef n, Flag)函數(shù)意義:將字節(jié)數(shù)組ByteArr中從start位置開始的內(nèi)容輸出到變量n中,輸出的格式為2字節(jié)整型,字節(jié)數(shù)組位置計數(shù)從1開始。返 回 值:整型,判斷是輸出是否正常:0:正常;小于0:錯誤,具體意義如下:-1:啟始索引start小于1;-2:啟始索引start大于數(shù)組上限;-3

27、:字節(jié)數(shù)組長度不足;-4:n 不是整型變量;-5:其他錯誤。參數(shù):ByteArr:傳址型,字節(jié)型數(shù)組。start:整型,輸出的首位置,從1開始。n:傳址型,長整型。Flag:長整型,解析方式0:16位無符號;1:16位有符號;2:16位BCD碼。實例:!SvrGetByteFromByteArr (BA, 2, A, 1),字節(jié)數(shù)組為:00 01 02 03 04 05 06 07 08 09 00 00,則A=513。3.!SvrGetIntFromByteArr(ByRef ByteArr, start, ByRef n, Flag)函數(shù)意義:將字節(jié)數(shù)組ByteArr中從start位置開始

28、的內(nèi)容輸出到變量n中,輸出的格式為4字節(jié)整型,字節(jié)數(shù)組位置計數(shù)從1開始。返 回 值:整型,判斷是輸出是否正常:0:正常;小于0:錯誤,具體意義如下:-1:啟始索引start小于1;-2:啟始索引start大于數(shù)組上限;-3:字節(jié)數(shù)組長度不足;-4:n 不是整型變量;-5:其他錯誤。參 數(shù):ByteArr:傳址型,字節(jié)型數(shù)組。start:整型,輸出的首位置,從1開始。n:傳址型,長整型。Flag:長整型,解析方式0:32位無符號;1:32位有符號;2:32位BCD碼。實 例:!SvrGetByteFromByteArr (BA, 2, A, 1),字節(jié)數(shù)組為:00 01 02 03 04 05

29、06 07 08 09 00 00,則A=513。4.!SvrGetSingleFromByteArr(ByRef ByteArr, start, ByRef x, Flag)函數(shù)意義:將字節(jié)數(shù)組ByteArr中從start位置開始的內(nèi)容輸出到變量x中,輸出的格式為4字節(jié)數(shù)值型,字節(jié)數(shù)組位置計數(shù)從1開始。返 回 值:整型,判斷是輸出是否正常:0:正常;小于0:錯誤,具體意義如下:-1:啟始索引start小于1;-2:啟始索引start大于數(shù)組上限;-3:字節(jié)數(shù)組長度不足;-4:n 不是浮點型變量;-5:其他錯誤。參 數(shù):ByteArr:傳址型,字節(jié)型數(shù)組。start:整型,輸出的首位置,從1開

30、始。n:傳址型,長整型。Flag:長整型,對應(yīng)4種解碼次序0:“”;1:“”;2:“”;3:“”。實 例:!SvrGetByteFromByteArr (BA, 1, x, 3),字節(jié)數(shù)組為:00 00 08 40 04 05 06 07 08 09 00 00,則A=4.05.!SvrGetByteFromHexStr(str, ByRef n, Flag)函數(shù)意義:獲得將HEX表示的字符數(shù)據(jù)的內(nèi)容輸出到變量x中,輸出的格式為1字節(jié)數(shù)值型,從頭取2個字符轉(zhuǎn)換成一個字節(jié)HEX值返 回 值:整型,判斷是輸出是否正常:0:正常;小于0:錯誤,具體意義如下:-1:解析字符長度不足,至少長度為2字符-

31、2:解析字符長度一定為偶數(shù)個-3:解析字符長度大于2個,只取左邊2字符解析-4:變量類型,不是整形-5:其他錯誤參 數(shù):str,字符數(shù)據(jù)。n,傳址型,長整型;Flag, 長整型,解析方式0:8位無符號;1:8位有符號;2:8位BCD碼實 例:! SvrGetByteFromHexStr (str,n,0),str為:“0102030405060708” 則n = 16.!SvrGetShortFormHexStr(str, ByRef n, Flag)函數(shù)意義:獲得將HEX表示的字符數(shù)據(jù)的內(nèi)容輸出到變量x中,輸出的格式為2字節(jié)數(shù)值型,從頭取4個字符轉(zhuǎn)換成2個字節(jié)短整型值返 回 值:整型,判斷是

32、輸出是否正常:0:正常;小于0:錯誤,具體意義如下:-1:解析字符長度不足,至少長度為2字符-2:解析字符長度一定為偶數(shù)個-3:解析字符長度大于2個,只取左邊2字符解析-4:變量類型,不是整形-5:其他錯誤參 數(shù):str,字符數(shù)據(jù)。n,傳址型,長整型;Flag, 長整型,解析方式0:16位無符號;1:16位有符號;2:16位BCD碼實 例:!SvrGetShortFromHexStr (str,n,0),str為:“0102030405060708” 則n = 5137.!SvrGetIntFromHexStr(str, ByRef n, Flag)函數(shù)意義:獲得將HEX表示的字符數(shù)據(jù)的內(nèi)容輸

33、出到變量x中,輸出的格式為4字節(jié)數(shù)值型,從頭取8個字符轉(zhuǎn)換成4個字節(jié)整型值返 回 值:整型,判斷是輸出是否正常:0:正常;小于0:錯誤,具體意義如下:-1:解析字符長度不足,至少長度為2字符-2:解析字符長度一定為偶數(shù)個-3:解析字符長度大于2個,只取左邊2字符解析-4:變量類型,不是整形-5:其他錯誤參 數(shù):str,字符數(shù)據(jù)。n,傳址型,長整型;Flag, 長整型,解析方式0:32位無符號;1:32位有符號;2:32位BCD碼實 例:! SvrGetIntFromHexStr (str,n,0),str為:“10200000030405060708” 則n = 5138.!SvrGetSin

34、gleFromHexStr(str, ByRef x, Flag)函數(shù)意義:獲得將HEX表示的字符數(shù)據(jù)的內(nèi)容輸出到變量x中,輸出的格式為4字節(jié)數(shù)值型,從頭取8個字符轉(zhuǎn)換成4個字節(jié)單精度浮點值返 回 值:整型,判斷是輸出是否正常:0:正常;小于0:錯誤,具體意義如下:-1:解析字符長度不足,至少長度為2字符-2:解析字符長度一定為偶數(shù)個-3:解析字符長度大于2個,只取左邊2字符解析-4:變量類型,不是浮點型變量-5:其他錯誤參 數(shù):str,字符數(shù)據(jù)。x,傳址型,數(shù)值型;Flag, 長整型,對應(yīng)4種解碼次序0:“”;1:“”;2:“”;3:“”實 例:! SvrGetSingleFromHexSt

35、r (str,x,3),str為:“000008400102030405060708” 則x = 4.0二 數(shù)據(jù)校驗函數(shù)1.!SvrByteArraySum(ByRef ByteArr, start, length)函數(shù)意義:從數(shù)組中start索引開始,連續(xù)length個字節(jié),按求和方式計算返回校驗結(jié)果返 回 值:整型,返回正確的校驗值/判斷是輸出是否正常:=0:校驗結(jié)果;小于0:錯誤,具體意義如下:-1:啟始索引start小于1-2:啟始索引start大于數(shù)組上限-3:校驗數(shù)組長度小于等于零-4:字節(jié)數(shù)組長度不足-5:其他錯誤參 數(shù):ByteArr,傳址型,字節(jié)型數(shù)組。start,長整型,檢

36、驗數(shù)據(jù)的啟始字節(jié)在數(shù)組中l(wèi)ength, 長整型,連續(xù)校驗數(shù)據(jù)的個數(shù)實 例:n = !SvrByteArraySum(ByteArr,1,4) ByteArr為:00 01 02 03 04 05 06 07 則n = 62.!SvrStrSum(str, Flag)函數(shù)意義:返 回 值:字符型,返回正確的校驗值/判斷是輸出是否正常:錯誤返回值: -1:校驗字符串長度為0-2:校驗的字符串長度必須為偶數(shù)參 數(shù):str,字符型,需要校驗數(shù)據(jù)Flag,長整型,0:按2個字符形成1BYTE HEX值進行校驗;1:直接按ASCII字符值進行校驗。實 例:strRe = !SvrStrSum(str,0)

37、 str為:“0001020304050607”則strRe = “06”3.!SvrByteArrayXOR(ByRef ByteArr, start, length)函數(shù)意義:從數(shù)組中start索引開始,連續(xù)length個字節(jié),按異或方式計算返回校驗結(jié)果返 回 值:整型,返回正確的校驗值/判斷是輸出是否正常:=0:校驗結(jié)果;小于0:錯誤,具體意義如下:-1:啟始索引start小于1-2:啟始索引start大于數(shù)組上限-3:校驗數(shù)組長度小于等于零-4:字節(jié)數(shù)組長度不足-5:其他錯誤參 數(shù):ByteArr,傳址型,字節(jié)型數(shù)組。start,長整型,檢驗數(shù)據(jù)的啟始字節(jié)在數(shù)組中l(wèi)ength, 長整型

38、,連續(xù)校驗數(shù)據(jù)的個數(shù)實 例:n = !SvrByteArraySum(ByteArr,1,4) ByteArr為:00 01 02 03 04 05 06 07則n = 04.!SvrStrXOR(str, Flag)函數(shù)意義: 返 回 值:字符型,返回正確的校驗值/判斷是輸出是否正常:錯誤返回值:-1:校驗字符串長度為0-2:校驗的字符串長度必須為偶數(shù)參 數(shù):str,字符型,需要校驗數(shù)據(jù)Flag,長整型,0:按2個字符形成1BYTE HEX值進行校驗;1:直接按ASCII字符值進行校驗實 例:strRe = !SvrStrSum(str,0) str為:“0001020304050607”則

39、strRe = “00”5.!SvrStrModbusCRC(ByRef ByteArr, start, length)函數(shù)意義: 從數(shù)組中start索引開始,連續(xù)length個字節(jié),按異或方式計算返回校驗結(jié)果返 回 值:整型,返回正確的校驗值/判斷是輸出是否正常:=0:校驗結(jié)果;小于0:錯誤,具體意義如下:-1:啟始索引start小于1-2:啟始索引start大于數(shù)組上限-3:校驗數(shù)組長度小于等于零-4:字節(jié)數(shù)組長度不足-5:其他錯誤參 數(shù):ByteArr,傳址型,字節(jié)型數(shù)組。start,長整型,檢驗數(shù)據(jù)的啟始字節(jié)在數(shù)組中l(wèi)ength, 長整型,連續(xù)校驗數(shù)據(jù)的個數(shù)實 例:n = ! SvrStrModbusLRC (ByteArr,1,4) ByteArr為:010300000008則n = 0x0c446.!SvrStrModbusLRC(str, start, length)函數(shù)意義: 返 回 值:字符型,返回正確的校驗值/判斷是輸出是否正常: 錯誤返回值:-1:啟始索引start小于1-2:啟始索引start大于數(shù)組上限-3:校驗數(shù)組長度小于等于零-4:字節(jié)數(shù)組長度不足參 數(shù):str,字符型,需要校驗數(shù)據(jù)start,長整型,檢驗數(shù)據(jù)的啟始字節(jié)在數(shù)組中l(wèi)engt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論