a1111525 2025-04-27 09:22 采纳率: 0%
浏览 12

c#上位机交互代码问题


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 数据的操作模式(例如,未连接或未登录)。

img

img

img

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-04-27 09:22
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题解答

    你遇到了C#上位机交互代码的问题,可能是指你想在C#中与上位机进行交互,例如读取或写入数据。

    根据你提供的代码,似乎你使用的是.NET Framework中的组件模型(ComponentModel),这使得你可以在C#中创建组件,并将其与上位机交互。

    问题可能是指你遇到了某些问题,例如:

    • 如何在C#中与上位机进行读取或写入数据?
    • 如何使用ComponentModel来实现上位机交互?
    • 有哪些常见的错误或问题?

    如果你能提供更多的信息,我将尽力帮助你解决问题。

    以下是一个简单的示例代码,演示如何使用ComponentModel在C#中与上位机交互:

    using System;
    using System.ComponentModel;
    
    public class MyComponent : Component
    {
        public event EventHandler<MyEventArgs> DataReceived;
    
        public void SendData(string data)
        {
            // 发送数据到上位机
            // ...
        }
    
        public void ReceiveData()
        {
            // 接收数据从上位机
            // ...
        }
    }
    
    public class MyEventArgs : EventArgs
    {
        public string Data { get; set; }
    }
    

    在上面的代码中,我们创建了一个名为MyComponent的组件,它具有一个事件DataReceived,用于处理从上位机接收到的数据。SendData方法用于将数据发送到上位机,而ReceiveData方法用于接收数据从上位机。

    你可以根据你的需求修改这个示例代码,以实现与上位机的交互。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月27日