Imports System.IO Imports System.Net Imports System.Net.NetworkInformation Imports System.Net.Sockets Imports System.Security.Cryptography Imports System.Text Imports System.Threading Imports Newtonsoft.Json Module FunctionModule #Region "发送模式" ''' ''' 是否是网络发送 ''' Public _isNetWork As Boolean ''' ''' 是否是串口发送 ''' Public _isSerialPort As Boolean #End Region #Region "权限管理" ''' ''' 查询到的酒店编码 ''' Public _projectNumber As String ''' ''' 查询到的酒店名称 ''' Public _HotelName As String ''' ''' 查询到权限 ''' Public _authorityInfo As New Dictionary(Of String, String) #End Region #Region "数据库操作" ''' ''' 登录返回数据 ''' json序列号 ''' Public _loginData As New Dictionary(Of String, LoginReturnDataBLL) ''' ''' 后台接口返回酒店列表数据 ''' Public _hotelListData As New Dictionary(Of String, BackstageHotelListBLL) ''' ''' 后台接口返回房型列表数据 ''' Public _roomTypeListData As New Dictionary(Of String, BackstageRoomTypeListBLL) ''' ''' 后台接口返回主机列表数据 ''' Public _hostListData As New Dictionary(Of String, BackstageHostListBLL) ''' ''' 语言数据 ''' Public LanguageData As MultiLanguageDAL ''' ''' SqlServer ''' Public _SqlServer As New SqlServerDAL ''' ''' 登录数据库 ''' Public _SqlLogin As New BlvMySql("blv-cloud-db.mysql.rds.aliyuncs.com", 3307, "blv_rcu_config", "blv_rcu", "fnadiaJDIJ7546") Public Function ConnLoginDataSourse() As Boolean If _SqlLogin.ConnMySQLBase() = False Then MsgBox($"") Return False End If Console.WriteLine($"登录_权限数据库连接成功!") Return True End Function ''' ''' 用户名 ''' Public _userNames As String ''' ''' 用户表格 ''' Public _userData As New DataTable '''' '''' 后台数据 '''' 'Public _backstageData As New SqlServerDAL '''' '''' 连接后台数据源 '''' 'Public Sub ConnBackstageData() ' _backstageData.ConnDataBase($"boonlive-rcu.com", "", False, "blw", "blw@123") ' If _backstageData._isConn = True Then ' Console.WriteLine($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Background)}{LanguageData.StringList(MultiLanguageDAL.StringEnum.DatabaseConnectionSuccessful)}!") ' Else ' Console.WriteLine($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.Background)}{LanguageData.StringList(MultiLanguageDAL.StringEnum.DatabaseConnectionFailed)}!") ' End If 'End Sub '''' '''' 获取匹配的用户信息 '''' '''' 用户账号 '''' 用户密码 '''' 'Public Function UtsGetUserInfo(userAccount As String, userPassword As String) As DataTable ' Dim dtUser As DataTable ' Dim dbParam As DbExecutorInitParam = GetDbInitParam() ' Using db As New DbExecutor(dbParam.Type, dbParam.ConnectionString) ' db.Open() ' Dim tableName As String = DbTableModel.Manage.UserListTable.TableName ' Dim condition As String = $"`{DbTableModel.Manage.UserListTable.ColNamesEnum.UserName}` = @user and `{DbTableModel.Manage.UserListTable.ColNamesEnum.Password}` = @pwd" ' db.AddDbParameter(DbType.AnsiString, "user", userAccount) ' db.AddDbParameter(DbType.AnsiString, "pwd", MD5.GetStringMd5(MD5.GetStringMd5(userPassword))) ' If dbParam.Type = DbExecutor.DbTypeEnum.Sqlite Then ' dtUser = db.ExecuteDataTable(db.CmdHelper.SearchAll(tableName, condition)) ' Else ' dtUser = db.ExecuteDataTable(db.CmdHelper.DbSearchAll(UtsDb.RemotePublicDb, tableName, condition)) ' End If ' db.Close() ' End Using ' Return dtUser 'End Function #End Region #Region "功能模块" ''' ''' 本地IP ''' Public _localIP As String ''' ''' 本地端口号 ''' Public _localPort As Integer ''' ''' 远程IP地址 ''' Public _RemoteIP As IPAddress = IPAddress.Parse($"192.168.0.23") ''' ''' 远程端口号 ''' Public _RemotePort As Integer = 3341 ''' ''' 连接状态,默认非连接 ''' Public _connectStatus As Boolean = False ''' ''' 是否通过UDP发送数据 ''' Public _isSendByUdp As Boolean ''' ''' 回复超时 ''' Public ReadOnly _relayTimeout As Integer = 50 ''' ''' 是否重试绑定MAC ''' Public _isMACRetry As Boolean ''' ''' 是否解绑MAC ''' Public _isMACUnbundle As Boolean ''' ''' 获取本地可用IP ''' ''' Public Function GetLocalIp() As List(Of IPAddress) Dim address() As IPAddress Dim destAddress As New List(Of IPAddress) address = Dns.GetHostEntry(Dns.GetHostName()).AddressList For Each pAddress As IPAddress In address If pAddress.AddressFamily = AddressFamily.InterNetwork Then destAddress.Add(pAddress) End If Next Return destAddress End Function ''' ''' Byte数组转字符串 ''' ''' ''' Public Function ByteToString(databuff() As Byte) Dim strData As String = String.Empty For i = 0 To databuff.Length - 1 strData &= $" {Hex(databuff(i)).PadLeft(2, "0"c)}" Next Return strData End Function ''' ''' 判断文本不能为空 ''' 文本框 ''' ''' ''' Public Function TextIsNull(txt As TextBox, Tip As String) As Boolean If txt.Text = Nothing Or txt.Text = "" Then MsgBox($"{Tip}{LanguageData.StringList(MultiLanguageDAL.StringEnum.NOTNULL)}!") Return False End If Return True End Function ''' ''' 判断文本不能为空 ''' 下拉框 ''' ''' ''' Public Function TextIsNull(txt As ComboBox, Tip As String) As Boolean If txt.Text = Nothing Or txt.Text = "" Then MsgBox($"{Tip} {LanguageData.StringList(MultiLanguageDAL.StringEnum.NOTNULL)}!") Return False End If Return True End Function ''' ''' 等待回复 ''' ''' 是否回复标志位 ''' 超时时间 Public Sub WaitReply(isReply As Boolean, TimeOut As Integer) 'ByRef Dim tick As Integer Dim startTick As Integer = My.Computer.Clock.TickCount isReply = False While isReply = False AndAlso tick <= TimeOut Thread.Sleep(3) tick = My.Computer.Clock.TickCount - startTick Application.DoEvents() End While End Sub ''' ''' 延时N秒 ''' ''' 延时时间值 Public Sub PauseWait(ByVal HowLong As Long) Dim tick As Long tick = My.Computer.Clock.TickCount Do My.Application.DoEvents() Loop Until tick + HowLong < My.Computer.Clock.TickCount End Sub ''' ''' IP地址转换为Byte数组 ''' ''' ''' Public Function GetAddressToBytes(addr As String) Dim iadd() As String = addr.Split(New Char() {"."c}, StringSplitOptions.RemoveEmptyEntries) Dim address(3) As Byte address(0) = iadd(0) '例:192 address(1) = iadd(1) '例:168 address(2) = iadd(2) address(3) = iadd(3) Return address End Function ''' ''' 端口号转换为Byte数组 ''' ''' ''' Public Function GetPortToBytes(port As String) Dim bport As Integer = CInt(port) Dim ports() As Byte = IntToByteLB(bport) Return ports End Function ''' ''' Int转2个字节Byte ''' 低字节在前,高字节在后 ''' ''' ''' Public Function IntToByteLB(ByVal i As Integer) As Byte() Dim btemp() As Byte = {0, 0} Dim b() As Byte = BitConverter.GetBytes(i) btemp(0) = b(1) btemp(1) = b(0) Return btemp End Function ''' ''' Int转2个字节Byte ''' 高字节在前,低字节在后 ''' ''' ''' Public Function IntToByteHB(ByVal i As Integer) As Byte() Dim btemp() As Byte = {0, 0} Dim b() As Byte = BitConverter.GetBytes(i) btemp(0) = b(0) btemp(1) = b(1) Return btemp End Function ''' ''' 获取文件的MD5值 ''' 返回Byte数组值 ''' ''' 文件路径 ''' Public Function GetMd5(filepath As String) As Byte() Dim FileStr As FileStream = New FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read) Dim data(FileStr.Length - 1) As Byte FileStr.Read(data, 0, data.Length) Dim md5s As Byte() = MD5.Create().ComputeHash(data) 'Dim fileMd5 As New StringBuilder() 'Dim i As Integer 'For i = 0 To md5s.Length - 1 ' fileMd5.Append(md5s(i).ToString("x2")) 'Next 'Console.WriteLine($"MD5:{fileMd5}") Return md5s End Function ''' ''' 获取文件的MD5值 ''' 返回String字符串 ''' ''' 文件路径 ''' Public Function GetMd5String(filepath As String) As String Dim FileStr As FileStream = New FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read) Dim data(FileStr.Length) As Byte FileStr.Read(data, 0, data.Length) Dim md5s As Byte() = MD5.Create().ComputeHash(data) Dim fileMd5 As New StringBuilder() Dim i As Integer For i = 0 To md5s.Length - 1 fileMd5.Append(md5s(i).ToString("x2")) Next Console.WriteLine($"MD5:{fileMd5}") Return fileMd5.ToString() End Function '''' '''' 获取文件的MD5值 '''' '''' 文件路径 '''' 'Public Function GetFileMd5String(filepath As String) As String ' 'Dim data As Byte() = MD5.Create().ComputeHash(filepath) ' Dim md5Hasher As New MD5CryptoServiceProvider() ' Dim data As Byte() = md5Hasher.ComputeHash(IO.File.ReadAllBytes(filepath)) ' Dim fileMd5 As New StringBuilder() ' Dim i As Integer ' For i = 0 To data.Length - 1 ' fileMd5.Append(data(i).ToString("x2")) ' Next ' Return fileMd5.ToString() 'End Function '''' '''' 获取文件的MD5值 '''' '''' 文件路径 '''' 'Public Function GetFileMd5Byte(filepath As String) As Byte() ' Dim md5Hasher As New MD5CryptoServiceProvider() ' Dim data As Byte() = md5Hasher.ComputeHash(IO.File.ReadAllBytes(filepath)) ' 'Dim fileMd5 As New StringBuilder() ' 'Dim i As Integer ' 'For i = 0 To data.Length - 1 ' ' fileMd5.Append(data(i).ToString("X2")) ' 'Next ' 'Return fileMd5.ToString() ' Return data 'End Function ''' ''' 获取数据的MD5值 ''' 返回MD5校验的Byte数组 ''' ''' 文件数据 ''' Public Function GetDataMd5Byte(data As Byte()) As Byte() Dim databuff As Byte() = MD5.Create().ComputeHash(data) Return databuff End Function ''' ''' 获取数据的MD5值 ''' 返回MD5校验的Byte数组 ''' ''' 文件数据 ''' Public Function GetDataMd5String(data As Byte()) As String Dim databuff As Byte() = MD5.Create().ComputeHash(data) Dim strData As String = BitConverter.ToString(databuff) Return strData End Function ''' ''' 获取字符串的MD5值 ''' ''' 需要求MD5的原文字符串 ''' Public Function GetStringMd5(str As String) As String Dim md5Hasher As New MD5CryptoServiceProvider() Dim data As Byte() = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(str)) Dim fileMd5 As New StringBuilder() Dim i As Integer For i = 0 To data.Length - 1 fileMd5.Append(data(i).ToString("X2")) Next Return fileMd5.ToString() End Function ''' ''' 分块函数 ''' 计算Byte数组的块数 ''' ''' ''' ''' Public Function GetBlocks(databuff As Byte(), size As Integer) As Integer Dim blockCount As Integer = databuff.Length \ size If databuff.Length Mod size > 0 Then blockCount += 1 End If Return blockCount End Function ''' ''' 字符串转换Byte数组 ''' 字符串为连续且不包含任意字符的字符串 ''' ''' ''' Public Function GetStringToDataByte(str As String) As Byte() Dim dataList As New List(Of Byte) For index As Integer = 0 To str.Length - 1 Step 2 dataList.Add($"&H{str.Substring(index, 2)}") Next Return dataList.ToArray End Function ''参数:strTime:要转换的时间;intTimeZone:该时间对应的时区 ''返回值:strTime相对于1970年1月1日午夜0点经过的秒数 ''示例:ToUnixTime("2008-5-23 10:51:0", +8),返回值为1211511060 'Public Function ToUnixTime(strTime, intTimeZone) ' If strTime Is Nothing Or Not IsDate(strTime) Then strTime = Now ' If intTimeZone Is Nothing Or Not IsNumeric(intTimeZone) Then intTimeZone = 0 ' ToUnixTime = DateAdd("h", -intTimeZone, strTime) ' ToUnixTime = DateDiff("s", "1970-1-1 0:0:0", ToUnixTime) 'End Function ''' ''' 把UNIX时间戳转换为标准时间 ''' ''' 要转换的UNIX时间戳 ''' 时区 ''' intTime所代表的标准时间 Public Function FromUnixTime(intTime As Long, ime As Long) As Date 'If intTime Is Nothing Or Not IsNumeric(intTime) Then ' FromUnixTime = Now() ' Exit Function 'End If 'If intTime Is Nothing Or Not IsNumeric(intTimeZone) Then intTimeZone = 0 'FromUnixTime = DateAdd("s", intTime, "1970-1-1 0:0:0") 'FromUnixTime = DateAdd("h", intTimeZone, FromUnixTime) Dim a As Date = DateTime.Parse("1970-1-1 0:0:0") a = a.AddSeconds(intTime) a = a.AddHours(ime) Return a End Function ''' ''' 判断网络信息是否合法 ''' ''' ''' ''' Public Function GetNetworkInfoIsLegal(text As String, Tip As String) As Boolean If GetTxStringIsLegal(text) = False Then MsgBox($"{Tip} 输入不合法!") Return False End If Return True End Function ''' ''' 判断文本输入控件输入是否合法 ''' ''' ''' Public Function GetTxStringIsLegal(text As String) As Boolean If IsNumeric(text) = True AndAlso text <> "" Then Return True End If Return False End Function '''' '''' 两个字节Byte转Int '''' '''' '''' 'Private Function GetByteToInt(datas() As Byte) ' 'Dim ints As Integer = CInt(datas(0)) + CInt(datas(1) * 256) ' Dim ints As Integer = BitConverter.ToUInt16(datas, 0) ' Return ints 'End Function #End Region #Region "后台接口" ''' ''' Post请求 ''' ''' ''' ''' Public Function PostData(ByVal url As String, ByVal data As String) As String ServicePointManager.Expect100Continue = False Dim request As HttpWebRequest = WebRequest.Create(url) '//Post请求方式 request.Method = "POST" '内容类型 request.ContentType = "application/x-www-form-urlencoded" '将URL编码后的字符串转化为字节 Dim encoding As New UTF8Encoding() Dim bys As Byte() = encoding.GetBytes(data) '设置请求的 ContentLength request.ContentLength = bys.Length '获得请 求流 'MsgBox("0.0.1") Dim newStream As Stream = request.GetRequestStream() ' MsgBox("0.0.2") newStream.Write(bys, 0, bys.Length) newStream.Close() '获得响应流 Dim sr As StreamReader = New StreamReader(request.GetResponse().GetResponseStream) ' MsgBox("0.0.3") Return sr.ReadToEnd End Function ''' ''' 处理酒店列表接口信息 ''' ''' Public Function DealHotelListInterfaceInfo() As Boolean Dim key As String = "blw_ws@2015" ''https://www.boonlive-rcu.com/api/GetHotelList?jsonData={"key":"blw_ws@2015"} Dim jsonString As String = PostData("https://www.boonlive-rcu.com/api/GetHotelList", $"jsonData={{""key"":""{key}""}}") Console.WriteLine($"后台接口_获取酒店列表:" & jsonString) 'MsgBox("0.1") Dim hotelList As BackstageHotelListResultBLL = JsonConvert.DeserializeObject(Of BackstageHotelListResultBLL)(jsonString) 'MsgBox("0.2") If hotelList.IsSuccess = False Then MsgBox($"解析酒店列表接口错误!") Return False End If 'MsgBox("0.3") _hotelListData.Clear() For i = 0 To hotelList.Result.Count - 1 Dim datalist As New BackstageHotelListBLL datalist.ID = hotelList.Result(i).ID datalist.Code = hotelList.Result(i).Code datalist.Name = hotelList.Result(i).Name datalist.EName = hotelList.Result(i).EName datalist.TWName = hotelList.Result(i).TWName datalist.Contact = hotelList.Result(i).Contact datalist.Phone = hotelList.Result(i).Phone datalist.Address = hotelList.Result(i).Address datalist.ValidateDate = hotelList.Result(i).ValidateDate datalist.CreatDate = hotelList.Result(i).CreatDate datalist.Remark = hotelList.Result(i).Remark datalist.Status = hotelList.Result(i).Status datalist.IsApprove = hotelList.Result(i).IsApprove datalist.SysHotelGroupID = hotelList.Result(i).SysHotelGroupID datalist.SysHotelGroupName = hotelList.Result(i).SysHotelGroupName _hotelListData.Add(datalist.Code, datalist) Next ' MsgBox("0.4") Return True End Function ''' ''' 处理主机列表接口信息 ''' ''' Public Function DealRoomTypeListInterfaceInfo(code As String, creatDate As String) As Boolean Console.WriteLine($"code:{code}————creatDate:{creatDate}") Dim jsonString As String = PostData("https://www.boonlive-rcu.com/api/GetRoomTypeAndModalsList", $"jsonData={{""code"":""{code}"", ""creatDate"":""{creatDate}""}}") Console.WriteLine($"后台接口_获取房型列表:" & jsonString) Dim roomTypeList As BackstageRoomTypeListResultBLL = JsonConvert.DeserializeObject(Of BackstageRoomTypeListResultBLL)(jsonString) If roomTypeList.IsSuccess = False Then MsgBox($"解析房型列表接口错误!") Return False End If _roomTypeListData.Clear() For i = 0 To roomTypeList.Result.Count - 1 Dim datalist As New BackstageRoomTypeListBLL datalist.ID = roomTypeList.Result(i).ID datalist.Code = roomTypeList.Result(i).Code datalist.Name = roomTypeList.Result(i).Name datalist.Modals = roomTypeList.Result(i).Modals _roomTypeListData.Add(i, datalist) Next Return True End Function ''' ''' 处理主机列表接口信息 ''' ''' Public Function DealHostListInterfaceInfo(code As String, creatDate As String) As Boolean 'Dim codes As String = _hotelListData.Keys(1) 'Dim creatDates As String = _hotelListData.Values(1).CreatDate Console.WriteLine($"code:{code}————creatDate:{creatDate}") Dim jsonString As String = PostData("https://www.boonlive-rcu.com/api/GetHostList", $"jsonData={{""code"":""{code}"", ""creatDate"":""{creatDate}""}}") Console.WriteLine($"后台接口_获取主机列表:" & jsonString) Dim hostList As BackstageHostListResultBLL = JsonConvert.DeserializeObject(Of BackstageHostListResultBLL)(jsonString) If hostList.IsSuccess = False Then MsgBox($"解析主机列表接口错误!") Return False End If _hostListData.Clear() For i = 0 To hostList.Result.Count - 1 Dim datalist As New BackstageHostListBLL datalist.ID = hostList.Result(i).ID datalist.HotelID = hostList.Result(i).HotelID datalist.HotelName = hostList.Result(i).HotelName datalist.HostNumber = hostList.Result(i).HostNumber datalist.RoomNumber = hostList.Result(i).RoomNumber datalist.Status = hostList.Result(i).Status datalist.RegisterDate = hostList.Result(i).RegisterDate datalist.RoomStatusID = hostList.Result(i).RoomStatusID datalist.RoomStatusName = hostList.Result(i).RoomStatusName datalist.RoomTypeID = hostList.Result(i).RoomTypeID datalist.RoomTypeName = hostList.Result(i).RoomTypeName datalist.MAC = hostList.Result(i).MAC datalist.MACBindDate = hostList.Result(i).MACBindDate datalist.IP = hostList.Result(i).IP datalist.Remark = hostList.Result(i).Remark _hostListData.Add(i, datalist) Next Return True End Function ''' ''' 设置MAC地址返回结果 ''' Public _setResult As String ''' ''' 处理设置主机MAC接口信息 ''' ''' Public Function DealSetHostMACInterfaceInfo(code As String, creatDate As String, roomNumber As String, mac As String) As Boolean 'code As String, creatDate As String, roomNumber As String, mac As String 'Dim code As String = _hotelListData.Keys(2) 'Dim creatDate As String = _hotelListData.Values(2).CreatDate 'Dim roomNumber As String = _hostListData.Values(1).RoomNumber 'Dim mac As String = _hostListData.Values(1).MAC Console.WriteLine($"code:{code}——creatDate:{creatDate}——roomNumber:{roomNumber}——mac:{mac}") Dim jsonString As String = PostData("https://www.boonlive-rcu.com/api/SetHostMAC", $"jsonData={{""code"":""{code}"", ""creatDate"":""{creatDate}"", ""roomNumber"":""{roomNumber}"", ""mac"":""{mac}""}}") Console.WriteLine($"后台接口_设置主机MAC:" & jsonString) Dim setHostMAC As BackstageSetHostMACBLL = JsonConvert.DeserializeObject(Of BackstageSetHostMACBLL)(jsonString) 'If setHostMAC.IsSuccess = False Then ' 'MsgBox($"解析主机MAC接口错误!") ' Return False 'End If _setResult = setHostMAC.Result Return setHostMAC.IsSuccess End Function #End Region #Region "获取端口随机数" ''' ''' 获取操作系统已用的端口号 ''' Public Function PortIsUsed() '获取本地计算机的网络连接和通信统计数据的信息 Dim ipGlobal As IPGlobalProperties = IPGlobalProperties.GetIPGlobalProperties() '返回本地计算机上的所有Tcp监听程序 Dim ipsTcp As IPEndPoint() = ipGlobal.GetActiveTcpListeners() '返回本地计算机上的所有UDP监听程序 Dim ipsUdp As IPEndPoint() = ipGlobal.GetActiveUdpListeners() '返回本地计算机上的Internet协议版本4(IPV4 传输控制协议(TCP)连接的信息 Dim tcpConn As TcpConnectionInformation() = ipGlobal.GetActiveTcpConnections() Dim allports As IList = New ArrayList() For Each ep As IPEndPoint In ipsTcp allports.Add(ep.Port) Next For Each ep As IPEndPoint In ipsUdp allports.Add(ep.Port) Next For Each conn As TcpConnectionInformation In tcpConn allports.Add(conn.LocalEndPoint.Port) Next Return allports End Function ''' ''' 获取随机端口号 ''' ''' Public Function GetRandomPort() Dim port As Integer = 0 Dim hasUserdPort As IList = PortIsUsed() Dim isRandomOk As Boolean = True Dim random As Random = New Random(Date.Now.Millisecond) While isRandomOk port = random.Next(1024, 65535) isRandomOk = hasUserdPort.Contains(port) End While Return port End Function #End Region #Region "机型测试" ''' 发送测试数据序号 Public _dataNumber As Byte = 0 ''' ''' 填充C5串口测试 ''' ''' ''' Public Function FillModelsSerialPortTest(cmd As Byte, data As Byte()) As Byte() Dim ourAddress As Byte = &H0 '己方地址 Dim sendNumber As Byte = GetSendNumber() '发送序号 Dim devType As Byte = &HF2 '设备类型 Dim putAddress As Byte = &H0 '收方地址 Dim len(1) As Byte '数据长度,占2个字节 Dim dataSum As Byte '校验和 Dim length As Integer = 8 + data.Length len = IntToByteHB(length) Dim databuff As New List(Of Byte) databuff.Add(ourAddress) databuff.Add(sendNumber) databuff.Add(devType) databuff.Add(putAddress) databuff.AddRange(len) databuff.Add(cmd) databuff.AddRange(data) dataSum = GetSumCheckMod(databuff.ToArray) databuff.Insert(6, dataSum) Return databuff.ToArray End Function ''' ''' 获取发送序号 ''' ''' Public Function GetSendNumber() _dataNumber += 1 If _dataNumber > 15 Then _dataNumber = 1 End If Return _dataNumber End Function ''' ''' 和校验取余数 ''' 求Byte数组的和校验取余数 ''' ''' Byte数组 ''' Public Function GetSumCheckMod(dataPacket As Byte()) As Byte Dim sum As Integer For idx = 0 To dataPacket.Length - 1 sum += dataPacket(idx) sum = sum And &HFF Next Dim sumMod As Byte = &HFF - sum Return sumMod End Function ''' ''' 填充测试数据参数 ''' ''' 测试状态 ''' 设备类型 ''' 设备地址-默认为0 ''' 测试设备Cmd ''' 参数 ''' Public Function FillTestDatabuff(testState As Byte, devType As Byte, devAddr As Byte, devCmd As Byte, param As Byte()) As Byte() Dim data As New List(Of Byte) data.Add(testState) data.Add(devType) data.Add(devAddr) data.Add(devCmd) data.AddRange(param) Return data.ToArray End Function ''' ''' 填充测试数据参数 ''' ''' 测试状态 ''' 设备类型 ''' 设备地址-默认为0 ''' 测试设备Cmd ''' Public Function FillTestDatabuff(testState As Byte, devType As Byte, devAddr As Byte, devCmd As Byte) As Byte() Dim data As New List(Of Byte) data.Add(testState) data.Add(devType) data.Add(devAddr) data.Add(devCmd) Return data.ToArray End Function #End Region End Module