⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.frm

📁 iCAN主站库[windows平台DLL],用于开发iCAN系统windows平台程序[上位机程序]
💻 FRM
📖 第 1 页 / 共 2 页
字号:
    AddItemToCombo Combo_ConSlave, Slave_GetID(hslave)
    AddItemToList (hslave)
End Sub

Private Sub AddItemToCombo(ByRef box As ComboBox, slaveid As Long)
    sz = box.ListCount
    For i = 0 To sz - 1
        If box.ItemData(i) > slaveid Then
            box.AddItem str(slaveid), i
            box.ItemData(i) = slaveid
            Exit For
        ElseIf box.ItemData(i) = slaveid Then
            Exit For
        End If
    Next
    If i = sz Then
        box.AddItem str(slaveid), i
        box.ItemData(i) = slaveid
    End If
End Sub

Private Sub DelItemFromCombo(ByRef box As ComboBox, slaveid As Long)
    Dim str1 As String
    str1 = str(slaveid)
    icount = box.ListCount
    For i = 0 To icount - 1
        If box.List(i) = str1 Then
            box.RemoveItem i
        End If
    Next
    If box.ListIndex = -1 And box.ListCount > 0 Then
        box.ListIndex = 0
    End If
    
End Sub

Private Sub AddItemToList(hslave As Long)
    Dim str1 As String
    Dim itemx As ListItem
    
    str1 = str(Slave_GetID(hslave))
    Set itemx = ListView_Data.ListItems.Add(, , str1)
    itemx.Tag = hslave
    itemx.SubItems(1) = "设备信息"
    itemx.SubItems(2) = "00:00:00"
    Dim iolen(3) As Long
    Slave_GetIODataLen hslave, iolen(0), iolen(1), iolen(2), iolen(3)
    str1 = "DI=" & str(iolen(0)) & " DO=" & str(iolen(1)) & " AI=" & str(iolen(2)) & " AO=" & str(iolen(3))
    itemx.SubItems(3) = str1


    str1 = str(Slave_GetID(hslave))
    Set itemx = ListView_Data.ListItems.Add(, , str1)
    itemx.Tag = hslave
    itemx.SubItems(1) = "DI"
    itemx.SubItems(2) = "00:00:00"

    str1 = str(Slave_GetID(hslave))
    Set itemx = ListView_Data.ListItems.Add(, , str1)
    itemx.Tag = hslave
    itemx.SubItems(1) = "AI"
    itemx.SubItems(2) = "00:00:00"

End Sub

Private Sub SetMaster(oldid As Long, newid As Long)
    For i = 0 To Combo_DisSlave.ListCount - 1
        If Combo_DisSlave.ItemData(i) = newid Then
            Combo_DisSlave.RemoveItem i
            Exit For
        End If
    Next
    If oldid = newid Then
        Exit Sub
    End If
    
    For i = 0 To Combo_DisSlave.ListCount - 2
        If Combo_DisSlave.ItemData(i + 1) = oldid Then
            Exit Sub
        ElseIf Combo_DisSlave.ItemData(i) > oldid Then
            Exit For
        ElseIf Combo_DisSlave.ItemData(i + 1) > oldid Then
            i = i + 1
            Exit For
        End If
    Next
     Combo_DisSlave.AddItem str(oldid), i
    Combo_DisSlave.ItemData(i) = oldid
    
End Sub

Private Sub GetByteArr(ByRef box As TextBox, ByRef buf() As Byte, ByRef length As Long)
    Dim str As String
    str = box.Text
    If Len(str) > length * 3 Then
        Exit Sub
    End If
    length = Len(str) / 3
    If length = 0 Then
        Exit Sub
    End If

    For i = 0 To length - 1
        strdata = Mid(str, i * 3 + 1, 2)
        buf(i) = Val("&H" + strdata)
    Next

End Sub

Private Function DataToStr(ByRef buf() As Byte, length As Long)
Dim str As String

For i = 0 To length - 1
    str = str + Hex(buf(i)) + " "
Next

DataToStr = str

End Function

