PDA

View Full Version : Leggere dati da porta COM


Alexander_22
23-11-2007, 16:14
Ciao ragazzi,
ho un problema veramente grosso per uno come me che fa il sistemista Hardware da una vita ma che non sa praticamente nulla di programmazione. Tuttavia voglio cimentarmi in questa avventura, ma ho bisogno del vostro aiuto.
Vengo al dunque.
Ho bisogno di mettere sù in Windows un'applicazione, che acquisisca i dati che gli inputo con un lettore di codici a barre che lavora su una COM e li vada a scrivere in un file (anche di testo).
So che probabilmente sarebbe più semplice far funzionare questo lettore con emulazione tastiera ma in questo caso avrei il vincolo di tenere una finestra sempre aperta e con il cursore nella posizione corretta.

Spero che ci sia qualcuno che abbia già fatto una cosa del genere.

Vi ringrazio.

RaouL_BennetH
23-11-2007, 16:51
Se mi dai qualche giorno, diciamo fino a mercoledi, posso provare a fartelo io.

RaouL.

Alexander_22
23-11-2007, 17:25
Beh non sono con l'acqua alla gola quindi potrei anche aspettare ma il problema non è questo, è che non voglio che ti prenda tanto fastidio.

Grazie di cuore comunque.

RaouL_BennetH
26-11-2007, 12:12
Ciao :)

Ho buttato giù una prima bozza. Dovresti scaricare (se usi windows) il framework .net 2.0 (il file si chiama dotnetfx.exe) e puoi trovarlo qui:

http://www.microsoft.com/downloads/details.aspx?displaylang=it&FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5

Una volta che lo hai installato, se in om mi dai la mail ti mando il primo eseguibile.

Questo perchè lo sto facendo in C#
Nel frattempo posto qui il codice sorgente.

Premessa: Con questo sorgente ho cercato solo di:

1) elencare le porte disponibili che hai nel sistema
2) testare se la comunicazione con la porta funziona

Mi scuso in anticipo con i "veri programmatori" per gli eventuali orrori del codice.


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

namespace SerialTest
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}

private void MainForm_Load(object sender, EventArgs e)
{
foreach(string s in SerialPort.GetPortName())
{
comboPortList.Items.Add(s);
//sul form c'è un combobox che viene popolato
//automaticamente con la lista delle porte
// disponibili
}
}

private void buttonTest_Click(object sender, EventArgs e)
{
if(comboPortList.Text.Length != 0)
{
try
{
SerialPort mySerialPort = new SerialPort(comboPortList.Text, 9600, Parity.None, 8, StopBits.One);

port.Datareceived += new SerialDataReceivedEventHandler(ricezioneDati);

richText.Text = mySerialPort.ReadExisting();
mySerialPort.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}

else
{
MessageBox.Show("E' neccessario scegliere una porta");
comboPortList.Focus();
}
}


private void ricezioneDati(object sender, SerialDataReceivedEventArgs e)
{
try
{
string s = e.ToString();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
}
}