Laden...

Forenbeiträge von schnurzli Ingesamt 34 Beiträge

24.01.2019 - 07:25 Uhr

Guten Morgen,

danke für euren Input.

Ich baue meine Funktionen heute einmal zusammen und poste euch dann meinen Versuch.

@Abt: Ja es ist leider auch tagesübergreifend. Aber dafür nehmne ich nun das DateTimefeld komplett anstatt nur die Zeit zu berücksichtigen.

LG

23.01.2019 - 18:47 Uhr

Hi,

danke für deine rasche Rückmeldung. Ich möchte bestimmte Zeitgrenzen eingeben.
Ziel ist es, einen Tarifvertrag zu prüfen. Es geht um Arbeitszeit. Wenn man nun eine Arbeitszeit von - bis hat, möchte ich diese dann überprüfen.

Ich bin in meiem Beispiel nun schon ein wenig fortgeschrittener. Arbeitszeit ist wirklich etwas komplex Das lerne ich gerade 😃 Ich bin aber über jeden Ansatz und Optimierungsvorschlag erfreut 😃

Mein Ansatz: ich sammle in meiner Funktion sinnbildlich einmal alle meine Arbeitszeiten von einem Arbeitstag:

 DateTime[,] ZeitenMo = {
                {  DateTime.Parse("22.01.2019 05:45"), DateTime.Parse("22.01.2019 09:00") },
                {  DateTime.Parse("22.01.2019 09:30"), DateTime.Parse("22.01.2019 15:00") }
            };