Private Sub DisconnectItem(ind As Long)
    hslave = ListView_Data.ListItems(ind).Tag
    Slave_Disconnect (hslave)
    DelItemFromCombo Combo_ConSlave, Slave_GetID(hslave)
    AddItemToCombo Combo_DisSlave, Slave_GetID(hslave)
    sz = ListView_Data.ListItems.Count
    For j = sz To 1 Step -1
        hslave2 = ListView_Data.ListItems(j).Tag
        If hslave2 = hslave Then
            ListView_Data.ListItems.Remove (j)
        End If
    Next
End Sub

Private Sub Combo_Devtype_Click()
    m_cfg.iCardType = Combo_Devtype.ListIndex + 1
End Sub

Private Sub Command_ConSlave_Click()
    isel = Combo_DisSlave.ListIndex
    slaveid = Combo_DisSlave.ItemData(isel)

    Dim hslave As Long
    ret = Route_AddSlave(m_hRoute, slaveid, hslave)
    If ret = PCANOK Or ret = PCANERR_ITEMEXIST Then
        Route_GetSlavebyID m_hRoute, slaveid, hslave
        If Slave_Connect(hslave) = PCANOK Then
            Combo_DisSlave.RemoveItem isel
            AddConnectedItem (hslave)
        Else
            MsgBox ("连接从站失败")
        End If
    Else
        MsgBox ("添加从站失败")
    End If
End Sub

Private Sub Command_DisSlave_Click()
    ind = Combo_ConSlave.ListIndex
    If ind = -1 Then
        Exit Sub
    End If
    
    Dim hslave As Long
    Route_GetSlavebyID m_hRoute, Combo_ConSlave.ItemData(ind), hslave
    Slave_Disconnect (hslave)
    DelItemFromCombo Combo_ConSlave, Slave_GetID(hslave)
    AddItemToCombo Combo_DisSlave, Slave_GetID(hslave)
    sz = ListView_Data.ListItems.Count
    For j = sz To 1 Step -1
        hslave2 = ListView_Data.ListItems(j).Tag
        If hslave2 = hslave Then
            ListView_Data.ListItems.Remove j
        End If
    Next
End Sub

Private Sub Command_Send_Click()
    ind = Combo_ConSlave.ListIndex
    If ind = -1 Then
        MsgBox ("请选择从站")
        Exit Sub
    End If
    id = Combo_ConSlave.ItemData(ind)
    Dim hslave As Long
    Route_GetSlavebyID m_hRoute, id, hslave
    Dim addrarr(1) As Byte
    addrarr(0) = &H20
    addrarr(1) = &H60
    Dim buf(31) As Byte
    Dim length As Long
    length = 32
    GetByteArr Text_Data, buf, length
    If length = 0 Then
        MsgBox ("请输入发送数据")
        Exit Sub
    End If
    
    If Slave_SendData(hslave, addrarr(Combo_Datatype.ListIndex), buf(0), length) <> PCANOK Then
        MsgBox ("发送数据失败")
    End If
End Sub

