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 { } }
// 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(); }
private void tmrInputFlow_Tick(object sender, EventArgs e) { if (devicesTreeView.SelectedNode == null) { return; } EthCATDevice slave = devicesTreeView.SelectedNode.Tag as EthCATDevice; slave.ReadInput(); propertyInput.Refresh(); }
// 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); }
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); }
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(); } } }
// 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; } } } }