Danach baue ich mir ein paar Funktionen für die einzelnen Prüfungen und versuche immer Summen zu bilden. Als erstes habe ich nun begonnen mir eine Funktion für die Gesamtsumme zu bauen. Die Funktion ist dann meine Ist-Summe. Nun prüfe ich, ob die Zeit einen bestimmten Wert des Tages überschreitet. Wenn das passiert, würde ich eine weitere Funktion erstellen, die diese Grenze prüft- Alle Zeiten darüber sind in meinem Beispiel dann Überstunden (Größer 8 Stunden) Da dies aber eigentlich im 15 Minuten Takt passieren kann (In meinem Beispiel ist dann ab 14:00 - 15:00 - also vier 15 Minuten Pakete schon als eine Überstunde zu markieren. Die 15 Minuten vor 6:00 würden dann in die Tarif Nacht fallen und würden auch zu einer Überstunde werden.

Es kommt dann noch eine Prüfung, ob die Stunde am Feiertag passiert oder am Sonntag... Aber im Wesentlichen immer dieselbe Logik in meinem Ansatz.

Und meine urspürngliche Frage war eben, ob dieser Ansatz sinnvoll für eine Prüfung ist oder ob es für eine Prüfung von Zeiten und der Grenzen eines Parameters eine bessere Lösung gibt.

LG Schnurzli

23.01.2019 - 17:52 Uhr

Hallo allerseits,

ich habe eine eine grunsätzliche Frage zur Logik zum Thema DateTime und dem sinnvollen Abarbeiten von Berechnungen.

Ein Beispiel.
Ich habe eine von und eine bis Zeit. Diese kann sowohl am selben Tag als auch am darauffolgenden Tag sein.

Beispiel: Ich definiere zwei Zeiten für von und bis.


DateTime zeitvon = DateTime.Parse("22.01.2019 05:45");
DateTime zeitbis = DateTime.Parse("22.01.2019 10:00");

Nun würde ich gerne bestimmte Kriterien prüfen. Und da diese im 15 Minuten Takt sein kann, würde ich die Zeiten in 15 Minuten Bündel zerlegen.
In etwa so:


while (zeitvon <= zeitbis) {
      System.Console.WriteLine(zeitvon.ToShortTimeString());
      zeitvon = zeitvon.AddMinutes(15);
}

Danach habe ich Parameter in Form eines DateTime Feldes, die eine Grenze vorgeben.
Beispiel:


DateTime grenzebeginn= DateTime.Parse("01.01.1900 05:00");
DateTime grenzeende= DateTime.Parse("01.01.1900 06:00");

Und dann prüfe ich mit if einfach in while auf Erreichen der Grenze.

Ist das ein prkatikabler Weg, um ans Ziel zu kommen oder bin ich total auf dem Holzweg?
Fertige Klassen gibt es für so eine Logik nicht - ich habe zumindest keine gefunden.

LG Schnurzli

06.05.2016 - 08:11 Uhr

Hi,

vielen Dank an FZelle Ich habe es falsch verstanden. Dachte du meinst datareader. Mir war nicht bewusst, dass sqlbulkcopy so genial ist.

Auch Dank an T-Virus für dein Beispiel!

LG

04.05.2016 - 20:59 Uhr

Hi,

danke für die rasche Antwort!

@Abt: also 10.000 zeilen lesen, in DataTable schreiben-> Datenbank abspeichern. Nächstes 10.000 Paket?

@FZeile: ich kann dir nicht ganz folgen? Auf was willst du hinaus? DataReader ist mir geläufig? Was hilft er mit im Zusammenhang mit OpenEdge?

LG

04.05.2016 - 17:55 Uhr

Quell - Datenbanksystem: Progress (Openedge) v7
Ziel - Datenbanksystem: MSSQL 2014 Enterprise

Hallo Freunde,

ich habe aktuell an einem Problem zu kämpfen. Ich nutze einen 32 Bit Treiber, da das System, welches die Progress DB nutzt auf 32 Bit basiert. Ich habe mir nun eine Klasse gebaut, welche Daten aus der Progress in eine DataTable schreibt und diese dann in eine MSSQL Datenbank weitergibt. Die MSSQL Seite ist kein Problem. Beim ODBC Teil Richtung OpenEdge/Progress bekomme ich aber nach einer etwaigen Zeilenzahl von 1,5 Millionen ein Timeout.

Habt ihr eine Idee für mich, wie ich denn diese Abfrage sinnvoll erweitern, einschränken oder unterteilen kann damit ich auch bei großen Datenmengen nicht auf einen Out.of.Memory Fehler gelange? Ich habe mich hier irgendwie verfangen und bitte euch um eure geschätzte Hilfe.

Anbei ein Auszug meiner Klasse, welche die Selektion der Progress Daten in Angriff nimmt. Ich habe eine Funktion bulkSelect erstellt, welche dynamisch mit dem Tabellennamen der QuellDatenbank dann diese Daten an die Zieldatenbank mittels Funktion BulkInsertiSert weitergibt. Auf den Inhalt dieser Klasse werde ic haber hier nicht eingehen, da das Script ja vorher dem besagten Out of memory Tod stirbt...

namespace TestSync {
    class ReaderClass {

        static string praConn = ConfigurationManager.ConnectionStrings["PROconn"].ConnectionString;
        static string logLevel = ConfigurationManager.AppSettings.Get("loglevel").ToString();

        static ErrorLog el = new ErrorLog();

        static void Main(string[] args) {

            try {

                // Sync TABELLEPROGRESS
                string stmt = @"SELECT * FROM XXX.PUB.TABELLEPROGRESS";
                int cnt0 = bulkSelect("TABELLEPROGRESS", stmt, PROConn);

                el.LogMessageToFile("========== Import Ende ==========");
                el.LogMessageToFile("== Anzahl TABELLEPROGRESS: " + cnt0);
                el.LogMessageToFile("=================================");

            } catch (Exception ex) {
                el.LogMessageToFile("== SYSERROR ReaderClass Verbindungsaufbau fehlgeschlagen: " + ex);
            }
        }

        public static int bulkSelect(string tableName, string command, string db) {
            WriterClass wc = new WriterClass();
            OdbcConnection conn = new OdbcConnection(db);

            try {
                conn.Open();
                OdbcCommand cmd = conn.CreateCommand();
                cmd.CommandText = command;
                OdbcDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                DataTable dtSchema = dr.GetSchemaTable();
                DataTable dt = new DataTable();

                List<DataColumn> listCols = new List<DataColumn>();
                if (dtSchema != null) {
                    foreach (DataRow drow in dtSchema.Rows) {
                        string columnName = System.Convert.ToString(drow["ColumnName"]);
                        DataColumn column = new DataColumn(columnName, (Type)(drow["DataType"]));
                        column.Unique = (bool)drow["IsUnique"];
                        column.AllowDBNull = (bool)drow["AllowDBNull"];
                        column.AutoIncrement = (bool)drow["IsAutoIncrement"];
                        listCols.Add(column);
                        dt.Columns.Add(column);
                    }
                }
                while (dr.Read()) {
                    DataRow dataRow = dt.NewRow();
                    for (int i = 0; i < listCols.Count; i++) {
                        dataRow[((DataColumn)listCols[i])] = dr[i];
                    }
                    dt.Rows.Add(dataRow);
                }
                dr.Close();
                wc.BulkInsertiSert(tableName, dt);
                return dt.Select().Length;

            } catch (OdbcException ex) {
                el.LogMessageToFile("== SYSERROR ODBC Fehler: " + ex.Message);
                return -1;
            } catch (Exception ex) {
                el.LogMessageToFile("== SYSERROR ReaderClass Fehler: " + tableName + ' ' + ex);
                return -1;
            } finally {
                conn.Close();
            }
        }
    }
}
18.05.2006 - 11:58 Uhr

wie kann ich denn eine endlosschleife erzeugen?

das ist mein hauptproblem 🙁

15.05.2006 - 14:33 Uhr

das heissst, ich mache einfach z.b. 2 threads, wobei einer eben auf das beenden wartet. mein problem ist nur, das programm muss unendlich lang laufen 🙂

also als dienst auf einem server.
da sollte die sleeptime auch unendlich lang sein...
gibt es so eine möglichkeit?

15.05.2006 - 09:30 Uhr

spät aber doch der php code 🙂

[php]
$i = 0;
$j = 0;
while($i < 1){
echo "warte...";
while($socket = socket_create(AF_INET, SOCK_STREAM, 0)){
error_reporting (E_ALL);
set_time_limit(0);
$port = 5000;
$host = "192.168.0.3";

do{
if((@socket_connect($socket, $host, $port)) < 0){
break;
}
$start = time();
$timeout = 5;
while($j < 1){
do{
$j++;
}while($start + $timeout > time());
send_ls();
socket_write($socket, $msg, strlen($msg));
break 2;
}
do {
if(false === ($buf = @socket_read($socket, 1024))){
break 2;
}
if(!$buf = trim($buf)) {
continue;
}

	verarbeiten(); //hier wird eine funktion für das verarbeiten der daten aufgerufen...  
	  
	}	  
break;	  
}while(true);  
} while(true);  

socket_close($socket);
}
}
[/php]

