?? zlgcomport.bas
字號(hào):
Attribute VB_Name = "ZlgComPort_Module"
' /*
' ************************************************************************
' *
' * Copyright(c) 2002, 周立功單片機(jī)發(fā)展有限公司
' * All rights reserved.
' *
' * 文 件: ZlgComPort_Module.bas
' *
' * 摘 要: 本程序主要是演示ZmpCom.dll API函數(shù)調(diào)用方法,及錯(cuò)誤時(shí)行處理
' *
' *
' * 創(chuàng)建日期: 2002年10月31日
' *
' *************************************************************************
' */
'*************************************************************************
'* 聲明引用 ZlgComPort API函數(shù)
'*************************************************************************
'------------------------------------------------------------
'說(shuō)明: 設(shè)置通信波特率
'參數(shù): Baud 波特率(bit)
'返回: True 設(shè)置波特率成功、False 設(shè)置波特率失敗
'------------------------------------------------------------
Declare Function SetCommBaud Lib "ZlgComPort.dll" (ByVal Baud As Integer) As Boolean
'------------------------------------------------------------
'說(shuō)明: 設(shè)置通信端口
'參數(shù): Port 通信端口號(hào)(1-4)
'返回: True 設(shè)置通信端口成功、False 設(shè)置通信端口失敗
'------------------------------------------------------------
Declare Function SetCommPort Lib "ZlgComPort.dll" (ByVal Port As Integer) As Boolean
'------------------------------------------------------------
'說(shuō)明: 打開通信端口
'參數(shù): 無(wú)
'返回: 0 打開通信端口成功、非0打開通信端口失敗
'------------------------------------------------------------
Declare Function OpenPort Lib "ZlgComPort.dll" () As Integer
'------------------------------------------------------------
'說(shuō)明: 關(guān)閉當(dāng)前通信端口
'參數(shù): 無(wú)
'返回: 0 關(guān)閉當(dāng)前通信端口成功、非0關(guān)閉當(dāng)前通信端口失敗
'------------------------------------------------------------
Declare Function ClosePort Lib "ZlgComPort.dll" () As Integer
'------------------------------------------------------------
'說(shuō)明: 發(fā)送數(shù)據(jù)命令
'參數(shù): pOrderBuff 發(fā)送數(shù)據(jù)首地址、pAckBuff 接收數(shù)據(jù)首地址、
' nTimeOuts 發(fā)送命令超時(shí)
'返回: 0 發(fā)送數(shù)據(jù)成功、非0發(fā)送數(shù)據(jù)失敗
'------------------------------------------------------------
Declare Function SendOrder Lib "ZlgComPort.dll" (ByRef pOrderBuff As Byte, ByRef packbuff As Byte, ByVal nTimeOuts As Integer) As Integer
'*************************************************************************
'* 聲明引用系統(tǒng)API函數(shù)
'*************************************************************************
'------------------------------------------------------------
'說(shuō)明: 掛起當(dāng)前線程
'參數(shù): dwMilliseconds 掛起時(shí)間(毫秒)
'返回: 無(wú)
'------------------------------------------------------------
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'*************************************************************************
'* 聲明全局變量
'*************************************************************************
Public St As Long '接收發(fā)送數(shù)據(jù)命返回值
Public PortOpen As Boolean '串口打開標(biāo)致
Public stbl As Boolean '接收端口設(shè)置狀態(tài)
'*************************************************************************
'* 程序函數(shù)定義
'*************************************************************************
'------------------------------------------------------------
'說(shuō)明: 讀E2PRom數(shù)據(jù)
'參數(shù): DpAdr DP-51地址、BgnAdr_L 開始讀數(shù)據(jù)低地址、
' BgnAdr_H 開始讀數(shù)據(jù)高地址、nLen 讀數(shù)據(jù)長(zhǎng)度
'返回: 有字符串返回表示讀數(shù)據(jù)成功,1為讀數(shù)據(jù)失敗
'------------------------------------------------------------
Function ReadE2PRom(ByVal DpAdr As Integer, ByVal BgnAdr_L As Integer, ByVal BgnAdr_H As Integer, ByVal nLen As Integer)
Dim nFrameLen As Integer '幀長(zhǎng)度變量
Dim nFrameNum As Integer '幀數(shù)
Dim nFrameLeave As Integer '最后一帳數(shù)據(jù)長(zhǎng)度
Dim cAFrameOrder(7) As Byte '發(fā)送數(shù)據(jù)緩沖區(qū)
Dim cAFrameAck(13) As Byte '接收數(shù)據(jù)緩沖區(qū)
Dim nBgnAdr_l As Integer '讀數(shù)據(jù)低地址
Dim nBgnAdr_h As Integer '讀數(shù)據(jù)高地址
Dim Str As String '返回字符串
Dim i As Integer
Dim j As Integer
ReadE2PRom = ""
nFrameLen = 8 '每幀接收八個(gè)數(shù)據(jù)
nBgnAdr_l = BgnAdr_L
nBgnAdr_h = BgnAdr_H
If nLen > 0 Then
nFrameNum = Int(nLen / nFrameLen)
nFrameLeave = nLen Mod nFrameLen
End If
For i = 1 To nFrameNum '發(fā)送nFrameNum幀數(shù)據(jù)
cAFrameOrder(0) = &H12
cAFrameOrder(1) = &H20
cAFrameOrder(2) = &H5
cAFrameOrder(3) = DpAdr 'DP-51地址
cAFrameOrder(4) = nBgnAdr_l '取發(fā)送地址
cAFrameOrder(5) = nBgnAdr_h
cAFrameOrder(6) = 8 '讀取數(shù)據(jù)長(zhǎng)度
cAFrameOrder(7) = 0 '計(jì)算校驗(yàn)和
For j = 0 To 6
cAFrameOrder(7) = cAFrameOrder(7) Xor cAFrameOrder(j)
Next j
nBgnAdr_l = nBgnAdr_l + 8 '計(jì)算下一個(gè)地址
St = SendOrder(cAFrameOrder(0), cAFrameAck(0), 1000)
Sleep 100 '掛起100毫秒
If St = 0 Then '判斷發(fā)送數(shù)據(jù)是否正確
If cAFrameAck(1) = &HA0 Then
For j = 1 To nFrameLen
Str = Str + Chr(cAFrameAck(2 + j))
Next j
Else
St = ErrManage(cAFrameAck(2), cAFrameAck(3), 0) '取返回錯(cuò)誤幀數(shù)據(jù)
ReadE2PRom = "" '清空接收數(shù)據(jù)
Exit Function
End If
Else
St = ErrManage(cAFrameAck(2), cAFrameAck(3), 0) '取返回錯(cuò)誤幀數(shù)據(jù)
ReadE2PRom = "" '清空接收數(shù)據(jù)
Exit Function
End If
Next i
If nFrameLeave > 0 Then
cAFrameOrder(0) = &H12 '發(fā)最后一幀數(shù)據(jù)
cAFrameOrder(1) = &H20
cAFrameOrder(2) = &H5
cAFrameOrder(3) = DpAdr 'DP-51地址
cAFrameOrder(4) = nBgnAdr_l '取發(fā)送地址
cAFrameOrder(5) = nBgnAdr_h
cAFrameOrder(6) = nFrameLeave
cAFrameOrder(7) = 0 '計(jì)算校驗(yàn)和
For j = 0 To 6
cAFrameOrder(7) = cAFrameOrder(7) Xor cAFrameOrder(j)
Next j
St = SendOrder(cAFrameOrder(0), cAFrameAck(0), 1000)
Sleep 100 '掛起100毫秒
If St = 0 Then '判斷發(fā)送數(shù)據(jù)是否正確
If cAFrameAck(1) = &HA0 Then
For j = 1 To nFrameLeave
Str = Str + Chr(cAFrameAck(2 + j))
Next j
Else
St = ErrManage(cAFrameAck(2), cAFrameAck(3), 0) '取返回錯(cuò)誤幀數(shù)據(jù)
ReadE2PRom = "" '清空接收數(shù)據(jù)
Exit Function
End If
Else
St = ErrManage(cAFrameAck(2), cAFrameAck(3), 0) '取返回錯(cuò)誤幀數(shù)據(jù)
ReadE2PRom = "" '清空接收數(shù)據(jù)
Exit Function
End If
End If
ReadE2PRom = Str
'返回字符串
End Function
'------------------------------------------------------------
'說(shuō)明: 向?qū)慐2PRom數(shù)據(jù)
'參數(shù): DpAdr DP-51地址、BgnAdr_L 開始寫數(shù)據(jù)低地址、
' BgnAdr_H 開始寫數(shù)據(jù)高地址、WriteDate 所寫數(shù)據(jù)
'返回: 0 為發(fā)送數(shù)成功,1為發(fā)送數(shù)據(jù)失敗
'------------------------------------------------------------
Function WriteE2PRom(ByVal DpAdr As Integer, ByVal BgnAdr_L As Integer, ByVal BgnAdr_H As Integer, ByVal WriteDate As String)
Dim nFrameLen As Integer '幀長(zhǎng)度變量
Dim nFrameNum As Integer '幀數(shù)
Dim nFrameLeave As Integer '最后一帳數(shù)據(jù)長(zhǎng)度
Dim cAFrameOrder(14) As Byte '發(fā)送數(shù)據(jù)緩沖區(qū)
Dim cAFrameAck(4) As Byte '回應(yīng)幀數(shù)據(jù)緩沖區(qū)
Dim nBgnAdr_l As Integer '發(fā)送數(shù)據(jù)低地址
Dim nBgnAdr_h As Integer '發(fā)送數(shù)據(jù)高地址
Dim nLen As Integer '發(fā)送數(shù)據(jù)長(zhǎng)度
Dim i As Integer
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -