Accediendo al Puerto Serie en Linux desde Freepascal, C++ y C#
2 participantes
Página 1 de 1.
Accediendo al Puerto Serie en Linux desde Freepascal, C++ y C#
Freepascal o Lazarus
Para manejar el puerto serie desde freepascal nos descargaremos la librería synaser que podemos encontrar en http://www.synapse.ararat.cz/doku.php/download, los archivos que necesitamos son el synafpc.pas, synaser.pas y synautil.pas, los cuales colocaremos en la carpeta de nuestro proyecto.
compilación
uso
C y C++
Para C y C++ descargamos las librerías que se llama lnxComm que la podemos descargar de http://zsoluciones.com/datos/?page_id=11 y copiamos la carpeta com a nuestro proyecto.
Compilación
C# (Mono)
Compilación
Para manejar el puerto serie desde freepascal nos descargaremos la librería synaser que podemos encontrar en http://www.synapse.ararat.cz/doku.php/download, los archivos que necesitamos son el synafpc.pas, synaser.pas y synautil.pas, los cuales colocaremos en la carpeta de nuestro proyecto.
- Código:
{$MODE DELPHI}
Program ser;
uses
synaser, sysutils;
Type
Arreglo= array[0..1] of string;
Arreglo2= array[0..1] of byte;
var
ser:TBlockSerial;
cad:Arreglo;
cad2:Arreglo2;
begin
cad[0]:=ParamStr(2);
cad[1]:=ParamStr(3);
Writeln(cad[0],' ',cad[1]);
ser:=TBlockserial.Create;
try
ser.RaiseExcept:=True;
ser.Connect(ParamStr(1));
ser.Config(115200,8,'N',1,false,false);
ser.SendString(cad[0]);
ser.SendString(cad[1]);
cad2[0]:=ser.RecvByte(10000);
cad2[1]:=ser.RecvByte(10000);
Writeln('Datos recibidos ',char(cad2[0]),' y ',char(cad2[1]));
finally
ser.Free;
end;
end.
compilación
- Código:
ppc386 ser.pas (si estamos en un sistema de 64 bits compilaremos con ppcx64)
uso
- Código:
./ser /dev/ttyUSB0 4 5
4 5
Datos recibidos 4 y 5
C y C++
Para C y C++ descargamos las librerías que se llama lnxComm que la podemos descargar de http://zsoluciones.com/datos/?page_id=11 y copiamos la carpeta com a nuestro proyecto.
- Código:
#define __LINUX_COM__
#include "com/serial.h"
#include
using namespace std;
int main(int argc, char* argv[])
{
HANDLE fd;
DCB OldConf;
int n;
char cad[2];
char cad2[2];
cad[0]=*argv[2];
cad[1]=*argv[3];
cout<<"Abriendo puerto: "<<<" para enviar "<<<" "<<
fd=Open_Port(argv[1]); // Abre el puerto serie
OldConf=Get_Configure_Port(fd); // guardo la configuracion del puerto
Configure_Port(fd,B115200,"8N1"); // Configuro el puerto serie
IO_Blocking(fd,FALSE); // Seleccionamos lectura no bloqueante
n=Write_Port(fd,cad,2); // Escribo en el puerto serie 2 bytes
while(Kbhit_Port(fd)<2); // Espero a leer hasta que se tengan
// 2 bytes en el buffer de entrada
n=Read_Port(fd,cad2,2); // Leo el puerto serie
cout<<<" "<<
Set_Configure_Port(fd,OldConf); // Restituyo la antigua configuracion
// del puerto
Close_Port(fd); // Se cierra el puerto serie
return 0;
}
Compilación
- Código:
g++ -o ser ser.cpp
- Código:
./ser /dev/ttyUSB0 a a
Abriendo puerto: /dev/ttyUSB0 para enviar a a
open_port:fd=3: Abierto puerto /dev/ttyUSB0
a a
C# (Mono)
- Código:
using System;
using System.IO.Ports;
public class SerialPortTest
{
public static void Main(string[] args)
{
SerialPortTest myTest = new SerialPortTest();
Console.WriteLine("Puerto: {0}, Datos {1}",args[0],args[1]);
myTest.Test(args[0],args[1]);
}
private SerialPort mySerial;
// Constructor
public SerialPortTest()
{
}
public void Test(string port, string data)
{
if (mySerial != null)
if (mySerial.IsOpen)
mySerial.Close();
mySerial = new SerialPort(port, 115200,Parity.None, 8, StopBits.One);
mySerial.Open();
mySerial.ReadTimeout = 10000;
SendData(data);
ReadData();
}
public string ReadData()
{
byte tmpByte;
string rxString = "";
tmpByte = (byte) mySerial.ReadByte();
Console.Write("Datos recibidos: {0} y ",(char)tmpByte);
tmpByte = (byte) mySerial.ReadByte();
Console.WriteLine("{0}",(char)tmpByte);
return rxString;
}
public bool SendData(string Data)
{
mySerial.Write(Data);
return true;
}
}
Compilación
- Código:
gmcs ser.cs
- Código:
./ser.exe /dev/ttyUSB0 2c
Puerto: /dev/ttyUSB0, Datos 2c
Datos recibidos: 2 y c
tsk- Participante
- Mensajes : 11
Fecha de inscripción : 02/06/2009
Re: Accediendo al Puerto Serie en Linux desde Freepascal, C++ y C#
Muy buena info .
Precisamente estos días he estado haciendo pruebas de comunicación con un PIC18f2550 usando un puerto COM "emulado" vía USB . Sobre C#, en Windows estoy usando el componente SerialPort (para los tres: VB.NET, C++ y C#), lamentablemente en mono aún no está completo pero funciona , el ejemplo supongo lo tomaste de aquí:
http://mono-project.com/HowToSystemIOPorts
Gracias por el dato.
Precisamente estos días he estado haciendo pruebas de comunicación con un PIC18f2550 usando un puerto COM "emulado" vía USB . Sobre C#, en Windows estoy usando el componente SerialPort (para los tres: VB.NET, C++ y C#), lamentablemente en mono aún no está completo pero funciona , el ejemplo supongo lo tomaste de aquí:
http://mono-project.com/HowToSystemIOPorts
Gracias por el dato.
Re: Accediendo al Puerto Serie en Linux desde Freepascal, C++ y C#
Si el ejemplo lo tomé de esa página, sólo le quité lo del while, porque nunca iba a enviar un byte de fin de regreso, entonces estaba de más tenerlo. Y le agregé lo de los parámetros en la línea de comando.
Después voy a probar también con el vbnc, que es el compilador de visual basic .net pero de Mono.
Después voy a probar también con el vbnc, que es el compilador de visual basic .net pero de Mono.
tsk- Participante
- Mensajes : 11
Fecha de inscripción : 02/06/2009
Temas similares
» MINICOM, puerto serie en linux: manual en español por Meta.
» GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
» Otro de GAMBAS con el puerto serie
» QextSerialPort: Controlando el puerto Serie con Qt
» no consigo conectar con el puerto serie de mi PC
» GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
» Otro de GAMBAS con el puerto serie
» QextSerialPort: Controlando el puerto Serie con Qt
» no consigo conectar con el puerto serie de mi PC
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.