11.05.2006 - 13:27 Uhr

ich werde den code am abend posten. habe derzeit keinen zugriff, bin unterwegs...

das mit dem client hab ich falsch erklärt...
ich meinte damit, dass der client in einer schleife versucht, sich zu einem server zu verbinden. sobald dies gelingt, steht der server ja... wenn der server wieder wegfällt, soll der client wieder in diese schleife fallen...

10.05.2006 - 21:22 Uhr

hallo norman_timo,

kann es folgendermassen funktionieren❔

  1. der client horcht den port 1234 ab.
  2. der server verbindet sich und beginnt eine verbindung zu diesem client.
  3. der server oder der client beendnen die verbindung.
  4. der client fällt wieder in die schleife und wartet auf eine zustandegekommene verbindung. also kommt der client wieder zu punkt 1.

mit php habe ich diese variante bereits hinbekommen. nur würde ich dieses problem gerne mit c# lösen 🙁

10.05.2006 - 07:22 Uhr

hallo,

weiss denn niemand rat? ich bin am verzweifeln 🙁

lg

04.05.2006 - 11:53 Uhr

hallo leute.
ich kämpfe mich gerade mit sockets ab und versuche, einen socket client so hinzubekommen, dass er in einer endlosschleife läuft.

das heisst. wenn der server verfügbar ist, soll sich tcpclient verbinden. wenn der server weg ist, soll der socket warten. wenn der server da ist, soll der client sich beim startt verbinden...

