1. 希望上位机在启动的时候能自动扫描到网络上的机器人,在该机器人系统重启或者其他原因导致的断开连接时给出提示(如下图),并在给机器人系统恢复后自动重连,如何实现?
2。上位机启动后自动扫描连接,可以在c#的form_load事件中添加如下代码
private void Form1_Load(object sender, EventArgs e)
{
this.scanner = new NetworkScanner();
this.scanner.Scan();
//扫描网络上的机器人系统并将信息写入ListView
ControllerInfoCollection controllers = scanner.Controllers;
ListViewItem item = null;
listView1.Items.Clear();
foreach (ControllerInfo controllerInfo in controllers)
{
item = new ListViewItem(controllerInfo.SystemName);
item.SubItems.Add(controllerInfo.IPAddress.ToString());
item.SubItems.Add(controllerInfo.Version.ToString());
item.SubItems.Add(controllerInfo.ControllerName);
this.listView1.Items.Add(item);
item.Tag = controllerInfo;
//用item.Tag标注该机器人系统名字,
//以便在该系统断开连接时,自动在ListView中删去该系统名字
}
3。 对于后期机器人系统的断开,可以在form_load事件中添加如下订阅,并编写对应处理函数
this.networkwatcher.Lost += newEventHandler<NetworkWatcherEventArgs>(HandleLostEvent);
this.networkwatcher.EnableRaisingEvents = true;
//添加对控制器断开网络连接事件的订阅
voidHandleLostEvent(object sender, NetworkWatcherEventArgs e)
{
foreach (ListViewItem item in listView1.Items)
{
if ((ControllerInfo)item.Tag==e.Controller)
{
//如果在ListView中的controller信息与断开网络连接的controller信息一致
//将该条item删去
listView1.Items.Remove(item);
}
}
MessageBox.Show(e.Controller.SystemName + " Lost Connection");
//提示用户该机器人系统断开连接
}
4. 此时若机器人系统再次启动成功并接入网络,可以在form_load中添加如下订阅
this.networkwatcher = newNetworkWatcher(scanner.Controllers);
this.networkwatcher.Found += newEventHandler<NetworkWatcherEventArgs>(HandleFoundEvent);
//添加对新登入网络控制器事件的订阅
voidHandleFoundEvent(object sender, NetworkWatcherEventArgs e)
{
this.Invoke(new
EventHandler<NetworkWatcherEventArgs>(AddControllerToListView),
new Object[] { this, e });
}
privatevoidAddControllerToListView(object sender, NetworkWatcherEventArgs e)
{
ControllerInfo controllerInfo = e.Controller;
ListViewItem item = newListViewItem(controllerInfo.SystemName);
item.SubItems.Add(controllerInfo.IPAddress.ToString());
item.SubItems.Add(controllerInfo.Version.ToString());
item.SubItems.Add(controllerInfo.ControllerName);
item.Tag = controllerInfo;
this.listView1.Items.Add(item);
}
- 下一篇:ABB机器人|例行程序之输入输出参数
- 上一篇:机器人短距离运动报警