示例#1
0
        private void devicesTreeView_AfterSelect(object sender, TreeViewEventArgs e)
        {
            try
            {
                if (e.Node.Tag is EthCATDevice)
                {
                    SoemInterrop.RefreshSlavesState();

                    EthCATDevice slave = (EthCATDevice)e.Node.Tag;
                    slave.Refresh();

                    e.Node.SelectedImageIndex = e.Node.ImageIndex = SlaveStatetoIco(slave.State);

                    propertyGrid.SelectedObject = slave;
                    propertyGrid.ExpandAllGridItems();

                    propertyInput.SelectedObjects = new object[] { slave.InputData };
                    propertyInput.ExpandAllGridItems();

                    propertyOutput.SelectedObjects = new object[] { slave.OutputData };
                    propertyOutput.ExpandAllGridItems();

                    PDOToolStripMenuItem.Enabled = slave.MailboxProtocol.Contains(MailBoxProto.CoE.ToString());
                }
                else
                {
                    propertyGrid.SelectedObject = null;
                }
            }
            catch { }
        }
示例#2
0
        // Menu
        private void readPDOToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (devicesTreeView.SelectedNode == null)
            {
                return;
            }

            EthCATDevice slave = devicesTreeView.SelectedNode.Tag as EthCATDevice;

            new ReadWritePDO(slave).ShowDialog();
        }
示例#3
0
        private void tmrInputFlow_Tick(object sender, EventArgs e)
        {
            if (devicesTreeView.SelectedNode == null)
            {
                return;
            }
            EthCATDevice slave = devicesTreeView.SelectedNode.Tag as EthCATDevice;

            slave.ReadInput();
            propertyInput.Refresh();
        }
示例#4
0
        // Menu
        private void stateToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (devicesTreeView.SelectedNode == null)
            {
                return;
            }

            EthCATDevice slave = devicesTreeView.SelectedNode.Tag as EthCATDevice;

            if (sender == stateInitToolStripMenuItem)
            {
                slave.WriteState(SlaveState.Init);
            }
            if (sender == stateBootToolStripMenuItem)
            {
                slave.WriteState(SlaveState.Boot);
            }
            if (sender == stateOperationalToolStripMenuItem)
            {
                slave.WriteState(SlaveState.Operational);
            }
            if (sender == statePreOperationalToolStripMenuItem)
            {
                slave.WriteState(SlaveState.PreOperational);
            }
            if (sender == stateSafeOperationalToolStripMenuItem)
            {
                slave.WriteState(SlaveState.SafeOperational);
            }
            if (sender == sendAckToolStripMenuItem)
            {
                slave.WriteState(SlaveState.Ack);
            }
            if (sender == sendReconfigureToolStripMenuItem)
            {
                slave.Reconfigure();
            }
            // Actual state with bit Ack 1
            if (sender == sendAckToolStripMenuItem)
            {
                slave.WriteState((SlaveState)((uint)slave.State | (uint)SlaveState.Ack));
            }

            Thread.Sleep(200); // It could take time for the device, so we are waitting a few before reading back

            tmrRefreshState_Tick(null, null);
        }
示例#5
0
        public EEPROMTool(EthCATDevice slave)
        {
            InitializeComponent();

            if (slave == null)
            {
                memoryToolStripMenuItem.Enabled = false;
                Lbldevice.Text = "Offline mode";
            }
            else
            {
                this.slave     = (EthCATDevice)slave;
                Lbldevice.Text = slave.ToString();

                writeToolStripMenuItem.Enabled = Properties.Settings.Default.EEPROMWriteEnable;
            }
        }
        public static List <PDODictionaryEntry> GetDictionary(String DatabaseName, EthCATDevice slave)
        {
            string connectionString = "Data Source=" + DatabaseName;

            System.Data.SqlServerCe.SqlCeConnection con = new System.Data.SqlServerCe.SqlCeConnection(connectionString);
            try
            {
                con.Open();

                int databaseid = DeviceDescrProvider.GetSlaveDatabaseId(con, slave._ManufacturerId, slave._TypeId, slave.Revision);
                if (databaseid == -1)
                {
                    return(null);
                }

                List <PDODictionaryEntry> ret = new List <PDODictionaryEntry>();

                string          command = "SELECT * FROM PDO_Dictionary WHERE SlaveId=" + databaseid.ToString();
                SqlCeCommand    cmd     = new SqlCeCommand(command, con);
                SqlCeDataReader reader  = cmd.ExecuteReader();

                while (reader.Read())
                {
                    string FinalType = GetFinalType(con, databaseid, (string)reader[4]);
                    // At this level RW is unknow (not in the XML file)
                    PDODictionaryEntry e = new PDODictionaryEntry(Convert.ToInt32(reader[1]), Convert.ToUInt32(reader[2]),
                                                                  (string)reader[3], FinalType, PDOAccessLevel.Unknow);
                    ret.Add(e);
                    e.AddSubIndexData(con, databaseid);
                }
                con.Close();

                return(ret);
            }
            catch
            {
                Trace.WriteLine("Database content Error");
            }

            return(null);
        }
