myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE
   » Gadget für Windows
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin

Ressourcen
» guide to C#
» openbook: Visual C#
» openbook: OO
» MSDN Webcasts
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » Serielle Schnittstelle C# und C
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Serielle Schnittstelle C# und C

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
fsonur fsonur ist männlich
myCSharp.de-Mitglied

Dabei seit: 08.05.2014
Beiträge: 8


fsonur ist offline

Serielle Schnittstelle C# und C

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Zusammen,

Muss eine Serielle Schnittstelle in C# entwickeln. Den Rahmen habe ich mit Forms schon entwickelt.

Folgendes Problem:

Ich bin noch sehr neu im C# Bereich und habe bisher keine serielle Schnittstelle Programmiert.

Ich muss aus der Schnittstelle Daten auslesen und eingeben. Das Gegengerät wrude in C Programmiert.

Der C Code ist im Anhang mit dabei. Zu diesem Code muss ich jetzt eine passende Software Programmieren (C#) um die Daten einlesen zu können und Befehel abzuschicken.

Wäre für jede Hilft sehr dankbar!

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
char COM_CHECK_SINGLE (char* befbuf, short len, unsigned short *deviceid, unsigned short *codeid, unsigned short *channelid, unsigned short *wertid)
	{   //0    1         7     13        19      25
		//<DIR>,<KENNUNG>,<CODE>,<CHANNEL>,<WERT><ETX>
		//Die Zahlen sind grundsätzlich 5-stellig (unsigned short)
		
		// Generelle Befehlslänge OK ?
		if (len != COM_LN_SINGLE) return (0);
		
		// Erster Befehlscheck: Größe und Rahmen soweit OK ?
		if  ( (befbuf[1]!= ',')||
		      (befbuf[7]!= ',')||
			  (befbuf[13]!= ',')||
			  (befbuf[19]!= ',')||
			  (befbuf[25]!= '#')||
			  ((befbuf[0]!= 'S') && (befbuf[0]!= 'R')))
			  return (0);  // nein, so nicht, Framefehler
		 
		 // Ok, dann die Devicekennung extrahieren
		 memset(&buf[0],'0',sizeof(buf));
		 memcpy(&buf[0],&befbuf[2],sizeof(char)*5);
		 buf[5]= '\n';
		 *deviceid = atoi( &buf[0]);
		 
		 // Ok, dann die Befehlskennung extrahieren
		 memset(&buf[0],'0',sizeof(buf));
		 memcpy(&buf[0],&befbuf[8],sizeof(char)*5);
		 buf[5]= '\n';
		 *codeid = atoi( &buf[0]);
		  
		 // Ok, dann die Kanalkennung extrahieren
		 memset(&buf[0],'0',sizeof(buf));
		 memcpy(&buf[0],&befbuf[14],sizeof(char)*5);
		 buf[5]= '\n';
		 *channelid = atoi( &buf[0]);
		 
		  // Ok, dann die Befehlswertkennung extrahieren
		  memset(&buf[0],'0',sizeof(buf));
		  memcpy(&buf[0],&befbuf[20],sizeof(char)*5);
		  buf[5]= '\n';
		  *wertid = atoi( &buf[0]);
		
		// Rückgabe über die Parameterliste, wir sind fertig hier
		return (1);
	}



char COM_GET_SINGLE (char* befbuf, short len, char befid, unsigned short deviceid, unsigned short codeid,  unsigned short channelid, unsigned short wertid)
{   //0    1         7     13        19      25
	//<DIR>,<KENNUNG>,<CODE>,<CHANNEL>,<WERT><ETX>
	//Die Zahlen sind grundsätzlich 5-stellig (unsigned short)
	
	// Generelle Befehlslänge OK ?
	if (len != COM_LN_SINGLE) return (0);
	
	// Gültige Befehlskennung ?
	if ((befid != 'S') && (befid != 'R')) return (0);
	
	// ok, bauen wir zusammen
	befbuf[0] = befid;
	sprintf(&befbuf[1],",%05u,%05u,%05u,%05u#",deviceid,codeid,channelid,wertid);
	
	return (1);
	
}
04.03.2015 10:16 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
vbprogger vbprogger ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-1820.gif


Dabei seit: 16.01.2006
Beiträge: 1.672
Entwicklungsumgebung: Visual Studio 2012 Prof.
Herkunft: NRW/DE


vbprogger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

wie lautet deine Frage? Was hast du schon versucht? Woran bist du gescheitert? Bitte beachte  [Hinweis] Wie poste ich richtig? Punkt 1.1 + 4 + 4.2 und 6

Grüße
04.03.2015 10:25 Beiträge des Benutzers | zu Buddylist hinzufügen
fsonur fsonur ist männlich
myCSharp.de-Mitglied

Dabei seit: 08.05.2014
Beiträge: 8

Themenstarter Thema begonnen von fsonur

fsonur ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

hi,

mein Problem ist, dass nicht weiß wie ich anfangen soll um das zu realiseren.

Wäre sehr dankbar wenn ich Codebeispiele bekommen könnten wie das aussehen kann.

LG
onur
04.03.2015 10:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
vbprogger vbprogger ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-1820.gif


Dabei seit: 16.01.2006
Beiträge: 1.672
Entwicklungsumgebung: Visual Studio 2012 Prof.
Herkunft: NRW/DE


vbprogger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Google hilft dir gern dabei  C# get data from serial port. Der C-Code hilft dir dabei die empfangenen Daten auszuwerten.

Grüße
04.03.2015 10:36 Beiträge des Benutzers | zu Buddylist hinzufügen
fsonur fsonur ist männlich
myCSharp.de-Mitglied

Dabei seit: 08.05.2014
Beiträge: 8

Themenstarter Thema begonnen von fsonur

fsonur ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

soweit bin ich schon. Das ist mein Serialportterminal

Die kommunikation funktioniert leider nicht.

C#-Code:
namespace SerialPortTerminal
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        SerialPort serialPort; //Serialport den wir später verwenden - globale Deklaration
        delegate void InvokeLB(string Data);

        InvokeLB lbRecievedDelegate;

        private void label3_Click(object sender, EventArgs e)
        {

        }

        private void bCreateSP_Click(object sender, EventArgs e)
        {

            //Hier erstellen wir unseren Serialport und legen die Einstellungen fest
            serialPort = new SerialPort(cbPort.Text, Convert.ToInt32(cbBaudRate.Text), (Parity)Enum.Parse(typeof(Parity), cbParity.Text), Convert.ToInt16(cbDataBits.Text), (StopBits)Enum.Parse(typeof(StopBits), cbStopbits.Text));
            serialPort.Handshake = (Handshake)Enum.Parse(typeof(Handshake), cbHandshake.Text);
            serialPort.RtsEnable = Boolean.Parse(cbRtsEnable.Text);
            serialPort.DtrEnable = Boolean.Parse(cbDtrEnable.Text);

            if (!serialPort.IsOpen)
            {
                serialPort.Open(); //Serialport öffnen
            }
            lbRecievedDelegate = new InvokeLB(InvokeLBRecieved);
            serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); //DataRecieved Event abonnieren
        }

        void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string RecievedLine = " ";
            while (RecievedLine != "")
            {
               RecievedLine = serialPort.ReadLine();
               lbRecieved.Invoke(lbRecievedDelegate,new object[]{RecievedLine});
            }

        }
        void InvokeLBRecieved(string Data)
        {
            lbRecieved.Items.Add(Data);
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            //Hier befüllen wir die Options-ComboBoxen
            foreach (var item in SerialPort.GetPortNames())
            {
                cbPort.Items.Add(item);
            }
            cbPort.Text = cbPort.Items[0].ToString();

            foreach (var item in Enum.GetNames(typeof(Parity)))
            {
                cbParity.Items.Add(item);
            }
            cbParity.Text = cbParity.Items[0].ToString();

            foreach (var item in Enum.GetNames(typeof(StopBits)))
            {
               cbStopbits.Items.Add(item);
            }
            cbStopbits.Text = cbStopbits.Items[1].ToString();

            cbBaudRate.Items.Add("110");
            cbBaudRate.Items.Add("300");
            cbBaudRate.Items.Add("600");
            cbBaudRate.Items.Add("1200");
            cbBaudRate.Items.Add("2400");
            cbBaudRate.Items.Add("4800");
            cbBaudRate.Items.Add("9600");
            cbBaudRate.Items.Add("14400");
            cbBaudRate.Items.Add("19200");
            cbBaudRate.Items.Add("28800");
            cbBaudRate.Items.Add("38400");
            cbBaudRate.Items.Add("56000");
            cbBaudRate.Items.Add("57600");
            cbBaudRate.Items.Add("115200");
            cbBaudRate.Text = cbBaudRate.Items[6].ToString();

            cbDataBits.Items.Add("5");
            cbDataBits.Items.Add("6");
            cbDataBits.Items.Add("7");
            cbDataBits.Items.Add("8");
            cbDataBits.Items.Add("9");
            cbDataBits.Text = "8";


            foreach (var item in Enum.GetNames(typeof( Handshake)))
            {
                cbHandshake.Items.Add(item);
            }
            cbHandshake.Text = cbHandshake.Items[0].ToString();

            cbDtrEnable.Items.Add("True");
            cbDtrEnable.Items.Add("False");
            cbDtrEnable.Text = "False";

            cbRtsEnable.Items.Add("True");
            cbRtsEnable.Items.Add("False");
            cbRtsEnable.Text = "False";


        }

        private void bSendData_Click(object sender, EventArgs e)
        {

            //Hier werden die eingebenen Daten über die serielle Schnittstelle gesendet
            serialPort.WriteLine(tbDataToSend.Text);

            lbSent.Items.Add(tbDataToSend.Text);
            tbDataToSend.Clear();
            tbDataToSend.Focus();
        }

        private void bClearSent_Click(object sender, EventArgs e)
        {
            lbSent.Items.Clear();
        }

        private void bClearRecieved_Click(object sender, EventArgs e)
        {
            lbRecieved.Items.Clear();
        }

        private void cbHandshake_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}


