using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ABB.Robotics.Controllers;
using ABB.Robotics.Controllers.Discovery;
using ABB.Robotics.Controllers.RapidDomain;
using ABB.Robotics.Controllers.IOSystemDomain;
using ABB.Robotics.Controllers.MotionDomain;
using ABB.Robotics.Controllers.EventLogDomain;
using System.Net;
using System.Net.Http;
using System.Json;
using System.IO;
using Newtonsoft.Json;
using System.Threading;
using System.Data.SqlClient;
namespace ABB_PCSDK
{
public partial class Form1 : Form
{
//private System.Timers.Timer timer2 = new System.Timers.Timer();
//private System.Timers.Timer timer3 = new System.Timers.Timer();
public static Form1 form1;
private bool isRecord = false;
HslCommunication.Controls.UserCurve[] userCurves;
SqlConnection sqlConnection;
public Form1()
{
InitializeComponent();
form1 = this;
userCurves = new HslCommunication.Controls.UserCurve[6] { userCurve1, userCurve2, userCurve3, userCurve4, userCurve5, userCurve6 };
//this.Width = Screen.PrimaryScreen.WorkingArea.Width; //获取当前屏幕显示区域大小,让窗体长宽等于这个值,这里不包含任务栏哦
//this.Height = Screen.PrimaryScreen.WorkingArea.Height;
//ConnectDataBase();
}
/// <summary>
/// 扫描可用ABB机器人控制器
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
if (Common.scanner == null)
{
Common.scanner = new NetworkScanner();
}
Common.scanner.Scan();
this.listView1.Items.Clear();
ControllerInfoCollection controllers = Common.scanner.Controllers;
Common.robotCount = controllers.Count;
foreach (ControllerInfo info in controllers)
{
ListViewItem listViewItem = new ListViewItem(info.SystemName);
//listViewItem.Text = info.SystemName.ToString();
listViewItem.SubItems.Add(info.IPAddress.ToString());
listViewItem.SubItems.Add(info.Version.ToString());
listViewItem.SubItems.Add(info.IsVirtual.ToString());
listViewItem.SubItems.Add(info.ControllerName.ToString());
listViewItem.Tag = info;
this.listView1.Items.Add(listViewItem);
}
if (Common.robotCount == 1)
{
ListViewItem item = this.listView1.Items[0];
if (item.Tag != null)
{
ControllerInfo info = (ControllerInfo)item.Tag;
if (info.Availability == Availability.Available)
{
if (Common.controller != null)
{
Common.controller.Logoff();
Common.controller.Dispose();
Common.controller = null;
}
//Common.controller = ControllerFactory.CreateFrom(info);
Common.controller = new Controller(info);
Common.controller.Logon(UserInfo.DefaultUser);
//MessageBox.Show(Common.controller.Connected.ToString());
//Console.WriteLine(Common.controller.Rapid);
//Console.WriteLine(Common.controller.IPAddress);
//Console.WriteLine(Common.controller.Connected);
MessageBox.Show("已登录控制器" + info.SystemName);
timer1.Enabled = true;
Common.controller1 = Common.controller;
sysNameLabel.Text = Common.controller.SystemName;
sysNameLabel2.Text = Common.controller.SystemName;
sysNameLabel4.Text = Common.controller.SystemName;
sysNameLabel6.Text = Common.controller.SystemName;
sysNameLabel1.Text = Common.controller1.SystemName;
sysNameLabel3.Text = Common.controller1.SystemName;
sysNameLabel5.Text = Common.controller1.SystemName;
sysNameLabel7.Text = Common.controller1.SystemName;
Subscribe();
//Common common = new Common();
//common.updatePos = new Common.UpdatePos(GetPostion);
//Common.updatePos = new Common.UpdatePos(GetPostion);
//Thread thread = new Thread(new ThreadStart(Common.getPos));
Common.thread.IsBackground = true;
Common.thread.Start();
//Console.WriteLine(Common.controller.CurrentUser);
}
}
}
if (Common.robotCount == 2)
{
ListViewItem item = this.listView1.Items[0];
ListViewItem item1 = this.listView1.Items[1];
if (item.Tag != null)
{
ControllerInfo info = (ControllerInfo)item.Tag;
if (info.Availability == Availability.Available)
{
if (Common.controller != null)
{
Common.controller.Logoff();
Common.controller.Dispose();
Common.controller = null;
}
Common.controller = ControllerFactory.CreateFrom(info);
Common.controller.Logon(UserInfo.DefaultUser);
MessageBox.Show("已登录控制器" + info.SystemName);
timer1.Enabled = true;
//Subscribe();
//Console.WriteLine(Common.controller.CurrentUser);
sysNameLabel.Text = Common.controller.SystemName;
sysNameLabel2.Text = Common.controller.SystemName;
sysNameLabel4.Text = Common.controller.SystemName;
sysNameLabel6.Text = Common.controller.SystemName;
}
}
if (item1.Tag != null)
{
ControllerInfo info = (ControllerInfo)item1.Tag;
if (info.Availability == Availability.Available)
{
if (Common.controller1 != null)
{
Common.controller1.Logoff();
Common.controller1.Dispose();
Common.controller1 = null;
}
Common.controller1 = ControllerFactory.CreateFrom(info);
Common.controller1.Logon(UserInfo.DefaultUser);
MessageBox.Show("已登录控制器" + info.SystemName);
timer1.Enabled = true;
//Console.WriteLine(Common.controller.CurrentUser);
sysNameLabel1.Text = Common.controller1.SystemName;
sysNameLabel3.Text = Common.controller1.SystemName;
sysNameLabel5.Text = Common.controller1.SystemName;
sysNameLabel7.Text = Common.controller1.SystemName;
}
}
//***************添加订阅----------------------------------------------------------------------------------
Subscribe();
//***************开启后台线程更新位置信息------------------------------------------------------------------
//Common common = new Common();
//common.updatePos = new Common.UpdatePos(GetPostion);
////common.updatePos += new Common.UpdatePos(getTime);
//Thread thread = new Thread(new ThreadStart(common.getPos));
//thread.IsBackground = true;
//thread.Start();
Common.thread.IsBackground = true;
Common.thread.Start();
}
}
//public void getTime()
//{
// if (this.textBoxJ1.InvokeRequired)
// {
// //再次创建一个TestClass类的对象
// Common testclass = new Common();
// //为新对象的mainThread对象搭载方法
// testclass.updatePos = new Common.UpdatePos(getTime);
// //this指窗体,在这调用窗体的Invoke方法,也就是用窗体的创建线程来执行mainThread对象委托的方法,再加上需要的参数(i)
// this.Invoke(testclass.updatePos);
// }
// else
// {
// getRunTime();
// }
//}
//public void getRunTime()
//{
// richTextBox2.Text = "";
// MechanicalUnitServiceInfo unitServiceInfo = Common.controller.MotionSystem.ActiveMechanicalUnit.ServiceInfo;
// richTextBox2.Text += "生产总时间:" + unitServiceInfo.ElapsedProductionTime.TotalHours.ToString() + " 小时 \r\n";
// richTextBox2.Text += "自上次服务后的生产总时间:" + unitServiceInfo.ElapsedProductionTimeSinceLastService.TotalHours.ToString() + " 小时 \r\n";
// richTextBox2.Text += "上次开机时间:" + unitServiceInfo.LastStart.ToString() + " 小时 \r\n";
// richTextBox2.Text += "自上次检修后的校准时间:" + unitServiceInfo.ElapsedCalenderTimeSinceLastService.TotalHours.ToString() + " 天 \r\n";
//}
/// <summary>
/// 单击登录机器人控制器
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listView1_DoubleClick(object sender, EventArgs e)
{
if (this.listView1.Items.Count > 0)
{
ListViewItem item = this.listView1.SelectedItems[0];
if (item.Tag != null)
{
ControllerInfo info = (ControllerInfo)item.Tag;
if (info.Availability == Availability.Available)
{
if (Common.controller != null)
{
Common.controller.Logoff();
Common.controller.Dispose();
Common.controller = null;
}
Common.controller = ControllerFactory.CreateFrom(info);
Common.controller.Logon(UserInfo.DefaultUser);
MessageBox.Show("已登录控制器" + info.SystemName);
timer1.Enabled = true;
Subscribe();
}
}
}
}
/// <summary>
/// 读取机器人单个数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ReadDataBtn_Click(object sender, EventArgs e)
{
//RapidData rapidData = Common.controller.Rapid.GetRapidData("modbus", "MainModule", "a");
//textBoxShow.Text = rapidData.Value.ToString();
//RapidData rapidData = Common.controller.Rapid.GetRapidData("T_ROB1", "mainModule", "p20");
//textBoxShow.Text = rapidData.Value.ToString();
//RobTarget ptemp = (RobTarget)rapidData.Value;
//textBox_X.Text = ptemp.Trans.X.ToString();
//textBox_Y.Text = ptemp.Trans.Y.ToString();
//textBox_Z.Text = ptemp.Trans.Z.ToString();
//double rx;
//double ry;
//double rz;
//ptemp.Rot.ToEulerAngles(out rx, out ry, out rz);
//textBox_rx.Text = rx.ToString(format: "#0.00");
//textBox_ry.Text = ry.ToString(format: "#0.00");
//textBox_rz.Text = rz.ToString(format: "#0.00");
//Console.WriteLine("1111" + Common.controller.MotionSystem.ActiveMechanicalUnit.GetMechanicalUnitStatus());
RapidData rapidData = Common.controller.Rapid.GetRapidData("IO", "MainModule", "curTorque");
textBoxShow.Text = rapidData.Value.ToString();
}
/// <summary>
/// 更改机器人单个数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void WriteDataBtn_Click(object sender, EventArgs e)
{
try
{
using (Mastership.Request(Common.controller.Rapid))
{
RapidData rapidData = Common.controller.Rapid.GetRapidData("T_ROB1", "mainModule", "a");
rapidData.Log = true;
Num num = (Num)rapidData.Value;
num.FillFromString2(this.textBox1.Text);
//int x = Convert.ToInt32(this.textBox1.Text);
//num.Value = x;
rapidData.Value = num;
MessageBox.Show("已修改值为" + num.ToString());
//RapidData rapidData = Common.controller.Rapid.GetRapidData("T_ROB1", "mainModule", "p20");
//rapidData.Log = true;
//RobTarget p1 = (RobTarget)rapidData.Value;
//p1.Trans.X = Convert.ToSingle(textBox_X.Text);
//p1.Trans.Y = Convert.ToSingle(textBox_Y.Text);
//p1.Trans.Z = Convert.ToSingle(textBox_Z.Text);
//rapidData.Value = p1;
//MessageBox.Show("已修改值为" + p1.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 读取机器人数组数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ReadArrayBtn_Click(object sender, EventArgs e)
{
RapidData rapidData = Common.controller.Rapid.GetRapidData("T_ROB1", "mainModule", "arr");
if (rapidData.IsArray)
{
ArrayData arrayData = (ArrayData)rapidData.Value;
textBoxShow.Text = arrayData.ToString();
//textBoxShow.Text = rapidData.ReadItem(2).ToString();
}
}
/// <summary>
/// 更改机器人数组数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void WriteArrayBtn_Click(object sender, EventArgs e)
{
try
{
using (Mastership.Request(Common.controller.Rapid))
{
RapidData rapidData = Common.controller.Rapid.GetRapidData("T_ROB1", "mainModule", "arr");
if (rapidData.IsArray)
{
ArrayData arrayData = (ArrayData)rapidData.Value;
//arrayData.FillFromString(textBoxShow.Text);
Num tempNum = (Num)rapidData.ReadItem(0);
tempNum.Value = Convert.ToDouble(textBox1.Text);
rapidData.WriteItem(tempNum, 2);
MessageBox.Show("修改数组成功!");
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 读取IO
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ReadIOBtn_Click(object sender, EventArgs e)
{
//Signal ao_speed = Common.controller.IOSystem.GetSignal("ao_speed");
//textBoxShow.Text = ao_speed.Value.ToString();
this.listView2.Items.Clear();
SignalCollection signals = Common.controller.IOSystem.GetSignals(IOFilterTypes.Unit, "d652");
foreach (Signal signal in signals)
{
ListViewItem item = new ListViewItem(signal.Name);
item.SubItems.Add(signal.Type.ToString());
item.SubItems.Add(signal.Value.ToString());
item.SubItems.Add(signal.Unit.ToString());
listView2.Items.Add(item);
}
}
/// <summary>
/// 更改IO
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void WriteIOBtn_Click(object sender, EventArgs e)
{
try
{
DigitalSignal digitalSignal = (DigitalSignal)Common.controller.IOSystem.GetSignal("DO_0");
if (digitalSignal.Value == 0)
{
digitalSignal.Set();
}
else
{
digitalSignal.Reset();
}
GroupSignal groupSignal = (GroupSignal)Common.controller.IOSystem.GetSignal("GO_8_15");
groupSignal.Value = 250;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 多线程实时获取位置
/// </summary>
public void GetPostion()
{
if (this.textBoxJ1.InvokeRequired)
{
////再次创建一个TestClass类的对象
//Common testclass = new Common();
////为新对象的mainThread对象搭载方法
//testclass.updatePos = new Common.UpdatePos(GetPostion);
////this指窗体,在这调用窗体的Invoke方法,也就是用窗体的创建线程来执行mainThread对象委托的方法,再加上需要的参数(i)
//this.Invoke(testclass.updatePos);
//Common.updatePos = new Common.UpdatePos(GetPostion);
this.Invoke(Common.updatePos);
}
else
{
GetPos();
//getRunTime();
}
}
/// <summary>
/// 获取TCP当前关节坐标或笛卡尔坐标
/// </summary>
public void GetPos()
{
if (radioButton2.Checked)
{
double rx;
double ry;
double rz;
RobTarget robTarget = Common.controller.MotionSystem.ActiveMechanicalUnit.GetPosition(CoordinateSystemType.World);
labelX.Text = "X:";
labelY.Text = "Y:";
labelZ.Text = "Z:";
labelRx.Text = "Rx:";
labelRy.Text = "Ry:";
labelRz.Text = "Rz:";
robTarget.Rot.ToEulerAngles(out rx, out ry, out rz);
textBoxJ1.Text = robTarget.Trans.X.ToString(format: "#0.000");
textBoxJ2.Text = robTarget.Trans.Y.ToString(format: "#0.000");
textBoxJ3.Text = robTarget.Trans.Z.ToString(format: "#0.000");
textBoxJ4.Text = rx.ToString(format: "#0.000");
textBoxJ5.Text = ry.ToString(format: "#0.000");
textBoxJ6.Text = rz.ToString(format: "#0.000");
}
else
{
JointTarget jointTarget = Common.controller.MotionSystem.ActiveMechanicalUnit.GetPosition();
labelX.Text = "J1:";
labelY.Text = "J2:";
labelZ.Text = "J3:";
labelRx.Text = "J4:";
labelRy.Text = "J5:";
labelRz.Text = "J6:";
textBoxJ1.Text = jointTarget.RobAx.Rax_1.ToString(format: "#0.000");
textBoxJ2.Text = jointTarget.RobAx.Rax_2.ToString(format: "#0.000");
textBoxJ3.Text = jointTarget.RobAx.Rax_3.ToString(format: "#0.000");
textBoxJ4.Text = jointTarget.RobAx.Rax_4.ToString(format: "#0.000");
textBoxJ5.Text = jointTarget.RobAx.Rax_5.ToString(format: "#0.000");
textBoxJ6.Text = jointTarget.RobAx.Rax_6.ToString(format: "#0.000");
}
if (radioButton4.Checked)
{
double rx;
double ry;
double rz;
RobTarget robTarget = Common.controller1.MotionSystem.ActiveMechanicalUnit.GetPosition(CoordinateSystemType.World);
labelX1.Text = "X:";
labelY1.Text = "Y:";
labelZ1.Text = "Z:";
labelRx1.Text = "Rx:";
labelRy1.Text = "Ry:";
labelRz1.Text = "Rz:";
robTarget.Rot.ToEulerAngles(out rx, out ry, out rz);
textBoxJ1_1.Text = robTarget.Trans.X.ToString(format: "#0.000");
textBoxJ2_1.Text = robTarget.Trans.Y.ToString(format: "#0.000");
textBoxJ3_1.Text = robTarget.Trans.Z.ToString(format: "#0.000");
textBoxJ4_1.Text = rx.ToString(format: "#0.000");
textBoxJ5_1.Text = ry.ToString(format: "#0.000");
textBoxJ6_1.Text = rz.ToString(format: "#0.000");
}
else
{
JointTarget jointTarget = Common.controller1.MotionSystem.ActiveMechanicalUnit.GetPosition();
labelX1.Text = "J1:";
labelY1.Text = "J2:";
labelZ1.Text = "J3:";
labelRx1.Text = "J4:";
labelRy1.Text = "J5:";
labelRz1.Text = "J6:";
textBoxJ1_1.Text = jointTarget.RobAx.Rax_1.ToString(format: "#0.000");
textBoxJ2_1.Text = jointTarget.RobAx.Rax_2.ToString(format: "#0.000");
textBoxJ3_1.Text = jointTarget.RobAx.Rax_3.ToString(format: "#0.000");
textBoxJ4_1.Text = jointTarget.RobAx.Rax_4.ToString(format: "#0.000");
textBoxJ5_1.Text = jointTarget.RobAx.Rax_5.ToString(format: "#0.000");
textBoxJ6_1.Text = jointTarget.RobAx.Rax_6.ToString(format: "#0.000");
}
}
/// <summary>
/// 更换坐标显示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
if (radioButton1.Checked)
{
labelX.Text = "J1:";
labelY.Text = "J2:";
labelZ.Text = "J3:";
labelRx.Text = "J4:";
labelRy.Text = "J5:";
labelRz.Text = "J6:";
}
else
{
labelX.Text = "X:";
labelY.Text = "Y:";
labelZ.Text = "Z:";
labelRx.Text = "Rx:";
labelRy.Text = "Ry:";
labelRz.Text = "Rz:";
}
}
/// <summary>
/// 多线程实时获取扭矩
/// </summary>
public void GetTorque()
{
if (this.recordTorqueBtn.InvokeRequired)
{
////再次创建一个TestClass类的对象
//Common testclass = new Common();
////为新对象的mainThread对象搭载方法
//testclass.updatePos = new Common.UpdatePos(GetPostion);
////testclass.updatePos += new Common.UpdatePos(getTime);
////this指窗体,在这调用窗体的Invoke方法,也就是用窗体的创建线程来执行mainThread对象委托的方法,再加上需要的参数(i)
//this.Invoke(testclass.updatePos);
//Common.updatePos = new Common.UpdatePos(GetPostion);
this.Invoke(Common.updateTorque);
}
else
{
GetTor();
//getRunTime();
}
}
/// <summary>
/// 获取机器人各个轴的扭矩
/// </summary>
public void GetTor()
{
RapidData rapidData = Common.controller.Rapid.GetRapidData("IO", "MainModule", "curTorque");
ArrayData arrayData = (ArrayData)rapidData.Value;
for(int i = 0; i < 6; i++)
{
float temp = Convert.ToSingle(arrayData[i]);
userCurves[i].AddCurveData("A", temp);
userCurves[i].AddCurveData("B", 2);
userCurves[i].AddCurveData("C", -2);
}
}
/// <summary>
/// 更换坐标显示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
if (radioButton3.Checked)
{
labelX1.Text = "J1:";
labelY1.Text = "J2:";
labelZ1.Text = "J3:";
labelRx1.Text = "J4:";
labelRy1.Text = "J5:";
labelRz1.Text = "J6:";
}
else
{
labelX1.Text = "X:";
labelY1.Text = "Y:";
labelZ1.Text = "Z:";
labelRx1.Text = "Rx:";
labelRy1.Text = "Ry:";
labelRz1.Text = "Rz:";
}
}
/// <summary>
/// 定时器触发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
//GetPos();
GetSpeed();
//UpdateSpeed();
}
/// <summary>
/// 获取机器人速度百分比
/// </summary>
private void GetSpeed()
{
labelSpeed.Text = Common.controller.MotionSystem.SpeedRatio.ToString() + "%";
labelSpeed1.Text = Common.controller.MotionSystem.SpeedRatio.ToString() + "%";
}
//*********************************------------------------------------------------------------------------*/
/// <summary>
/// 获取所有数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void getDataBtn_Click(object sender, EventArgs e)
{
Common.tasks = Common.controller.Rapid.GetTasks();
RapidSymbolSearchProperties prop = RapidSymbolSearchProperties.CreateDefault();
prop.Types = SymbolTypes.Data;
prop.InUse = false;
prop.LocalSymbols = false;
prop.Recursive = true;
prop.SearchMethod = SymbolSearchMethod.Block;
RapidSymbol[] symbols = Common.tasks[0].SearchRapidSymbol(prop, string.Empty);
listViewData.Items.Clear();
foreach (RapidSymbol symbol in symbols)
{
RapidData data = Common.tasks[0].GetRapidData(symbol);
ListViewItem item = new ListViewItem(symbol.Name);
item.SubItems.Add(symbol.Type.ToString());
item.SubItems.Add(data.RapidType.ToString());
//item.SubItems.Add(data.Value.ToString());
item.Tag = symbol;
listViewData.Items.Add(item);
}
}
private void getData1Btn_Click(object sender, EventArgs e)
{
Common.tasks = Common.controller1.Rapid.GetTasks();
RapidSymbolSearchProperties prop = RapidSymbolSearchProperties.CreateDefault();
prop.Types = SymbolTypes.Data;
prop.InUse = false;
prop.LocalSymbols = false;
prop.Recursive = true;
prop.SearchMethod = SymbolSearchMethod.Block;
RapidSymbol[] symbols = Common.tasks[0].SearchRapidSymbol(prop, comboBox3.SelectedItem.ToString(), string.Empty);
listViewData1.Items.Clear();
foreach (RapidSymbol symbol in symbols)
{
RapidData data = Common.tasks[0].GetRapidData(symbol);
ListViewItem item = new ListViewItem(symbol.Name);
item.SubItems.Add(symbol.Type.ToString());
item.SubItems.Add(data.RapidType.ToString());
item.SubItems.Add(data.Value.ToString());
item.Tag = symbol;
listViewData1.Items.Add(item);
}
}
/// <summary>
/// 获取事件日志
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void getEventBtn_Click(object sender, EventArgs e)
{
Common.eventLog = Common.controller.EventLog;
EventLogCategory category;
category = Common.eventLog.GetCategory(0);
richTextBoxELog.Text = "";
foreach (EventLogMessage message in category.Messages)
{
int logNo = message.CategoryId * 10000 + message.Number;
richTextBoxELog.Text += logNo.ToString() + " " + message.Timestamp.ToString() + " " + message.Title + "\n";
}
Common.eventLog1 = Common.controller1.EventLog;
EventLogCategory category1;
category1 = Common.eventLog1.GetCategory(0);
richTextBoxELog1.Text = "";
foreach (EventLogMessage message in category1.Messages)
{
int logNo = message.CategoryId * 10000 + message.Number;
richTextBoxELog1.Text += logNo.ToString() + " " + message.Timestamp.ToString() + " " + message.Title + "\n";
}
}
/**********************************************************************************************************************************/
//以下为订阅事件部分
/// <summary>
/// 初始化订阅事件函数
/// </summary>
private void Subscribe()
{
Signal signalSpeed = Common.controller.IOSystem.GetSignal("ao_speed");
signalSpeed.Changed += new EventHandler<SignalChangedEventArgs>(speed_Changed);
Signal signalSpeed1 = Common.controller1.IOSystem.GetSignal("ao_speed");
signalSpeed1.Changed += new EventHandler<SignalChangedEventArgs>(speed_Changed1);
SignalCollection signals = Common.controller.IOSystem.GetSignals(IOFilterTypes.Unit, "d652");
foreach (Signal signal in signals)
{
ListViewItem item = new ListViewItem(signal.Name);
item.SubItems.Add(signal.Type.ToString());
item.SubItems.Add(signal.Value.ToString());
item.SubItems.Add(signal.Unit.ToString());
listView3.Items.Add(item);
item.Tag = signal;
signal.Changed += new EventHandler<SignalChangedEventArgs>(signal_Changed);
}
SignalCollection signals1 = Common.controller1.IOSystem.GetSignals(IOFilterTypes.Unit, "d652");
foreach (Signal signal in signals1)
{
ListViewItem item = new ListViewItem(signal.Name);
item.SubItems.Add(signal.Type.ToString());
item.SubItems.Add(signal.Value.ToString());
item.SubItems.Add(signal.Unit.ToString());
listView4.Items.Add(item);
item.Tag = signal;
signal.Changed += new EventHandler<SignalChangedEventArgs>(signal_Changed1);
}
Common.controller.StateChanged += new EventHandler<StateChangedEventArgs>(controller_StateChanged);
Common.controller1.StateChanged += new EventHandler<StateChangedEventArgs>(controller_StateChanged1);
Common.controller.Rapid.ExecutionStatusChanged += new EventHandler<ExecutionStatusChangedEventArgs>(execution_StatusChanged);
Common.controller1.Rapid.ExecutionStatusChanged += new EventHandler<ExecutionStatusChangedEventArgs>(execution_StatusChanged1);
Common.controller.OperatingModeChanged += new EventHandler<OperatingModeChangeEventArgs>(operatin_ModeChanged);
Common.controller1.OperatingModeChanged += new EventHandler<OperatingModeChangeEventArgs>(operatin_ModeChanged1);
//RapidData rapidData = Common.controller.Rapid.GetRapidData("T_ROB1", "MainModule", "a");
//rapidData.ValueChanged += new EventHandler<DataValueChangedEventArgs>(rapidData_ValueChanged);
Common.controller.Rapid.UIInstruction.UIInstructionEvent += new UIInstructionEventHandler(OnUIInstructionEvent);
Common.eventLog = Common.controller.EventLog;
Common.eventLog.MessageWritten += new EventHandler<MessageWrittenEventArgs>(msg_WritenChanged);
Common.eventLog1 = Common.controller1.EventLog;
Common.eventLog1.MessageWritten += new EventHandler<MessageWrittenEventArgs>(msg_WritenChanged1);
RapidData rapidData = Common.controller.Rapid.GetRapidData("IO", "MainModule", "curTorque");
//RapidData rapidData = Common.controller.Rapid.GetRapidData("T_ROB1", "MainModule", "a");
rapidData.ValueChanged += new EventHandler<DataValueChangedEventArgs>(rapidData_ValueChanged);
}
这是我在csdn上面另外一名博主要的上位机的程序,但是这个程序跟我的ABB仿真联合时候总会在图片中的代码段报错,我通过查看ai显示是1. RAPID 数据不存在:"curTorque" 变量可能未在 "MainModule" 模块或 "IO" 任务中定义。需要确保 RAPID 程序中正确定义了该变量。
2. 控制器状态不正确:控制器可能未处于允许访问 RAPID 数据的操作模式(例如,未连接或未登录)。