ich habe es geschafft, einen client zum server zu verbinden - jedoch beendet er sich nach datenübertragung.

ist die endlosschleife mit while möglich? nur wie setze ich diese an, damit keine konflikte entstehen...

ein weiteres problem welches ich habe ist - ich möchte den client jederzeit per tastendruck beenden können. benötige ich dazu threading oder ist das auch so möglich?

in der hoffnung auf hilfe....

03.05.2006 - 14:58 Uhr

hallo norman_timo,

vielen dank für deine ausführung. jetzt weiss ich endlich wie ich an die sache rangehen muss... werde mich gleich darauf stürzen. ich versuche so weit als möglich zu kommen und werde im notfall wieder hier im forum anklopfen 🙂

danke nochmal,

lg schnurzli

03.05.2006 - 13:07 Uhr

vielen dank.

kann ich denn remoting dazu verwenden, wenn ich 5 rechner habe ->

ein rechner stellt eine socket verbindung zu einer kommunikationsschnittstelle her. dieser rechner kommuniziert dann mit den 4 anderen rechneren je nach erhalt von daten mit einem der 4 anderen rechner per remoting?

03.05.2006 - 09:18 Uhr

hallo,

vielen dank für die erklärung.

somit werde ich mich auf sockets konzentrieren. hab das falsch verstanden. hab wohl nicht ganz zuverlässige links im internet zum thema remoting gefunden.

gibt es denn ein gutes tutorial, welches den datenaustausch über sockets in c# gut erklärt?

02.05.2006 - 17:29 Uhr

ich dachte mir, dass remoting ähnlich den sockets funktioniert. möchte, dass in späterer folge 2 applikationen auf 2 verschiedenen rechnern daten austauschen. oder verwendet man dafür nicht auch remoting?

ausserdem habe ich ja auch einen port angegeben...

02.05.2006 - 17:08 Uhr

hallo norman_timo,

vielen dank für deine antwort.

ich habe bereits eine remoting verbindung aufbauen können.
ich hab mich per telnet an einen remoting "server" verbunden.

mein problem ist jetzt das verständnis, daten zu empfangen.
ich hatte vor ein paar tagen dasselbe problem mit einer rs232 verbindung. da konnte ich es über ein delegate lösen. ist dies bei remoting auch möcglich? doch wie würde ich dann auf das empfangene zugreifen? wie kann ich zum beispiel ein einen text in telnet eingeben und in der console ausgeben? einfach mit einem System.Runtime.Remoting.ReadTo("\n"); ?

ich entschuldige mein unwissen. mein problem bei den tutorials ist, dass zwar das remoting behandelt wird aber eben z.b. nicht der empfang und das senden von daten. zumindest habe ich es nicht verstanden. 🙁

02.05.2006 - 15:17 Uhr

hallo,

ich suche bereits verzweifelt ein tutorial, codefragmente, wo remoting unter .net2 behandelt wird. weiss da jemand einen guten link? ich konnte biseher nur .net1 - codebeispiele finden...

in der hoffnung auf hilfe...

mfg

13.04.2006 - 12:49 Uhr

danke.

das habe ich bereits geschafft. jetzt wird mir der fehler ausgegeben.

ich möchte aber einfach nur die zahl auslesen und von 'A' und seiner fehlermeldung nichts mitbekommen...

13.04.2006 - 12:09 Uhr

hallo.

ich habe einen string per rs232 empfangen. diesen zerlege ich dann in teile:

string zerleg = recv.Substring(9, 8);