mycsharp.de  Moderationshinweis von Coffeebean (04.03.2015 11:05):

Bitte benutze Code-Tags!  [Hinweis] Wie poste ich richtig? Punkt 6
 
04.03.2015 10:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
vbprogger vbprogger ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-1820.gif


Dabei seit: 16.01.2006
Beiträge: 1.672
Entwicklungsumgebung: Visual Studio 2012 Prof.
Herkunft: NRW/DE


vbprogger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von fsonur:
Die kommunikation funktioniert leider nicht.

Das ist leider keine Fehlerbeschreibung. Wenn du nicht weißt wo es hängt dann hilft dir der Debugger  [Artikel] Debugger: Wie verwende ich den von Visual Studio?

Bitte beachte  [Hinweis] Wie poste ich richtig? Punkt 6
04.03.2015 10:43 Beiträge des Benutzers | zu Buddylist hinzufügen
fsonur fsonur ist männlich
myCSharp.de-Mitglied

Dabei seit: 08.05.2014
Beiträge: 8

Themenstarter Thema begonnen von fsonur

fsonur ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Der Code an sich stimmt. Es gibt keine Fehlermeldung.

Das Problem ist wenn ich ein Zeichen Sende, bekomme ich keine Antwort.

Z.B. sollte ich eine Antowrt bekommen wenn ich ein * schicken. Aber leider bekomme ich keine Antwort. Das habe ich mit Kommunikation gemeint.