示例#7
0
        private void tmrRefreshState_Tick(object sender, EventArgs e)
        {
            tmrStart.Enabled = false;

            SoemInterrop.RefreshSlavesState();
            foreach (TreeNode tn in devicesTreeView.Nodes)
            {
                EthCATDevice slave = tn.Tag as EthCATDevice;
                SlaveState   s     = slave.State;
                slave.Refresh();
                if (s != slave.State)
                {
                    int img = SlaveStatetoIco(slave.State);
                    tn.ImageIndex = tn.SelectedImageIndex = img;
                    devicesTreeView.Refresh();
                }

                if (tn == devicesTreeView.SelectedNode)
                {
                    propertyGrid.Refresh();
                    propertyInput.Refresh();
                }
            }
        }
示例#8
0
        // Menu
        private void openInterfaceToolStripMenuItem_Click(object sender, EventArgs e)
        {
            List <Tuple <String, String, String> > interfaces = GetAvailableInterfaces();

            var Input =
                new GenericInputBox <ComboBox>("Local Interface", "Interfaces",
                                               (o) =>
            {
                foreach (Tuple <String, String, String> it in interfaces)
                {
                    o.Items.Add(it.Item1);
                }

                o.Text = o.Items[0].ToString();
            }, 1.7);

            DialogResult res = Input.ShowDialog();

            if (res != DialogResult.OK)
            {
                return;
            }
            String userinput = Input.genericInput.Text;

            Cursor Memcurs = this.Cursor;

            this.Cursor = Cursors.WaitCursor;

            Trace.WriteLine("Openning interface " + userinput);
            Application.DoEvents();

            foreach (Tuple <String, String, String> it in interfaces)
            {
                if (it.Item1 == userinput)
                {
                    String PcapInterfaceName = "\\Device\\NPF_" + it.Item3;
                    int    NbSlaves          = SoemInterrop.StartActivity(PcapInterfaceName, Properties.Settings.Default.DelayUpMs);

                    if (NbSlaves > 0)
                    {
                        for (uint i = 0; i < NbSlaves; i++)
                        {
                            EthCATDevice slave = new EthCATDevice(i + 1);

                            int img = SlaveStatetoIco(slave.State);

                            TreeNode tn = new TreeNode(slave.ToString(), img, img);
                            tn.Tag = slave;
                            devicesTreeView.Nodes.Add(tn);
                        }
                        openInterfaceToolStripMenuItem.Enabled = false;
                        if (tmrRefreshState.Interval >= 1000)
                        {
                            tmrRefreshState.Enabled = true;
                        }

                        SoemInterrop.Run();

                        tmrStart.Enabled     = true;
                        tmrInputFlow.Enabled = true;
                    }
                    else
                    {
                        Trace.WriteLine("No slave behind this Interface");
                    }
                }
            }

            this.Cursor = Memcurs;
        }
        public ReadWritePDO(EthCATDevice slave)
        {
            this.slave = slave;
            InitializeComponent();
            lbldevice.Text = slave.ToString();

            // Get the dictionnary if exist
            List <PDODictionaryEntry> dico = PDODictionaryEntry.GetDictionary(Properties.Settings.Default.DatabaseFile, slave);

            // Fill the Treeview with it
            if (dico != null)
            {
                foreach (PDODictionaryEntry entry in dico)
                {
                    string name = entry.ToString();
                    if (Properties.Settings.Default.ShowSDOIdx)
                    {
                        name = name + " (x" + entry.Index.ToString("X4") + ")";
                    }
                    TreeNode tn = new TreeNode(name);
                    tn.Tag = entry;
                    tn.SelectedImageIndex = tn.ImageIndex = Type2ico(entry.type);

                    dicoTree.Nodes.Add(tn);

                    int ro = 0, rw = 0;

                    if (entry.SubIdx != null)
                    {
                        foreach (PDODictionaryEntry entry2 in entry.SubIdx)
                        {
                            TreeNode tn2 = new TreeNode(entry2.ToString());
                            tn2.Tag                = entry2;
                            tn2.ToolTipText        = entry2.type;
                            tn2.SelectedImageIndex = tn2.ImageIndex = Type2ico(entry2.type);

                            if (entry2.Access == PDOAccessLevel.ReadOnly)
                            {
                                tn2.ForeColor = Properties.Settings.Default.ReadOnlyAttributColor;
                                ro++;
                            }
                            if (entry2.Access == PDOAccessLevel.ReadWrite)
                            {
                                tn2.ForeColor = Properties.Settings.Default.ReadWriteAttributColor;
                                rw++;
                            }
                            tn.Nodes.Add(tn2);
                        }
                    }
                    else
                    {
                        tn.ToolTipText = entry.type;
                    }

                    if ((ro != 0) && (rw == 0))
                    {
                        tn.ForeColor = Properties.Settings.Default.ReadOnlyAttributColor;
                    }
                    if ((rw != 0) && (ro == 0))
                    {
                        tn.ForeColor = Properties.Settings.Default.ReadOnlyAttributColor;
                    }
                }
            }
        }