wenn ich jetzt eine karte über den leser an der rs232 schnittstelle ziehe und dort halte passt es. der gewünschte string wird ausgegeben. doch wenn ich die karte wegneheme, sendet der leser noch ein "A" an mein script und löst somit eine exception(ArgumentOutOfRange) aus, da position 9 mit 8 zeichen länge nicht mehr da ist...

wie kann ich dieses "A" verhindern. ich möchte es ohnehin nicht angezeigt haben, möchte den port aber noch offen halten, damit ich weitere karten über den leser ziehen kann.

weiss jemand rat?

vielen dank schon mal...

13.04.2006 - 10:47 Uhr

habs jetzt hinbekommen. es funkt doch 🙂
mit readto... hatte ich schon mal probiert aber mit \n.
funktioniert anscheinend aber nur mit \r...


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace rs232
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            serialPort1.Open();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            Close();
        }
        
        delegate void MessageDataDelegate(string data);
        private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            MessageDataDelegate dlgte = new MessageDataDelegate(MessageData);
            string recvData = serialPort1.ReadTo("\r");
            this.Invoke(dlgte, new object[] { recvData });
        }
        private void MessageData(string data)
        {
            label1.Text = data;
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }
    }
}
10.04.2006 - 11:07 Uhr

hallo,

habe jetzt das ondatareceived event eingebaut. bemerkte, dass ich wie in vb.net ein delegate benötige... zumindest funktioniert es so teilweise...

in meinem form.cs rufe ich das wie folgt auf:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace rs232
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            serialPort1.Open();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            Close();
        }
        
        delegate void MessageDataDelegate(string data);
        private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            MessageDataDelegate dlgte = new MessageDataDelegate(MessageData);
            string recvData = serialPort1.ReadExisting();
            this.Invoke(dlgte, new object[] { recvData });
        }
        private void MessageData(string data)
        {
            textBox1.Text = data;
        }
    }
}

jetzt werden aber nur noch die letzten 6 zeichen des strings in der textbox ausgegeben. laut port mon werden sie immer zu 8 zeichen großen teilen eingelesen. ds heisst, dass die textbox sehr wohl alle ausgibt aber eben nur nacheinander...

wie schafft man es, dass man den string als gesamtes ausliest und in der textbox ausgibt?

meine idee wäre eben, dass ich anstelle von readexisting mit readline arebeite und dann auf ein ende warte.... das funkr aber so nicht wie ich es probiert habe...

07.04.2006 - 14:45 Uhr

wo finde ich ausreichend informationen, um rs232 unter .net2 ausführen zu können? gibt es da eine gute empfehlung?

lg

07.04.2006 - 14:02 Uhr

🙁 das ist gemein, aber ich verstehs natürlich. anders lerne ich nur das abschreiben des codes, was ncith sehr förderlich wäre 🙂 ich werde versuchen, ein "event einzuhängen"

07.04.2006 - 13:43 Uhr

springt leider nicht bis dort hin. ich glaube mir fehlt die verbindung zu ondatareceived...

07.04.2006 - 11:34 Uhr

@svenson: habe es bereits getestet. beim ht kommt die konfiguration einmal und dann wird bei auflegen der karte ein string ausgelesen... bei dem script kommt die konf mehrmals und bei auflegen der karte erscheint nur das bereits erwähnte SERIAL_WAIT_ON_MASK....

@martinh: wie setze ich das rts im script? habe versucht RTSEnable auf true zu setzen, doch kein erfolg....

kann es sein, dass ich den read irgendwie mit einem write anstossen muss?

mein code:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace rs232
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            serialPort1.Open();
        }
        private void Form1_Load(object sender, EventArgs e)
        {     
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Close();
        }
        private void serialPort1_onDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            textBox1.Text = serialPort1.ReadLine();
            textBox1.Text = serialPort1.ReadTo("\n");
        }
    }
}

