📄 form1.frm
字号:
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 + -