自建的类中提示类型不匹配,各位大佬帮忙看下哪里出错了

已锁定

HZkkkkk

  • 帖子

    3
  • 精华

    0
  • 被关注

    2

论坛等级:游民

注册时间:2019-06-13

普通 普通 如何晋级?

自建的类中提示类型不匹配,各位大佬帮忙看下哪里出错了

632

2

2019-11-05 10:39:24


我在全局脚本里建了一个类,使用打包协议PackProtocol()的时候却提示我类型不匹配

Class protocol


Public DEVICE_ID    '设备号

Public PROTOCOL_NUMBER    '功能代码

Public DATA_NUM    '数据个数

Private DATA_BUFFER(10)    '传输数据,11个数据


'初始化变量

Public Sub Class_Initialize()

Dim i

DEVICE_ID = CLng(0)

PROTOCOL_NUMBER = CByte(0)

DATA_NUM = CByte(0)

For i = 0 To 10

    DATA_BUFFER(i) = CByte(0)

Next

End Sub


'读取数据

Public Property Get CRCArray(Byval i)

CRCArray = DATA_BUFFER(i)

End Property


'写入数据

Public Property Let CRCArray(Byval i, Byval vNewValue)

DATA_BUFFER(i) = vNewValue

End Property


'crc校验

Private Function Crc16(data(), data_len)

Dim crc_md

Dim i

Dim Flag

Dim mov_data

Dim hh

Dim ReturnData(1)

mov_data = 128

crc_md = 0

For i = 0 To (data_len - 1)

    For Flag = 0 To 7

        hh = (crc_md And 32768)

        If hh <> 0 Then

            crc_md = crc_md * 2

            crc_md = crc_md Mod 65536

            crc_md = crc_md Xor 4129

        Else

            crc_md = crc_md * 2

            crc_md = crc_md Mod 65536

        End If

        hh = 0

        hh = data(i) And mov_data

        If hh <> 0 Then crc_md = crc_md Xor 4129

        mov_data = mov_data  2

        If mov_data = 0 Then mov_data = 128

    Next

Next

ReturnData(0) = CByte(crc_md Mod 256)   'CRC低位

ReturnData(1) = CByte(crc_md  256)     'CRC高位

Crc16 = ReturnData

End Function


'打包协议

Public Function PackProtocol()

Dim send_protocol()

Redim send_protocol(5 + DATA_NUM)'定义协议数组(6+数据个数)

Dim crc_line()

Dim i

send_protocol(0) = CByte(DEVICE_ID Mod 256) '设备号

send_protocol(1) = CByte(DEVICE_ID  256)

send_protocol(2) = PROTOCOL_NUMBER '功能代码

send_protocol(3) = DATA_NUM '数据个数

If DATA_NUM <> 0 Then '数据内容

    For i = 0 To DATA_NUM - 1

        send_protocol(4 + i) = DATA_BUFFER(i)

    Next

End If

crc_line = Crc16(send_protocol, (4 + DATA_NUM)) '校验码

send_protocol(4 + DATA_NUM) = crc_line(0)

send_protocol(5 + DATA_NUM) = crc_line(1) 

PackProtocol = CByte(send_protocol) '整个协议数据   

End Function


Public Function DivideProtocol(re_data())

Dim MyData()

Dim i

Dim nLen

nLen = (UBound(re_data) - LBound(re_data) + 1) '计算接收到的数据个数

MyData = Crc16(re_data, (nLen - 2)) '计算校验码 

If (MyData(0) = CInt(re_data(nLen - 2)) And MyData(1) = CInt(re_data(nLen - 1))) Then '验证校验码是否正确

    DEVICE_ID = CInt(re_data(1) * 256 + re_data(0)) '提取设备号

    PROTOCOL_NUMBER = re_data(2) '提取功能代码

    DATA_NUM = re_data(3) '提取数据个数

    If nLen > 6 Then '如果有数据,就提取数据

        For i = 0 To (nLen - 6) - 1

            DATA_BUFFER(i) = re_data(4 + i)

        Next

    End If

    DivideProtocol = True '返回值

Else

    DivideProtocol = False

End If

End Function


End Class


自建的类中提示类型不匹配,各位大佬帮忙看下哪里出错了 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32564条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。