ja und das steht in der designer.cs des forms:


 this.serialPort1 = new System.IO.Ports.SerialPort(this.components);
            // 
            // serialPort1
            // 
            this.serialPort1.DataBits = 7;
            this.serialPort1.Parity = System.IO.Ports.Parity.Even;
            this.serialPort1.ReadBufferSize = 1024;
            this.serialPort1.RtsEnable = true;

07.04.2006 - 10:46 Uhr

was auch komisch ist, dass die konfigurationsdaten 3 mal übertragen werden...

SERIAL_WAIT_ON_MASK sollte ja nur einmal erscheinen, es erscheint aber gleich 5mal wenn ich die karte auf den leser lege und 4 mal wenn ich die karte wegnehme...

07.04.2006 - 10:15 Uhr

hallo,

habe portmon gestartet und dann auch etwas eingelesen...

die ausgabe funktioniert noch nicht in dem form...

laut dem portmon werden die daten alle richtig übertragen... auch die einstellungen, 9600,7, even, 1...

ich weiss nicht mehr weiter...
ich habe versucht, ondatareceived zu inkludieren, jedoch wird der code nicht angenommen...

hier das logfile:


0	0.00006509	rs232.vshost.ex	IRP_MJ_CREATE	Serial0	SUCCESS	Options: Open 	
1	0.00000363	rs232.vshost.ex	IOCTL_SERIAL_GET_PROPERTIES	Serial0	SUCCESS		
2	0.00000475	rs232.vshost.ex	IOCTL_SERIAL_GET_MODEMSTATUS	Serial0	SUCCESS		
3	0.00000307	rs232.vshost.ex	IOCTL_SERIAL_GET_BAUD_RATE	Serial0	SUCCESS		
4	0.00000251	rs232.vshost.ex	IOCTL_SERIAL_GET_LINE_CONTROL	Serial0	SUCCESS		
5	0.00000279	rs232.vshost.ex	IOCTL_SERIAL_GET_CHARS	Serial0	SUCCESS		
6	0.00000251	rs232.vshost.ex	IOCTL_SERIAL_GET_HANDFLOW	Serial0	SUCCESS		
7	0.00000251	rs232.vshost.ex	IOCTL_SERIAL_GET_BAUD_RATE	Serial0	SUCCESS		
8	0.00000251	rs232.vshost.ex	IOCTL_SERIAL_GET_LINE_CONTROL	Serial0	SUCCESS		
9	0.00000251	rs232.vshost.ex	IOCTL_SERIAL_GET_CHARS	Serial0	SUCCESS		
10	0.00000251	rs232.vshost.ex	IOCTL_SERIAL_GET_HANDFLOW	Serial0	SUCCESS		
11	0.00001201	rs232.vshost.ex	IOCTL_SERIAL_SET_BAUD_RATE	Serial0	SUCCESS	Rate: 9600	
12	0.00000643	rs232.vshost.ex	IOCTL_SERIAL_SET_RTS	Serial0	SUCCESS		
13	0.00000670	rs232.vshost.ex	IOCTL_SERIAL_CLR_DTR	Serial0	SUCCESS		
14	0.00000475	rs232.vshost.ex	IOCTL_SERIAL_SET_LINE_CONTROL	Serial0	SUCCESS	StopBits: 1 Parity: EVEN WordLength: 7	
15	0.00000279	rs232.vshost.ex	IOCTL_SERIAL_SET_CHAR	Serial0	SUCCESS	EOF:1a ERR:3f BRK:3f EVT:1a XON:11 XOFF:13	
16	0.00000838	rs232.vshost.ex	IOCTL_SERIAL_SET_HANDFLOW	Serial0	SUCCESS	Shake:0 Replace:44 XonLimit:1024 XoffLimit:1024	
17	0.00000251	rs232.vshost.ex	IOCTL_SERIAL_GET_BAUD_RATE	Serial0	SUCCESS		
18	0.00000251	rs232.vshost.ex	IOCTL_SERIAL_GET_LINE_CONTROL	Serial0	SUCCESS		
19	0.00000251	rs232.vshost.ex	IOCTL_SERIAL_GET_CHARS	Serial0	SUCCESS		
20	0.00000251	rs232.vshost.ex	IOCTL_SERIAL_GET_HANDFLOW	Serial0	SUCCESS		
21	0.00001201	rs232.vshost.ex	IOCTL_SERIAL_SET_BAUD_RATE	Serial0	SUCCESS	Rate: 9600	
22	0.00000643	rs232.vshost.ex	IOCTL_SERIAL_SET_RTS	Serial0	SUCCESS		
23	0.00000643	rs232.vshost.ex	IOCTL_SERIAL_CLR_DTR	Serial0	SUCCESS		
24	0.00000475	rs232.vshost.ex	IOCTL_SERIAL_SET_LINE_CONTROL	Serial0	SUCCESS	StopBits: 1 Parity: EVEN WordLength: 7	
25	0.00000279	rs232.vshost.ex	IOCTL_SERIAL_SET_CHAR	Serial0	SUCCESS	EOF:1a ERR:3f BRK:3f EVT:1a XON:11 XOFF:13	
26	0.00000475	rs232.vshost.ex	IOCTL_SERIAL_SET_HANDFLOW	Serial0	SUCCESS	Shake:0 Replace:44 XonLimit:1024 XoffLimit:1024	
27	0.00000670	rs232.vshost.ex	IOCTL_SERIAL_CLR_DTR	Serial0	SUCCESS		
28	0.00000251	rs232.vshost.ex	IOCTL_SERIAL_GET_BAUD_RATE	Serial0	SUCCESS		
29	0.00000251	rs232.vshost.ex	IOCTL_SERIAL_GET_LINE_CONTROL	Serial0	SUCCESS		
30	0.00000223	rs232.vshost.ex	IOCTL_SERIAL_GET_CHARS	Serial0	SUCCESS		
31	0.00000251	rs232.vshost.ex	IOCTL_SERIAL_GET_HANDFLOW	Serial0	SUCCESS		
32	0.00001201	rs232.vshost.ex	IOCTL_SERIAL_SET_BAUD_RATE	Serial0	SUCCESS	Rate: 9600	
33	0.00000670	rs232.vshost.ex	IOCTL_SERIAL_CLR_RTS	Serial0	SUCCESS		
34	0.00000643	rs232.vshost.ex	IOCTL_SERIAL_CLR_DTR	Serial0	SUCCESS		
35	0.00000475	rs232.vshost.ex	IOCTL_SERIAL_SET_LINE_CONTROL	Serial0	SUCCESS	StopBits: 1 Parity: EVEN WordLength: 7	
36	0.00000279	rs232.vshost.ex	IOCTL_SERIAL_SET_CHAR	Serial0	SUCCESS	EOF:1a ERR:3f BRK:3f EVT:1a XON:11 XOFF:13	
37	0.00000838	rs232.vshost.ex	IOCTL_SERIAL_SET_HANDFLOW	Serial0	SUCCESS	Shake:0 Replace:4 XonLimit:1024 XoffLimit:1024	
38	0.00000643	rs232.vshost.ex	IOCTL_SERIAL_CLR_RTS	Serial0	SUCCESS		
39	0.00000279	rs232.vshost.ex	IOCTL_SERIAL_SET_TIMEOUTS	Serial0	SUCCESS	RI:-1 RM:-1 RC:-2 WM:0 WC:0	
40	0.00000419	rs232.vshost.ex	IOCTL_SERIAL_SET_WAIT_MASK	Serial0	SUCCESS	Mask: RXCHAR RXFLAG CTS DSR RLSD BRK ERR RING 	
41	0.00000307	rs232.vshost.ex	IOCTL_SERIAL_SET_QUEUE_SIZE	Serial0	SUCCESS	InSize: 1024 OutSize: 2048	
42	41.18181473	rs232.vshost.ex	IOCTL_SERIAL_WAIT_ON_MASK	Serial0	SUCCESS		
43	0.00000838	rs232.vshost.ex	IOCTL_SERIAL_WAIT_ON_MASK	Serial0	SUCCESS		
44	0.00753979	rs232.vshost.ex	IOCTL_SERIAL_WAIT_ON_MASK	Serial0	SUCCESS		
45	0.00000866	rs232.vshost.ex	IOCTL_SERIAL_WAIT_ON_MASK	Serial0	SUCCESS		
46	0.00799180	rs232.vshost.ex	IOCTL_SERIAL_WAIT_ON_MASK	Serial0	SUCCESS		
47	0.00000838	rs232.vshost.ex	IOCTL_SERIAL_WAIT_ON_MASK	Serial0	SUCCESS		
48	1.91058249	rs232.vshost.ex	IOCTL_SERIAL_WAIT_ON_MASK	Serial0	SUCCESS		
49	0.00000950	rs232.vshost.ex	IOCTL_SERIAL_WAIT_ON_MASK	Serial0	SUCCESS		
50	0.00000000	rs232.vshost.ex	IOCTL_SERIAL_WAIT_ON_MASK	Serial0		
06.04.2006 - 10:48 Uhr

