




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、OptionExplicitPublicbln_busyAsBooleanPublicbln_successAsBooleanPublicbln_readwordAsBooleanPublicDeclareFunctiontimeGetTimeLibwinmm.dll()AsLongPublicSubtran_modbus_order(ByValbyt_slv_idAsByte,ByValbyt_funcAsByte,ByValaddrAsLong,byt_data()AsByte)Dimtrans_byte()AsByteDimiAsIntegerDimjAsIntegerDimkAsInt
2、egerDimIndexAsIntegerDimCRC()AsByteDimtempAsIntegerDimlenthAsIntegerDimlenth1AsIntegerSelectCasebyt_funcCase1ReDimtrans_byte(7)AsBytetrans_byte(0)=byt_slv_idtrans_byte(1)=1trans_byte(2)=(addr-1)256trans_byte(3)=(addr-1)Mod256trans_byte(4)=0trans_byte(5)=byt_data(0)CRC=CRC16(trans_byte)trans_byte(6)=
3、CRC(0)trans_byte(7)=CRC(1)Case3ReDimtrans_byte(7)AsBytetrans_byte(0)=byt_slv_idtrans_byte(1)=3trans_byte(2)=(addr-1)256trans_byte(3)=(addr-1)Mod256trans_byte(4)=0trans_byte(5)=byt_data(0)CRC=CRC16(trans_byte)trans_byte(6)=CRC(0)trans_byte(7)=CRC(1)Case6ReDimtrans_byte(7)AsBytetrans_byte(0)=byt_slv_i
4、dtrans_byte(1)=6trans_byte(2)=(addr-1)256trans_byte(3)=(addr-1)Mod256trans_byte(4)=byt_data(0)trans_byte(5)=byt_data(1)CRC=CRC16(trans_byte)trans_byte(6)=CRC(0)trans_byte(7)=CRC(1)Case15lenth=UBound(byt_data)+1lenth1=(lenth-1)8+1ReDimtrans_byte(8+lenth1)trans_byte(0)=byt_slv_idtrans_byte(1)=&HFt
5、rans_byte(2)=(addr-1)256trans_byte(3)=(addr-1)Mod256trans_byte(4)=0trans_byte(5)=lenthtrans_byte(6)=lenth1k=0Index=7temp=0Fori=1Tolenthtemp=temp+byt_data(i-1)*(2Ak)If(iMod8=0)Thentrans_byte(Index)=CByte(temp)Index=Index+1temp=0k=0EndIfk=k+1Nextitrans_byte(Index)=CByte(temp)CRC=CRC16(trans_byte)trans
6、_byte(7+lenth1)=CRC(0)trans_byte(8+lenth1)=CRC(1)Case16lenth=UBound(byt_data)+1ReDimtrans_byte(8+lenth)trans_byte(0)=byt_slv_idtrans_byte(1)=&H10trans_byte(2)=(addr-1)256trans_byte(3)=(addr-1)Mod256trans_byte(4)=0trans_byte(5)=lenth2trans_byte(6)=lenthFori=0Tolenth-1trans_byte(7+i)=byt_data(i)Ne
7、xtiCRC=CRC16(trans_byte)trans_byte(7+lenth)=CRC(0)trans_byte(8+lenth)=CRC(1)EndSelectfrm_modbus.Output=trans_byteDimts_iAsIntegerDimts_strAsStringts_str=send:Forts_i=0ToUBound(trans_byte)ts_str=ts_str+CStr(Hex(trans_byte(ts_i)+Nextts_ifrm_main.Txt_msg.Text=ts_str+Chr(13)+Chr(10)+frm_main.Txt_msg.Tex
8、tIf(Len(frm_main.Txt_msg.Text)30000)Thenfrm_main.Txt_msg.Text=EndIffrm_modbus.OutBufferCount=0EndSubFunctionCRC16(data()AsByte)AsStringDimCRC16LoAsByte,CRC16HiAsByteCRC 寄存器DimCLAsByte,CHAsByte多項(xiàng)式碼&HA001DimSaveHiAsByte,SaveLoAsByteDimiAsIntegerDimflagAsIntegerOnErrorGoTowrongCRC16Lo=&HFFCRC16
9、Hi=&HFFCL=&H1CH=&HA0Fori=0ToUBound(data)-2DoEventsDoEventsDoEventsCRC16Lo=CRC16LoXordata(i)每一個(gè)數(shù)據(jù)與 CRC 寄存器進(jìn)行異或Forflag=0To7SaveHi=CRC16HiSaveLo=CRC16Lowrong:errprocessCRC16EndFunctionPublicFunctionreadcoils(ByValslv_idAsByte,ByValaddrAsLong,ByVallenthAsByte,ByValint_timeAsInteger,ByRefret_
10、val()AsByte)AsIntegerDimbyt_data(0)AsByteDimlngStartTimerAsLongDimlnginvalAsLongDimbln_cxAsBooleanDimret_byte()AsBytetm_delay.Enabled=FalseCRC16Hi=CRC16Hi2CRC16Lo=CRC16Lo2If(SaveHiAnd&H1)=&H1)ThenCRC16Lo=CRC16LoOr&H80EndIfIf(SaveLoAnd&H1)=&H1)ThenCRC16Hi=CRC16HiXorCHCRC16Lo=CRC16
11、LoXorCLEndIfNextflagNextiDimReturnData(1)AsByteReturnData(0)=CRC16LoReturnData(1)=CRC16HiCRC16=ReturnDataExitFunction高位右移一位低位右移一位如果高位字節(jié)最后一位為 1則低位字節(jié)右移后前面補(bǔ) 1否則自動(dòng)補(bǔ) 0如果 LSB 為 1,則與多項(xiàng)式碼進(jìn)行異或CRC 高位CRC 低位byt_data(0)=lenthDoUntilbln_busy=FalseOr(Abs(timeGetTime-lng_time200)DoEventsLoopbln_busy=Truefrm_modbus.
12、InBufferCount=0tran_modbus_orderslv_id,1,addr,byt_datalngStartTimer=timeGetTimelnginval=timeGetTime()bln_success=FalseDimr_input()AsByteDimiAsIntegerStaticintCountAsIntegerDoUntilAbs(timeGetTime-lngStartTimer)int_timeOrbln_successDoEventsDoEventsDoEventsDoEventsInginval=timeGetTime()If(Abs(timeGetTi
13、me-Inginval)8)ThenIf(intCountfrm_modbus.InBufferCountOrintCount=0)ThenintCount=frm_modbus.InBufferCountElseTimer1.Enabled=FalseReDimr_input(1024)AsBytefrm_modbus.InputLen=0Input_Len=frm_M_modbus.InBufferCountr_input=frm_modbus.Inputfrm_modbus.InBufferCount=0Fori=0ToUBound(r_input)Debug.Printr_input(
14、i)Text1.Text=Text1.Text&CStr(Hex(r_input(i)+NextiintCount=0bln_success=TrueEndIflnginval=timeGetTime()EndIfLoopIf(bln_success)ThenDimlenth1AsIntegerreadcoils=0ret_byte=r_inputlenth1=(lenth-1)8+1ReDimret_val(lenth1-1)Fori=1Tolenth1ret_val(i-1)=ret_byte(2+i)NextiintCount=0ElseintCount=0readcoils=1
15、EndIfbln_busy=Falsetm_delay.Enabled=TrueEndFunctionPublicFunctionwritecoils(ByValslv_idAsByte,ByValaddrAsLong,ByVallenthAsByte,ByRefbyt_data()AsByte,ByValint_timeAsInteger)AsIntegerDimlngStartTimerAsLongDimlnginvalAsLongDimbln_cxAsBooleantm_delay.Enabled=FalseDoUntilbln_busy=FalseOr(Abs(timeGetTime-
16、lng_time200)DoEventsDoEventsDoEventsDoEventsDoEventsLoopbln_busy=Truefrm_modbus.InBufferCount=0tran_modbus_orderslv_id,15,addr,byt_datalngStartTimer=timeGetTimelnginval=timeGetTime()bln_success=FalseDimr_input()AsByteDimiAsIntegerStaticintCountAsIntegerDoUntilAbs(timeGetTime-lngStartTimer)int_timeOr
17、bln_successDoEventsDoEventsDoEventsDoEventsDoEventsDoEventsDoEventslnginval=timeGetTime()If(Abs(timeGetTime-lnginval)8)ThenIf(intCountfrm_modbus.InBufferCountOrintCount=0)ThenintCount=frm_modbus.InBufferCountElsefrm_modbus.InputLen=0Input_Len=frm_M_modbus.InBufferCountr_input=frm_modbus.Inputfrm_mod
18、bus.InBufferCount=0Fori=0ToUBound(r_input)Debug.Printr_input(i)NextiintCount=0bln_success=TrueEndIfInginval=timeGetTime()EndIfLoopIf(bln_success)Thenwritecoils=0intCount=0ElseintCount=0writecoils=1EndIfbln_busy=Falsetm_delay.Enabled=TrueEndFunctionPublicFunctionreadwords(ByValslv_idAsByte,ByValaddrA
19、sLong,ByVallenthAsByte,ByValint_timeAsInteger,ByRefret_val()AsLong)AsIntegerDimlenth1AsIntegerDimlenth2AsIntegerDimret_val1()AsLongDimret_val2()AsLongDimaddr1AsLongDimaddr2AsLongDimretAsIntegerIf(lenth100)Thenlenth1=100lenth2=lenth-100addr1=addraddr2=addr+100ret=readwords1(slv_id,addr1,lenth1,int_ti
20、me,ret_val1)If(ret0)Thenreadwords=retExitFunctionEndIfret=readwords1(slv_id,addr2,lenth2,int_time,ret_val2)If(ret0)Thenreadwords=retExitFunctionEndIfReDimret_val(lenth-1)AsLongDimiAsIntegerFori=0To99ret_val(i)=ret_val1(i)NextiFori=100Tolenth-1ret_val(i)=ret_val2(i-100)Nextireadwords=retElsereadwords
21、=readwords1(slv_id,addr,lenth,int_time,ret_val)EndIfEndFunctionPublicFunctionreadwords1(ByValslv_idAsByte,ByValaddrAsLong,ByVallenthAsByte,ByValint_timeAsInteger,ByRefret_val()AsLong)AsIntegerDimbyt_data(0)AsByteDimlngStartTimerAsLongDimret_byte()AsByteDimr_input()AsByteDimCRC()AsByteDimintCountAsIn
22、tegerDimiAsIntegerbyt_data(0)=lenthDoUntilbln_busy=FalseOr(Abs(timeGetTime-lng_time200)DoEventsDoEventsLoopbln_busy=Truefrm_modbus.InBufferCount=0tran_modbus_orderslv_id,3,addr,byt_datalngStartTimer=timeGetTimebln_success=FalseDoUntilAbs(timeGetTime-lngStartTimer)int_timeOrbln_successDoEventsDoEvent
23、sDoEventsintCount=frm_modbus.InBufferCountIfintCount=CInt(byt_data(0)*2+5)Thenbln_success=Truefrm_modbus.InputLen=0r_input=frm_modbus.Inputfrm_modbus.InBufferCount=0EndIfLoopfrm_Main.Label2.Caption=timeGetTime-lngStartTimer+CLng(frm_Main.Label2.Caption)Ifbln_successAndintCount=CInt(byt_data(0)*2+5)T
24、henCRC=CRC16(r_input)IfCRC(0)=r_input(UBound(r_input)-1)AndCRC(1)=r_input(UBound(r_input)Thenret_byte=r_inputReDimret_val(lenth-1)AsLongDimbyt(3)AsByteFori=0Tolenth-1ret_val(i)=CLng(ret_byte(i*2+3)*256+ret_byte(i*2+4)If(ret_val(i)32767)Thenret_val(i)=ret_val(i)-65536EndIfNextireadwords1=0通訊成功Elserea
25、dwords1=2通訊錯(cuò)誤EndIfElseIfintCount0Thenreadwords1=2通訊錯(cuò)誤r_input=frm_modbus.InputElsereadwords1=1通訊失敗EndIfbln_busy=FalseEndIfDimts_iAsIntegerDimts_strAsStringIf(intCount0)Thents_str=receive:Forts_i=0ToUBound(r_input)ts_str=ts_str+CStr(Hex(r_input(ts_i)+Nextts_ifrm_main.Txt_msg.Text=ts_str+Chr(13)+Chr(10
26、)+frm_main.Txt_msg.TextElsets_str=noreceive:frm_main.Txt_msg.Text=ts_str+Chr(13)+Chr(10)+frm_main.Txt_msg.TextEndIfEndFunctionPublicFunctionwritewords(ByValslv_idAsByte,ByValaddrAsLong,ByVallenthAsByte,ByReflng_data()AsLong,ByValint_timeAsInteger)AsIntegerDimretAsIntegerDimlenth1AsIntegerDimlenth2As
27、IntegerDimaddr1AsIntegerDimaddr2AsIntegerDimlng_data1()AsLongDimlng_data2()AsLongDimiAsIntegerIf(lenth100)ThenReDimlng_data1(99)ReDimlng_data2(lenth-100-1)Fori=0To99lng_data1(i)=lng_data(i)NextiFori=100Tolenth-1lng_data2(i-100)=lng_data(i)Nextiaddr1=addraddr2=addr+100lenth1=100lenth2=lenth-100ret=wr
28、itewords1(slv_id,addr1,lenth1,lng_data1,int_time)If(ret0)Thenwritewords=retExitFunctionEndIfret=writewords1(slv_id,addr2,lenth2,lng_data2,int_time)If(ret0)Thenwritewords=retExitFunctionEndIfElsewritewords=writewords1(slv_id,addr,lenth,lng_data,int_time)EndIfEndFunctionPublicFunctionwritewords1(ByVal
29、slv_idAsByte,ByValaddrAsLong,ByVallenthAsByte,ByReflng_data()AsLong,ByValint_timeAsInteger)OnErrorGoTowrongDimlngStartTimerAsLongDimlnginvalAsLongDimbln_cxAsBooleanDimbyt_data()AsByteDimr_input()AsByteDimCRC()AsByteDimiAsIntegerReDimbyt_data(lenth*2-1)AsByteFori=0Tolenth-1byt_data(2*i)=lng_data(i)25
30、6byt_data(2*i+1)=lng_data(i)Mod256NextiDoUntilbln_busy=FalseOr(Abs(timeGetTime-lng_time200)DoEventsDoEventsDoEventsDoEventsDoEventsLoopbln_busy=Truefrm_modbus.InBufferCount=0If(lenth1)Thentran_modbus_orderslv_id,16,addr,byt_dataElsetran_modbus_orderslv_id,6,addr,byt_dataEndIflngStartTimer=timeGetTim
31、ebln_success=FalseDimintCountAsIntegerDoUntilAbs(timeGetTime-lngStartTimer)int_timeOrbln_successDoEventsDoEventsDoEventsDoEventsDoEventsDoEventsintCount=frm_modbus.InBufferCountIfintCount=8Thenbln_success=Truefrm_modbus.InputLen=0r_input=frm_modbus.Inputfrm_modbus.InBufferCount=0EndIfLoopIfbln_succe
32、ssAndintCount=8ThenCRC=CRC16(r_input)IfCRC(0)=r_input(UBound(r_input)-1)AndCRC(1)=r_input(UBound(r_input)Thenwritewords1=0通訊成功Elsewritewords1=2通訊錯(cuò)誤EndIfElseIfintCount0Thenwritewords1=2通訊錯(cuò)誤Elsewritewords1=1通訊失敗EndIfIf(Notbln_successAndintCount0)Thenfrm_modbus.InputLen=0r_input=frm_modbus.Inputfrm_mod
33、bus.InBufferCount=0EndIfbln_busy=FalseDimts_iAsIntegerDimts_strAsStringIf(intCount0)Thents_str=receive:Forts_i=0ToUBound(r_input)ts_str=ts_str+CStr(Hex(r_input(ts_i)+Nextts_ifrm_main.Txt_msg.Text=ts_str+Chr(13)+Chr(10)+frm_main.Txt_msg.TextElsets_str=noreceive:frm_main.Txt_msg.Text=ts_str+Chr(13)+Ch
34、r(10)+frm_main.Txt_msg.TextEndIfwrong:DoEventsEndFunction讀浮點(diǎn)數(shù)PublicFunctionreadsgls(ByValslv_idAsByte,ByValaddrAsLong,ByVallenthAsByte,ByValint_timeAsInteger,ByRefret_val()AsSingle)AsIntegerDimlenth1AsIntegerDimlenth2AsIntegerDimret_val1()AsSingleDimret_val2()AsSingleDimaddriAsLongDimaddr2AsLongDimr
35、etAsIntegerIf(lenth50)Thenlenthi=50lenth2=lenth-lenthiaddri=addraddr2=addr+100ret=readsglsi(slv_id,addri,lenthi,int_time,ret_vali)If(ret0)Thenreadsgls=retExitFunctionEndIfret=readsglsi(slv_id,addr2,lenth2,int_time,ret_val2)If(ret0)Thenreadsgls=retExitFunctionEndIfReDimret_val(lenth-i)AsSingleDimiAsI
36、ntegerFori=0To49ret_val(i)=ret_vali(i)NextiFori=50Tolenth-iret_val(i)=ret_val2(i-50)Nextireadsgls=retElsereadsgls=readsglsi(slv_id,addr,lenth,int_time,ret_val()EndIfEndFunctionPublicFunctionreadsglsi(ByValslv_idAsByte,ByValaddrAsLong,ByVallenthAsByte,ByValint_timeAsInteger,ByRefret_val()AsSingle)AsI
37、ntegerOnErrorGoTowrongDimiAsIntegerDimlngStartTimerAsLongDimbyt_data(0)AsByteDimret_byte()AsByteDimr_input()AsByteDimCRC()AsByteDimintCountAsIntegerbyt_data(0)=lenth*2DoUntilbln_busy=FalseOr(Abs(timeGetTime-lng_time200)DoEventsDoEventsDoEventsDoEventsDoEventsLoopbln_busy=Truefrm_modbus.InBufferCount
38、=0tran_modbus_orderslv_id,3,addr,byt_datalngStartTimer=timeGetTimebln_success=FalseDoUntilAbs(timeGetTime-lngStartTimer)int_timeOrbln_successDoEventsDoEventsDoEventsDoEventsDoEventsintCount=frm_modbus.InBufferCountIfintCount=CInt(byt_data(0)*2+5)Thenbln_success=Truefrm_modbus.InputLen=0r_input=frm_m
39、odbus.Inputfrm_modbus.InBufferCount=0EndIfLoopfrm_main.Label2.Caption=timeGetTime-lngStartTimer+CLng(frm_main.Label2.Caption)Ifbln_successAndintCount=CInt(byt_data(0)*2+5)ThenCRC=CRC16(r_input)IfCRC(0)=r_input(UBound(r_input)-1)AndCRC(1)=r_input(UBound(r_input)Thenret_byte=r_inputReDimret_val(lenth-
40、1)AsSingleDimbyt(3)AsByteFori=0Tolenth-1byt(0)=ret_byte(i*4+4)byt(1)=ret_byte(i*4+3)byt(2)=ret_byte(i*4+6)byt(3)=ret_byte(i*4+5)ret_val(i)=bytTosgl(byt)Nextireadsgls1=0Elsereadsglsl=2EndIfElselfintCount0Thenreadsglsl=2Elsereadsgls1=1EndIfbln_busy=FalseDimts_iAsIntegerDimts_strAsStringIf(intCount0)Th
41、ents_str=receive:Forts_i=0ToUBound(r_input)ts_str=ts_str+CStr(Hex(r_input(ts_i)+Nextts_ifrm_main.Txt_msg.Text=ts_str+Chr(13)+Chr(10)+frm_main.Txt_msg.TextElsets_str=noreceive:frm_main.Txt_msg.Text=ts_str+Chr(13)+Chr(10)+frm_main.Txt_msg.TextEndIfEndFunction寫浮點(diǎn)數(shù)PublicFunctionwritesgls(ByValslv_idAsBy
42、te,ByValaddrAsLong,ByVallenthAsByte,ByRefsgl_data()AsSingle,ByValint_timeAsInteger)AsIntegerDimaddr1AsIntegerDimaddr2AsIntegerDimlenth1AsIntegerDimlenth2AsIntegerDimsgl_data1()AsSingleDimsgl_data2()AsSingleDimiAsIntegerDimretAsIntegerIflenth50ThenReDimsgl_data1(49)AsSingleReDimsgl_data2(lenth-51)lenth1=50lenth2=lenth-lenth1addr1=addraddr2=addr+100Fori=0To49sgl_data1(i)=sgl_data(i)NextiFori=50Tolenth-1sgl_data2(i-50)=sgl_data(i)Nextiret=writesgls1(slv_id,addri,lenthl,sgl_data1,int_time)If(ret0)Thenwritesgls=retExitFun
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 毛坯店面出租合同協(xié)議書
- 團(tuán)隊(duì)拓展訓(xùn)練合同協(xié)議書
- 水果店轉(zhuǎn)讓合同協(xié)議書
- 友誼合同協(xié)議書怎么寫的
- 美容美發(fā)商業(yè)計(jì)劃書概述
- ai教育項(xiàng)目計(jì)劃書
- 廣告投放合同協(xié)議書樣本
- 中國注射液用鹵化丁基橡膠塞行業(yè)市場占有率及投資前景預(yù)測分析報(bào)告
- 親子研學(xué)商業(yè)計(jì)劃書
- 菜鳥驛站合同協(xié)議書范本
- 吉塔行星模擬課程
- 2023上海虹口區(qū)初三語文一模作文寫作指導(dǎo)及范文:這也是我的舞臺
- 《反本能 如何對抗你的習(xí)以為?!纷x書筆記思維導(dǎo)圖PPT模板下載
- 西南交11春學(xué)期《模擬電子技術(shù)A》離線作業(yè)
- 施工單位平安工地考核評價(jià)表(標(biāo)準(zhǔn))
- JJF 1855-2020純度標(biāo)準(zhǔn)物質(zhì)定值計(jì)量技術(shù)規(guī)范有機(jī)物純度標(biāo)準(zhǔn)物質(zhì)
- GB/T 35194-2017土方機(jī)械非公路機(jī)械傳動(dòng)寬體自卸車技術(shù)條件
- GB 6245-2006消防泵
- SMT通用作業(yè)指導(dǎo)書
- 工作票培訓(xùn)-課件
- 三氯乙醛 氯醛MSDS危險(xiǎn)化學(xué)品安全技術(shù)說明書
評論
0/150
提交評論