das template macht genau das, was ich will. jetzt muss ich nur noch schauen, warum das da funktioniert und bei mir nicht.
danke für den link.
ich hatte es mit einem eventhandler versucht, bekam da aber überhaupt keine antwort und hab das deshalb so gemacht, wie oben geschrieben.
und ich muss zugeben, dass ich von eventhandlern keine ahnung hab 😦
aber ich versuchs nochmal damit, wenn ich damit rausbekommen kann, woran so ein fehler liegen kann
hi,
ich habe mir ein kleines prog. geschrieben, mit dessen hilfe ich zeichen an ein serielles gerät senden kann und auf eine antwort warte. die sache funktioniert auch, hat aber nur einen haken.
wenn ich denn zu sendenden string eingebe, muss ich 2 mal auf senden klicken, erst dann kommt die antwort.
beipiel: eingabe v gibt als ausgabe einer versionsinfo. eingabe h eine hilfe. wenn ich h eintippe und auf senden klicke passiert nichts. wenn ich danach v eintippe und auf senden klicke, kommt die antwort vom vorherigen h befhel. die antworten sind also immer eins versetzt. vielleicht kann mir jemand sagen, woran das liegen kann?
code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.IO;
namespace terminal_app
{
public partial class Form1 : Form
{
SerialPort sp = new SerialPort();
string receivedData = "";
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
comboBox2.SelectedIndex = 0;
comboBox3.SelectedIndex = 0;
comboBox4.SelectedIndex = 3;
comboBox5.SelectedIndex = 11;
comboBox1.Items.AddRange(SerialPort.GetPortNames());
comboBox1.SelectedIndex = 0;
}
private void connect()
{
try
{
if (!sp.IsOpen)
{
sp.Open();
textBox_status.Text = "verbunden";
}
}
catch (Exception e1)
{
textBox_status.Text = "Fehler: Port ist in Benutzung oder nicht verfügbar";
}
}
private void button_connect_Click(object sender, EventArgs e)
{
sp.PortName = comboBox1.SelectedItem.ToString();
sp.BaudRate = int.Parse(comboBox5.SelectedItem.ToString());
sp.DataBits = int.Parse(comboBox4.SelectedItem.ToString());
if (comboBox3.SelectedIndex == 0)
{
sp.StopBits = StopBits.One;
}
if (comboBox3.SelectedIndex == 1)
{
sp.StopBits = StopBits.OnePointFive;
}
if (comboBox3.SelectedIndex == 2)
{
sp.StopBits = StopBits.Two;
}
if (comboBox3.SelectedIndex == 3)
{
sp.StopBits = StopBits.None;
}
if (comboBox2.SelectedIndex == 0)
{
sp.Parity = Parity.None;
}
if (comboBox2.SelectedIndex == 1)
{
sp.Parity = Parity.Even;
}
if (comboBox2.SelectedIndex == 2)
{
sp.Parity = Parity.Odd;
}
sp.DtrEnable = true;
sp.RtsEnable = true;
sp.ReadTimeout = 500;
sp.WriteTimeout = 500;
connect();
}
private void button_disconnect_Click(object sender, EventArgs e)
{
try
{
if (sp.IsOpen)
{
sp.Close();
textBox_status.Text = "getrennt";
}
}
catch {}
}
private void button_send_Click(object sender, EventArgs e)
{
if (sp.IsOpen)
{
try
{
string data1 = textBox_input.Text;
sp.WriteLine(data1);
textBox_status.Text = "gesendet";
textBox_output.AppendText("** Eingabe: " + textBox_input.Text + "\n");
textBox_input.Clear();
receivedData = sp.ReadExisting();
textBox_status.Text = "empfangen";
textBox_output.AppendText("Ausgabe: " + receivedData + "\n");
textBox_output.AppendText("\n");
}
catch {}
}
}
private void command_Click(object sender, EventArgs e)
{
sp.Write("$$$");
receivedData = sp.ReadExisting();
textBox_status.Text = "empfangen";
textBox_output.AppendText("Ausgabe: " + receivedData + "\n");
textBox_output.AppendText("\n");
}
}
}
hi,
ich habe folgendes problem. ich habe einen rechner, der per udp daten in ein netzwerk sendet.
diese daten möchte ich mit dem pda über die wlan schnittstelle empfangen. dazu habe ich für den pda folgenden code:
private void GetNetworkAdress()
{
string hostName = Dns.GetHostName();
IPHostEntry local = Dns.GetHostEntry(hostName);
ip = IPAddress.Parse(local.AddressList[0].ToString());
}
private void udp_sock()
{
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9999);
EndPoint ep = (EndPoint)iep;
sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
sock.Bind(iep);
int recv = sock.ReceiveFrom(data, ref ep);
stbAnnounce.importByteArray(data);
sock.Close();
}
bzw.
private void GetNetworkAdress()
{
string hostName = Dns.GetHostName();
IPHostEntry local = Dns.GetHostEntry(hostName);
ip = IPAddress.Parse(local.AddressList[0].ToString());
}
private void udp_norm()
{
UdpClient uClient = new UdpClient(9999);
try
{
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9999);
byte[] receiveBytes = uClient.Receive(ref iep);
stbAnnounce.importByteArray(receiveBytes);
uClient.Close();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
allerdings funktionieren beide nicht richtig. entweder erscheint auf dem pda eine fehlermeldung, dass ein socket nur einmal verwendet werden darf, oder das programm geht gar nicht erst an.
die wlan-verbindung wird vor dem datenempfang aufgebaut und funktioniert auch.
vielleicht kann mir ja jemand helfen.
thx
gut. da hab ich 🙂
nun hab ich aber noch ein kleines problem. ich will mir die snr anzeigen lassen. mit adapter.SignalStrengthInDecibels bekomm ich nur die blanke signalstärke, mit der der ap empfangen wird. das rauschen wird ja nicht berücksichtigt. es wird also mit -100 dB angenommen, oder irr ich mich ?
kann ich mit OpenNetCF das rauschen messen (vorausgesetzt, der adapter kann das)?
ich will also eine echte snr erhalten, so dass ich ab einem bestimmten mindestwert die verbindung trennen kann und mich mit einem anderen ap verbinden kann
grr, auf die idee kamich noch nicht. hatte nur OpenNetCF.Net eingebunden.
hab jetzt das OpenNetCF.Net.NetworkInformation drin. mal sehen, was sich damit anstellen lässt.
vielen dank
hi,
ich habe mir eine klasse erstellt, mit der ich meinen pda mit einem wlan-netz verbinden kann, bzw. die mir verfügbare netzwerkadapter und netzwerke anzeigt.
das einzige, was mir nicht gelingen will, ist eine statusabfrage, ob ein netzwerkadapter mit einem netz verbunden ist. also irgendwie eine abfrage des adapters, die bei einer verbindung mit einem netzwerk true ausgibt, oder sogar den netzwerknamen.
ich habe keine idee, wie ich das machen soll. mit einem ping will ich das nicht machen, da mein ap ping-pakete blockiert.
hat vielleicht jemand ne idee, wie ich den aktuellen verbindungsstatus einer pda-wlan-adapters abfragen kann ?
thx
habs gefunden. hatte vergessen, die Rows hinzuzufügen, bzw. war das falsch.
das mit den arraylisten mach ich, weil ich die genaue anzahl der textdateien nicht weiss und auch nicht die genaue anzahl der textdateien. deswegen lese ich mir die dateinamen der textdateien, die eine bestimmte zeichenfolge enthalten in eine arrayliste.
ich werde versuchen, den quellcode verständlicher hinzubekommen. bis dahin schreib ich unten mal eine kleine erläuterung, was die einzelnen teile machen. ich hoffe es hilft etwas.
String[] tmp_dir = Directory.GetFiles(dir + "\\Log-Dateien");
ArrayList Files = new ArrayList();
StreamWriter sw = File.CreateText(@"C:\Test.txt");
int count_file = 0; //brauch ich zum zählen der textdateien
foreach (string s in tmp_dir)
{
if (s.IndexOf("erkFZG_log") > 0)
{
Files.Add(s); //Liste mit allen Textdateien, die die gesuchte Zeichenfolge im namen haben
count_file++;
mit
string[] sr = File.ReadAllLines(Files[0].ToString());
lese ich die erste zteile einer textdatei aus, damit ich weiss, wieviele spalten ich benötige (steht vorher nicht fest)
hier lese ich jede textdatei zeilenweise aus. dabei soll die erste zeile aber nicht beachtet werden, da da keine werte, sondern nur die spaltenüberschrift steht. deswegen arbeite ich hier auch mit 2 string-arrays:
foreach (object obj in Files)
{
string[] tmp_string = File.ReadAllLines(obj.ToString());
string[] tmp_string_2 = new string[tmp_string.Length - 1];
for (int i = 0; i < tmp_string.Length - 1; i++)
{
tmp_string_2[i] = tmp_string[i + 1];
}
TextDaten.AddRange(tmp_string_2);
}
hier erstelle ich mir eine arrayliste mit den namen der spalten. diese namen kommen aus der ersten zeile einer textdatei:
ArrayList col = new ArrayList();
col.AddRange(sr[0].Split('|')); //Spaltennamen in Arrayliste
col.RemoveAt(0);
DataColumn column;
foreach (object objt in col) //ANlegen der Spalten
{
column = new DataColumn();
column.ColumnName = objt.ToString();
DatenTabelle.setColumn(objt.ToString());
}
hier will ich die zellen befüllen. dazu wird das formular "tabellen" aufgerufen und die strings übergeben:
foreach (string data in TextDaten)
{
DatenTabelle.setRows(data);
}
und in dem tabellen-formular steht für setRows (zum anlegen der zeilen und inhalte):
DataGridViewRow row;
dataGridView1.Rows.Add(1); //hier will ich eine Zeile anlegen
int zeile = dataGridView1.Rows.Count-1;
string[] row_data = data.Split(';'); //hier stehen die einzelnen strings für die zellen in einem array
for (int i = 0; i < row_data.Length; i++ )
{
dataGridView1[i, zeile].Value = row_data[i]; //hier will ich die zellen befüllen
}
irgendwie zeigt mir mein grid nix an 🙁
ArrayList Files = new ArrayList();
string filename_FZG_sortiert = dir + "\\Log-Dateien\\" + ZeitLog + "FZG_sortiert.txt";
StreamWriter sw = File.CreateText(filename_FZG_sortiert);
int count_file = 0;
foreach (string s in tmp_dir)
{
if (s.IndexOf("erkFZG_log") > 0)
{
Files.Add(s);
count_file++;
}
}
string[] sr = File.ReadAllLines(Files[0].ToString());
sw.WriteLine(sr[0]);
sw.Close();
ArrayList TextDaten = new ArrayList();
foreach (object obj in Files)
{
string[] tmp_string = File.ReadAllLines(obj.ToString());
string[] tmp_string_2 = new string[tmp_string.Length - 1];
for (int i = 0; i < tmp_string.Length - 1; i++)
{
tmp_string_2[i] = tmp_string[i + 1];
}
TextDaten.AddRange(tmp_string_2);
}
ArrayList col = new ArrayList();
col.AddRange(sr[0].Split('|'));
col.RemoveAt(0);
DataColumn column;
foreach (object objt in col)
{
column = new DataColumn();
column.ColumnName = objt.ToString();
DatenTabelle.setColumn(objt.ToString());
}
foreach (string data in TextDaten)
{
DTable.Rows.Add(data.Split(';').ToString());
DatenTabelle.setRows(data);
}
}
else
{
irgendwas;
}
DatenTabelle.Show();
in DatenTabelle steht:
using System.Windows.Forms;
namespace VISSIM
{
public partial class Tabelle : Form
{
public Tabelle()
{
InitializeComponent();
dataGridView1 = new DataGridView();
}
public void setColumn(string objt)
{
string test = "TEST";
dataGridView1.Columns.Add(objt, test);
}
public void setRows(string data)
{
DataGridViewRow row;
dataGridView1.Rows.Add(1);
int zeile = dataGridView1.Rows.Count-1;
string[] row_data = data.Split(';');
for (int i = 0; i < row_data.Length; i++ )
{
dataGridView1[i, zeile].Value = row_data[i];
}
}
}
}
die textdateien sehen folgendermassen aus:
00:46:21.8;456;-550,791051947197;416,319375280653;518
die spalten werden korrekt angelegt und ich denke, die zeilen auch. nur werden entweder die zellen nicht befüllt oder mir wird über gridview einfach nix angezeigt.
ich hab es auch über eine datatable versucht und diese dem gridview als datasource angegeben, aber auch das hat nicht funktioniert.
hat vielleicth jemand ne gute idee ?