wie mache ich es denn, dass ich einfach ab dem klick oder gleich bei programmstart an com1 horche? sobald etwas ausgelesen wird, gibt er es mir dann in einem label oder textfeld aus...

kann man dazu die timer_tick komponente verwenden?

readline wir im button_klick event ausgeführt...

ondatareceived werde ich testen. wird das auch als private void ausgeführt?

06.04.2006 - 09:32 Uhr

es endet mit einem Enter.

Habs so Probiert:

SerialPort1.ReadTo((Char)13);

doch irgendwie hängt das form sobald ich auf den button klicke...

05.04.2006 - 15:09 Uhr

im hyperterminal funktioniert es problemlos. bei auflegen der karte erscheinen die ausgelesenen zeichen...

es sind immer exakt 24 zeichen, die ausgelesen werden - zahlen und buchstaben...

nach dem klick auf den button hängt das programm... kann es sein, dass ich auch noch eine art timeout definieren muss?

05.04.2006 - 14:06 Uhr

ich möchte auf jeden fall keine fertige lösung. mein problem ist nur, dass ich mich mit der vielzahl an lösungen überfordert sehe. teilweise funktionieren sie auch wiederum nicht unter vc# express....

gibt es denn eine solides buch, url oder ähnliches, das unter anderem sockets, die verwendung von system.io und ähnliches unter verwendung von .net2 erklärt?

