Browse Source

代码提交

master
pengliangyang 1 year ago
parent
commit
104afbded2
11 changed files with 107 additions and 66 deletions
  1. +1
    -1
      BPASmartClient.JXJFoodBigStation/App.config
  2. +4
    -1
      BPASmartClient.JXJFoodBigStation/Model/HK_PLC/HKDeviceStatus.cs
  3. +20
    -15
      BPASmartClient.JXJFoodBigStation/Model/ProcessControl.cs
  4. +35
    -33
      BPASmartClient.MilkTeaCube/MilkTeaCubeMachine.cs
  5. +2
    -0
      BPASmartClient.MorkT_BarCounter/Control_MorkT_BarCounter.cs
  6. +1
    -1
      BPASmartClient.MorkT_BarCounter/GVL_MorkT.cs
  7. +14
    -0
      BPASmartClient.MorkT_BarCounter/SavePar.cs
  8. +15
    -0
      BPASmartClient.MorkT_BarCounter/SaveParModel.cs
  9. +1
    -7
      BPASmartClient.MorkT_BarCounter/View/DebugView.xaml
  10. +10
    -4
      BPASmartClient.MorkT_BarCounter/ViewModel/DebugViewModel.cs
  11. +4
    -4
      BPASmartClient/App.config

+ 1
- 1
BPASmartClient.JXJFoodBigStation/App.config View File

@@ -3,7 +3,7 @@
<appSettings> <appSettings>
<add key="HKPlc_IP" value="107.107.2.17"/> <add key="HKPlc_IP" value="107.107.2.17"/>
<add key="Siemens_IP" value="107.107.2.200"/> <add key="Siemens_IP" value="107.107.2.200"/>
<add key="HKPlc_Connect" value="false"/>
<add key="HKPlc_Connect" value="true"/>
<add key="Siemens_Connect" value="false"/> <add key="Siemens_Connect" value="false"/>
</appSettings> </appSettings>
</configuration> </configuration>

+ 4
- 1
BPASmartClient.JXJFoodBigStation/Model/HK_PLC/HKDeviceStatus.cs View File