LG
onur
04.03.2015 10:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Lenny
myCSharp.de-Mitglied

Dabei seit: 05.01.2009
Beiträge: 94
Entwicklungsumgebung: VS2012 Ultimate


Lenny ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Also der Code funktioniert. Den habe ich nämlich vor einer halben Ewigkeit mal auf Roboternetz.de gepostet.
Dein Problem könnte eher darin liegen, dass du nämlich nicht verstanden hast was der Code macht
geschweige denn Diskussion dazu gelesen hast:
 http://www.roboternetz.de/community/thre...-auf-SerialPort

Dort wird nämlich z.B. erklärt, was man macht, wenn die Antwort kein "Newline" Zeichen enthält.

C#-Code:
string RecievedLine = " ";
            while (RecievedLine != "")
            {
               RecievedLine = serialPort.ReadLine();
               lbRecieved.Invoke(lbRecievedDelegate,new object[]{RecievedLine});
            }

Wenn deine Antwort eben kein "Newline" hat, dann wird er ewig an der Stelle hängen bleiben.
04.03.2015 11:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Stefan.Haegele Stefan.Haegele ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3068.jpg


Dabei seit: 13.03.2009
Beiträge: 291
Entwicklungsumgebung: Visual Studio 2010 Ultimat
Herkunft: Untermeitingen


Stefan.Haegele ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Sorry, aber sich Code runterladen ohne zu verstehen was er macht mag einfach sein, wird dich aber auf Dauer nicht weiterbringen! Du solltest auf jeden Fall versuchen zu verstehen was der Code macht... Ansonsten wirst du auch in 6 Monaten noch die gleichen Probleme haben!

Ist echt nicht böse gemeint - aber programmieren ist halt etwas mehr als nur Code runterzuladen.

Stefan

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Stefan.Haegele am 04.03.2015 11:48.

04.03.2015 11:47 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Joetempes Joetempes ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3309.jpg


Dabei seit: 29.03.2007
Beiträge: 885
Herkunft: Germany


Joetempes ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

05.03.2015 06:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 3 Jahre.
Der letzte Beitrag ist älter als 3 Jahre.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team. Alle Rechte vorbehalten. 21.01.2019 13:21