in der hoffnung, hilfe zu finden....

05.04.2006 - 11:35 Uhr

hallo,

habe ein problem mit meiner seriellen schnittstelle.

diese hat folgende eckdaten:
Kartenleser
Port: COM1
Baud: 9600
Parity: Even
Stopbit: 1

Habe ein C# Projekt(.Net2, VC# Express 2005 ) erstellt, System.IO.Ports eingefügt.

dann habe ich aus den Komponeneten ein Serialport1 in mein Form gezogen.
Dort habe ich die obigen Einstellungen getätigt.

Nun stehe ich ziemlich an, es gibt zwar tausende möglichekeiten und Varianten im Inet, ich verstehe aber nicht ganz, wann ich welche Möglichkeit in Erwägung ziehen kann...

Ich möchte das Programm ausführen und dann per Klick auf einen Button aufgefordert werden, um eine Karte darüberzuziehen. Das soll mit einem Timeout von 10 Sekunden versehen sein. Danach ausgabe der eingelesen Daten in einem Label...

Mein Ansatz:

ich habe in der public form

serialPort1.Open();

eingegeben und auf dem Button, mit dem ich das ereignis auslöse:

label1.Text = serialPort1.ReadLine();

. Weiss da jemand Rat?
Ich bin schon relativ verzweifelt...

Vielen Dank schon im voraus,
LG
Richi