@@ -103,24 +103,27 @@ namespace BPASmartClient.JXJFoodBigStation.Model.HK_PLC
} }
else else
{ {
MessageNotify.GetInstance.ShowRunLog($"配方编号:{recipe.RecipeCode},托盘编号:{recipe.TrayCode},桶号:{barrel},位置:{loc},重量:{recipe.RawMaterial.ElementAt(index).RawMaterialWeight}");
switch (barrel) switch (barrel)
{ {
case 1: case 1:
string address = "DB99.DBD" + (6 + 4 * (loc - 1)); string address = "DB99.DBD" + (6 + 4 * (loc - 1));
HK_PLC_S7.Write(address, recipe.RawMaterial.ElementAt(index).RawMaterialWeight); HK_PLC_S7.Write(address, recipe.RawMaterial.ElementAt(index).RawMaterialWeight);
MessageNotify.GetInstance.ShowRunLog($"配方编号:{recipe.RecipeCode},托盘编号:{recipe.TrayCode},桶号:{barrel},位置:{loc},重量:{recipe.RawMaterial.ElementAt(index).RawMaterialWeight}");
break; break;
case 2: case 2:
string address1 = "DB99.DBD" + (62 + 4 * (loc - 1)); string address1 = "DB99.DBD" + (62 + 4 * (loc - 1));
HK_PLC_S7.Write(address1, recipe.RawMaterial.ElementAt(index).RawMaterialWeight); HK_PLC_S7.Write(address1, recipe.RawMaterial.ElementAt(index).RawMaterialWeight);
MessageNotify.GetInstance.ShowRunLog($"配方编号:{recipe.RecipeCode},托盘编号:{recipe.TrayCode},桶号:{barrel},位置:{loc},重量:{recipe.RawMaterial.ElementAt(index).RawMaterialWeight}");
break; break;
case 4: case 4:
string address2 = "DB99.DBD" + (118 + 4 * (loc - 1)); string address2 = "DB99.DBD" + (118 + 4 * (loc - 1));
HK_PLC_S7.Write(address2, recipe.RawMaterial.ElementAt(index).RawMaterialWeight); HK_PLC_S7.Write(address2, recipe.RawMaterial.ElementAt(index).RawMaterialWeight);
MessageNotify.GetInstance.ShowRunLog($"配方编号:{recipe.RecipeCode},托盘编号:{recipe.TrayCode},桶号:{barrel},位置:{loc},重量:{recipe.RawMaterial.ElementAt(index).RawMaterialWeight}");
break; break;
case 5: case 5:
string address3 = "DB99.DBD" + (174 + 4 * (loc - 1)); string address3 = "DB99.DBD" + (174 + 4 * (loc - 1));
HK_PLC_S7.Write(address3, recipe.RawMaterial.ElementAt(index).RawMaterialWeight); HK_PLC_S7.Write(address3, recipe.RawMaterial.ElementAt(index).RawMaterialWeight);
MessageNotify.GetInstance.ShowRunLog($"配方编号:{recipe.RecipeCode},托盘编号:{recipe.TrayCode},桶号:{barrel},位置:{loc},重量:{recipe.RawMaterial.ElementAt(index).RawMaterialWeight}");
break; break;
default: default:
break; break;


+ 20
- 15
BPASmartClient.JXJFoodBigStation/Model/ProcessControl.cs View File

@@ -91,20 +91,27 @@ namespace BPASmartClient.JXJFoodBigStation.Model
RawMaterials.Clear(); RawMaterials.Clear();
for (int i = 0; i < GVL_BigStation.Max_DosingSotckBinNum; i++) for (int i = 0; i < GVL_BigStation.Max_DosingSotckBinNum; i++)
{ {
int index = RawMaterialsNamePos.Values.ToList().IndexOf(recipe.Material[i].Material_Name);
if (index >= 0)
if (string.IsNullOrEmpty(recipe.Material[i].Material_Name))
{ {
RawMaterials.Add(new RawMaterial()
{
RawMaterialName = recipe.Material[i].Material_Name,
RawMaterialBarrelNum = recipe.Material[i].Material_BarrelNum,
RawMaterialWeight = recipe.Material[i].Material_Weight,
RawMaterialLocation = RawMaterialsNamePos.Keys.ToList()[index]
});

} }
else
else
{ {
MessageNotify.GetInstance.ShowAlarmLog($"本地缺少原料{recipe.Material[i].Material_Name},和西门子下发的原料名称无法对应,");
int index = RawMaterialsNamePos.Values.ToList().IndexOf(recipe.Material[i].Material_Name);
if (index >= 0)
{
RawMaterials.Add(new RawMaterial()
{
RawMaterialName = recipe.Material[i].Material_Name,
RawMaterialBarrelNum = recipe.Material[i].Material_BarrelNum,
RawMaterialWeight = recipe.Material[i].Material_Weight,
RawMaterialLocation = RawMaterialsNamePos.Keys.ToList()[index]
});
}
else
{
MessageNotify.GetInstance.ShowAlarmLog($"本地缺少原料{recipe.Material[i].Material_Name},和西门子下发的原料名称无法对应,");
}
} }
} }
App.Current.Dispatcher.Invoke(() => App.Current.Dispatcher.Invoke(() =>
@@ -1287,7 +1294,6 @@ namespace BPASmartClient.JXJFoodBigStation.Model
} }
if (HKDevice.PlcRead.IsAllowIssueRecipe1 && GVL_BigStation.Recipe1DosingStatus == 0 && Inplace)//配方1是否允许下发配发 if (HKDevice.PlcRead.IsAllowIssueRecipe1 && GVL_BigStation.Recipe1DosingStatus == 0 && Inplace)//配方1是否允许下发配发
{ {

if (SiemensRecipes.ElementAt(index).IsWashingBarrel) if (SiemensRecipes.ElementAt(index).IsWashingBarrel)
{ {
if (!GVL_BigStation.BarrelWasherSign) if (!GVL_BigStation.BarrelWasherSign)
@@ -1311,7 +1317,6 @@ namespace BPASmartClient.JXJFoodBigStation.Model
GVL_BigStation.Recipe1DosingStatus = 1; GVL_BigStation.Recipe1DosingStatus = 1;
MessageNotify.GetInstance.ShowRunLog($"配方1,配方编号:{code},托盘编号:{trayCode},下发完成"); MessageNotify.GetInstance.ShowRunLog($"配方1,配方编号:{code},托盘编号:{trayCode},下发完成");
} }

} }
if (HKDevice.PlcRead.ReceiveFinishRecipe1 && GVL_BigStation.Recipe1DosingStatus == 1) if (HKDevice.PlcRead.ReceiveFinishRecipe1 && GVL_BigStation.Recipe1DosingStatus == 1)
{ {
@@ -1349,7 +1354,7 @@ namespace BPASmartClient.JXJFoodBigStation.Model
FinishData.Material[i].Material_Name = SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialName; FinishData.Material[i].Material_Name = SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialName;
FinishData.Material[i].Material_BarrelNum = (short)SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialBarrelNum; FinishData.Material[i].Material_BarrelNum = (short)SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialBarrelNum;
FinishData.Material[i].Material_Laying_Off_Weight = Math.Abs(SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).Laying_Off_Weight); FinishData.Material[i].Material_Laying_Off_Weight = Math.Abs(SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).Laying_Off_Weight);
MessageNotify.GetInstance.ShowRunLog($"配方4,配方编号:{code},托盘编号:{trayCode},原料名称:{FinishData.Material[i].Material_Name},原料桶号:{FinishData.Material[i].Material_BarrelNum},配料重量:{FinishData.Material[i].Material_Laying_Off_Weight }kg");
MessageNotify.GetInstance.ShowRunLog($"配方1,配方编号:{code},托盘编号:{trayCode},原料名称:{FinishData.Material[i].Material_Name},原料桶号:{FinishData.Material[i].Material_BarrelNum},配料重量:{FinishData.Material[i].Material_Laying_Off_Weight }kg");
} }
FinishData.Ask_For_Finish = true; FinishData.Ask_For_Finish = true;
double a = DateTime.Now.Subtract(GVL_BigStation.DosingRecipe1Time).TotalSeconds; double a = DateTime.Now.Subtract(GVL_BigStation.DosingRecipe1Time).TotalSeconds;
@@ -1462,7 +1467,7 @@ namespace BPASmartClient.JXJFoodBigStation.Model
FinishData.Material[i].Material_Name = SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialName; FinishData.Material[i].Material_Name = SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialName;
FinishData.Material[i].Material_BarrelNum = (short)SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialBarrelNum; FinishData.Material[i].Material_BarrelNum = (short)SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialBarrelNum;
FinishData.Material[i].Material_Laying_Off_Weight = Math.Abs(SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).Laying_Off_Weight); FinishData.Material[i].Material_Laying_Off_Weight = Math.Abs(SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).Laying_Off_Weight);
MessageNotify.GetInstance.ShowRunLog($"配方4,配方编号:{code},托盘编号:{trayCode},原料名称:{FinishData.Material[i].Material_Name},原料桶号:{FinishData.Material[i].Material_BarrelNum},配料重量:{FinishData.Material[i].Material_Laying_Off_Weight }kg");
MessageNotify.GetInstance.ShowRunLog($"配方2,配方编号:{code},托盘编号:{trayCode},原料名称:{FinishData.Material[i].Material_Name},原料桶号:{FinishData.Material[i].Material_BarrelNum},配料重量:{FinishData.Material[i].Material_Laying_Off_Weight }kg");
} }
FinishData.Ask_For_Finish = true; FinishData.Ask_For_Finish = true;
double a = DateTime.Now.Subtract(GVL_BigStation.DosingRecipe2Time).TotalSeconds; double a = DateTime.Now.Subtract(GVL_BigStation.DosingRecipe2Time).TotalSeconds;


+ 35
- 33
BPASmartClient.MilkTeaCube/MilkTeaCubeMachine.cs View File

@@ -15,6 +15,41 @@ namespace BPASmartClient.MilkTeaCube
public override void Init() public override void Init()
{ {
modbus.ModbusTcpConnect(communicationPar.IPAddress); modbus.ModbusTcpConnect(communicationPar.IPAddress);
EventBus.EventBus.GetInstance().Subscribe<MilkTea_MakeMilkTeaEvent>(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
{
if (@event == null) return;
var par = @event as MilkTea_MakeMilkTeaEvent;
switch (par?.TagName)
{
case "Start":
modbus.Write("LB14", true);
Thread.Sleep(200);
modbus.Write("LB14", false);

break;
case "ParameterSet":
modbus.Write("LB14", false);
Thread.Sleep(500);
modbus.Write("LW1001", par.MilkTeaKind[0]);
modbus.Write("LW1003", par.MilkTeaKind[1]);
modbus.Write("LW1004", par.MilkTeaKind[2]);
modbus.Write("LW1005", par.MilkTeaKind[3]);
modbus.Write("LW1006", par.MilkTeaKind[4]);
modbus.Write("LW1007", par.MilkTeaKind[5]);
modbus.Write("LW1008", par.MilkTeaKind[6]);
modbus.Write("LW1009", par.MilkTeaKind[7]);
modbus.Write("LW1010", par.MilkTeaKind[8]);
modbus.Write("LW1011", par.MilkTeaKind[9]);
modbus.Write("LW1012", par.MilkTeaKind[10]);
modbus.Write("LW1013", par.MilkTeaKind[11]);
break;
case "StartSignReset":
modbus.Write("LB14", false);
break;
default:
break;
}
});
ThreadManage.GetInstance().StartLong(new Action(() => ThreadManage.GetInstance().StartLong(new Action(() =>
{ {
IsConnected = modbus.Connected; IsConnected = modbus.Connected;
@@ -36,39 +71,6 @@ namespace BPASmartClient.MilkTeaCube
} }
Thread.Sleep(1000); Thread.Sleep(1000);
}), $"Ä̲èζħ·½É豸Á¬½Ó", true); }), $"Ä̲èζħ·½É豸Á¬½Ó", true);
EventBus.EventBus.GetInstance().Subscribe<MilkTea_MakeMilkTeaEvent>(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
{
if (@event == null) return;
var par = @event as MilkTea_MakeMilkTeaEvent;
switch (par?.TagName)
{
case "Start":
modbus.Write("LB14",true);
break;
case "ParameterSet":
modbus.Write("LB14", false);
Thread.Sleep(500);
modbus.Write("LW1002", par.MilkTeaKind[0]);
modbus.Write("LW1006", par.MilkTeaKind[1]);
modbus.Write("LW1008", par.MilkTeaKind[2]);
modbus.Write("LW1010", par.MilkTeaKind[3]);
modbus.Write("LW1012", par.MilkTeaKind[4]);
modbus.Write("LW1014", par.MilkTeaKind[5]);
modbus.Write("LW1016", par.MilkTeaKind[6]);
modbus.Write("LW1018", par.MilkTeaKind[7]);
modbus.Write("LW1020", par.MilkTeaKind[8]);
modbus.Write("LW1022", par.MilkTeaKind[9]);
modbus.Write("LW1024", par.MilkTeaKind[10]);
modbus.Write("LW1026", par.MilkTeaKind[11]);
break;
case "StartSignReset":
modbus.Write("LB14", false);
break;
default:
break;
}
});
} }
public override void Start() public override void Start()
{ {


+ 2
- 0
BPASmartClient.MorkT_BarCounter/Control_MorkT_BarCounter.cs View File

@@ -60,6 +60,8 @@ namespace BPASmartClient.MorkT_BarCounter
{ {
IsHealth = true; IsHealth = true;
} }
Json<SaveParModel>.Read();
GVL_MorkT.MilkTeaCHValue = Json<SaveParModel>.Data.parData;
IsHealth = true; IsHealth = true;
serverInit(); serverInit();
DataParse(); DataParse();


+ 1
- 1
BPASmartClient.MorkT_BarCounter/GVL_MorkT.cs View File

@@ -108,7 +108,7 @@ namespace BPASmartClient.MorkT_BarCounter
/// <summary> /// <summary>
/// 出果汁完成,是否去取果汁 /// 出果汁完成,是否去取果汁
/// </summary> /// </summary>
public static ushort[] MilkTeaCHValue = new ushort[12] {200,200,200,200,200,200,200,200,200,200,200,200 };
public static ushort[] MilkTeaCHValue { get; set; } = new ushort[12] {200,200,200,200,200,200,200,200,200,200,200,200 };
/// <summary> /// <summary>
/// 做茶订单队列 /// 做茶订单队列
/// </summary> /// </summary>


+ 14
- 0
BPASmartClient.MorkT_BarCounter/SavePar.cs View File

@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BPASmartClient.MorkT_BarCounter
{
public class SavePar
{
public string Name { get; set; }
public string Value { get; set; }
}
}

+ 15
- 0
BPASmartClient.MorkT_BarCounter/SaveParModel.cs View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BPASmartClient.MorkT_BarCounter
{
public class SaveParModel
{
public ObservableCollection<SavePar> parSets { get; set; } = new ObservableCollection<SavePar>();
public ushort[] parData { get; set; }
}
}

+ 1
- 7
BPASmartClient.MorkT_BarCounter/View/DebugView.xaml View File

@@ -102,16 +102,10 @@
</WrapPanel> </WrapPanel>
<WrapPanel Grid.Row="6" Grid.ColumnSpan="2" > <WrapPanel Grid.Row="6" Grid.ColumnSpan="2" >
<TextBlock Height="22" Width="100" FontSize="14">味魔方执行程序:</TextBlock> <TextBlock Height="22" Width="100" FontSize="14">味魔方执行程序:</TextBlock>
<TextBox Margin="2" Width="80" Text="{Binding MilkTeaCub}"></TextBox>
<Button Margin="2" Content="启动" Width="50" Command="{Binding MikeTeaCupControlCommand}"></Button> <Button Margin="2" Content="启动" Width="50" Command="{Binding MikeTeaCupControlCommand}"></Button>
<Button Margin="2" Content="设置参数" Width="60" Command="{Binding MikeTeaCupSetParCommand}"></Button>
<Button Margin="2" Content="保存参数" Width="60" Command="{Binding MikeTeaCupSetParCommand}"></Button>
</WrapPanel> </WrapPanel>
</Grid> </Grid>


<WrapPanel Grid.Row="1">
<TextBlock Grid.Column="0" Height="22" Width="100" FontSize="14">电爪执行程序:</TextBlock>
<TextBox Margin="10" Width="80" Text="{Binding GripperProgam}"></TextBox>
<Button Margin="10" Content="启动" Width="50" Command="{Binding GripperControlCommand}"></Button>
</WrapPanel>
</Grid> </Grid>
</UserControl> </UserControl>

+ 10
- 4
BPASmartClient.MorkT_BarCounter/ViewModel/DebugViewModel.cs View File

@@ -25,6 +25,10 @@ public class DebugViewModel : ObservableObject
{ {
public DebugViewModel() public DebugViewModel()
{ {
if (Json<SaveParModel>.Data.parData != null)
{
CH_Value = Json<SaveParModel>.Data.parData;
}
RobotControlCommand = new RelayCommand(() => RobotControlCommand = new RelayCommand(() =>
{ {
new WriteJaka() { DeviceId = 126, TagName = "JaKaProgramName", Value = JakaRobotProgram }.Publish(); new WriteJaka() { DeviceId = 126, TagName = "JaKaProgramName", Value = JakaRobotProgram }.Publish();
@@ -36,7 +40,6 @@ public class DebugViewModel : ObservableObject
}); });
MikeTeaCupControlCommand = new RelayCommand(() => MikeTeaCupControlCommand = new RelayCommand(() =>
{ {
new MilkTea_MakeMilkTeaEvent() { DeviceId = 126, TagName = "ParameterSet", MilkTeaKind = GVL_MorkT.MilkTeaCHValue }.Publish(); //写入奶茶参数
new MilkTea_MakeMilkTeaEvent() { DeviceId = 126, TagName = "Start" }.Publish(); new MilkTea_MakeMilkTeaEvent() { DeviceId = 126, TagName = "Start" }.Publish();
}); });
GripperControlCommand = new RelayCommand(() => GripperControlCommand = new RelayCommand(() =>
@@ -64,8 +67,11 @@ public class DebugViewModel : ObservableObject
{ {
for (int i = 0; i < 12; i++) for (int i = 0; i < 12; i++)
{ {
GVL_MorkT.MilkTeaCHValue[i] = (ushort)CH_Value[i];
GVL_MorkT.MilkTeaCHValue[i] = CH_Value[i];
} }
Json<SaveParModel>.Data.parData = GVL_MorkT.MilkTeaCHValue;
Json<SaveParModel>.Save();
new MilkTea_MakeMilkTeaEvent() { DeviceId = 126, TagName = "ParameterSet", MilkTeaKind = GVL_MorkT.MilkTeaCHValue }.Publish(); //写入奶茶参数
}); });
} }
public int JakaRobotProgram { get { return _JakaRobotProgram; } set { _JakaRobotProgram = value; OnPropertyChanged(); } } public int JakaRobotProgram { get { return _JakaRobotProgram; } set { _JakaRobotProgram = value; OnPropertyChanged(); } }
@@ -82,8 +88,8 @@ public class DebugViewModel : ObservableObject
public int GripperProgam { get { return _GripperProgam; } set { _GripperProgam = value; OnPropertyChanged(); } } public int GripperProgam { get { return _GripperProgam; } set { _GripperProgam = value; OnPropertyChanged(); } }
private int _GripperProgam { get; set; } private int _GripperProgam { get; set; }


public int[] CH_Value { get { return _CH_Value; } set { _CH_Value = value; OnPropertyChanged(); } }
private int[] _CH_Value { get; set; } = new int[12] {200,200,200,200,200,200,200,200,200,200,200,200 };
public ushort[] CH_Value { get { return _CH_Value; } set { _CH_Value = value; OnPropertyChanged(); } }
private ushort[] _CH_Value { get; set; } = new ushort[12] {200,200,200,200,200,200,200,200,200,200,200,200 };


public RelayCommand GripperControlCommand { get; set; } public RelayCommand GripperControlCommand { get; set; }
} }


+ 4
- 4
BPASmartClient/App.config View File

@@ -7,9 +7,9 @@
<add key="IsEnableTest" value="false"/> <add key="IsEnableTest" value="false"/>


<!--测试环境--> <!--测试环境-->
<add key="apollouri" value="http://10.2.1.21:28080/"/>
<!--<add key="apollouri" value="http://10.2.1.21:28080/"/>
<add key="AppId" value="test1_HostComputer"/> <add key="AppId" value="test1_HostComputer"/>
<add key ="Namespaces" value="DEV.test1.Config"/>
<add key ="Namespaces" value="DEV.test1.Config"/>-->


<!--开发环境--> <!--开发环境-->
<!--<add key="apollouri" value="http://10.2.1.21:28080/"/> <!--<add key="apollouri" value="http://10.2.1.21:28080/"/>
@@ -17,9 +17,9 @@
<add key ="Namespaces" value="DEV.Config"/>--> <add key ="Namespaces" value="DEV.Config"/>-->


<!--正式环境--> <!--正式环境-->
<!--<add key="apollouri" value="http://47.108.65.220:28080/"/>
<add key="apollouri" value="http://47.108.65.220:28080/"/>
<add key="appid" value="hostcomputer"/> <add key="appid" value="hostcomputer"/>
<add key ="namespaces" value="test1.config"/>-->
<add key ="namespaces" value="test1.config"/>


<!--阿里云上报启动方式:API 或者 LOCAL--> <!--阿里云上报启动方式:API 或者 LOCAL-->
<!--API :通过客户端ID,调用接口查询“设备连接信息”--> <!--API :通过客户端ID,调用接口查询“设备连接信息”-->


Loading…
Cancel
Save