Private Sub CommandStart_Click()
    Dim strcap(1) As String
    strcap(0) = "停止"
    strcap(1) = "启动"
    
    '检查是否已经启动系统
    If Mgr_IsStarted() = 1 Then
        Timer1.Enabled = False
        Mgr_StopSys
        DelAllFromList
    Else
        Dim strtmp1 As String
        Dim oldmasterid As Long
        Dim newmasterid As Long
        Dim icycle As Long
        newmasterid = Combo_MasterID.ListIndex
        icycle = Val(Text_MasterCycle.Text)
        m_cfg.wMasterID = newmasterid '设置主站ID
        m_cfg.iMasterCycle = icycle '设置主站循环周期

        Dim cfg As ROUTECFG
        Route_GetConfig m_hRoute, cfg
        oldmasterid = cfg.wMasterID
        cfg.iCardType = m_cfg.iCardType
        cfg.iCardInd = m_cfg.iCardInd
        cfg.iCANInd = m_cfg.iCANInd
        cfg.wCANBaud = m_cfg.wCANBaud
        cfg.iMasterCycle = icycle / MASTER_CYCLEUNIT
        cfg.wMasterID = newmasterid
        Route_SetConfig m_hRoute, cfg
        
        '当设备型号为CANET时,需要设置以下参数
        Dim srcport(3) As Byte, canetport(3) As Byte
        Dim canetip(3) As Byte
        If m_cfg.iCardType = 12 Then
            srcport(0) = 4001 Mod 256  '本地端口,可根据实际情况修改,现假设为4001
            srcport(1) = 4001 / 256
            canetport(0) = 4001 Mod 256 'CANET工作端口,可根据实际情况修改,现假设为4001
            canetport(1) = 4001 / 256
            canetip(3) = 192 'CANET的IP地址,可根据实际情况修改,现假设为192.168.0.178
            canetip(2) = 168
            canetip(1) = 0
            canetip(0) = 178
            Route_IOCtl m_hRoute, 1, srcport(0), 4, 0, 0
            Route_IOCtl m_hRoute, 2, canetip(0), 4, 0, 0
            Route_IOCtl m_hRoute, 3, canetport(0), 4, 0, 0
        End If
        
            
        If Mgr_StartSys() <> PCANOK Then
            MsgBox ("启动失败")
            SetBtnStatus
            Exit Sub
        End If
        SetMaster oldmasterid, newmasterid
        SetBtnStatus
        Timer1.Interval = m_cfg.iMasterCycle
        Timer1.Enabled = True
    End If
    If Mgr_IsStarted() = 1 Then
        CommandStart.Caption = strcap(0)
    Else
        CommandStart.Caption = strcap(1)
    End If
    SetBtnStatus
End Sub

Private Sub Form_Load()
    m_cfg.iCardType = 5
    m_cfg.iCardInd = 0
    m_cfg.iCANInd = 0
    m_cfg.iMasterCycle = 100
    m_cfg.wCANBaud = &H1C
    m_cfg.wMasterID = 0
    
    Combo_Devtype.ListIndex = m_cfg.iCardType - 1
    Combo_Devind.ListIndex = m_cfg.iCardInd
    Combo_CANind.ListIndex = m_cfg.iCANInd
    Selcanbaud
    
    For i = 0 To 254
        Combo_MasterID.AddItem str(i)
    Next
    Combo_MasterID.ListIndex = m_cfg.wMasterID
    
    Text_MasterCycle.Text = str(m_cfg.iMasterCycle)
    
    For i = 0 To 254
        Combo_DisSlave.AddItem str(i)
        Combo_DisSlave.ItemData(i) = i
    Next
    Combo_DisSlave.ListIndex = 0
    
    '在启动的时候预先添加一个iCAN网络
    Mgr_AddRoute m_cfg, m_hRoute
    
    SetBtnStatus
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If Mgr_IsStarted() = 1 Then
        CommandStart_Click
    End If
End Sub


Private Sub Timer1_Timer()
    Dim hslave As Long
    sz = ListView_Data.ListItems.Count
    Dim length As Long
    length = 32
    Dim buf(31) As Byte
    strtm = Format(Now, "hh:mm:ss")
    For i = 1 To sz
        hslave = ListView_Data.ListItems.Item(i).Tag
        length = 32
        If i Mod 3 = 1 Then
            '判断是否已经连接
            If Slave_IsConnected(hslave) = 0 Then
                DisconnectItem (i)
                Exit Sub
            End If
        ElseIf i Mod 3 = 0 Then
            '获取AI输入
            Slave_GetAIData hslave, buf(0), length
            '如果成功
            If length > 0 Then
                ListView_Data.ListItems.Item(i).SubItems(2) = strtm
                ListView_Data.ListItems.Item(i).SubItems(3) = DataToStr(buf, length)
            End If
        ElseIf i Mod 3 = 2 Then
            Slave_GetDIData hslave, buf(0), length
            If length > 0 Then
                ListView_Data.ListItems.Item(i).SubItems(2) = strtm
                ListView_Data.ListItems.Item(i).SubItems(3) = DataToStr(buf, length)
            End If
        End If
    Next
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -