Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-07-2006
zugazua2001 zugazua2001 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Necochea
Posts: 237
Poder: 20
zugazua2001 Va por buen camino
Pasar de QBASIC A DELPHI

Hola amigos del foro, tengo que levantar la informacion que provee la balanza en mi computadora.
El codigo esta en qbasic. Les agradeceria si me pudieran dar una mano.

PROCESADOR DIGITAL DE PESO BC5400
TRANSMISION DE DATOS A COMPUTADORA

1 Cableado y especificaciones de transmisión:
Norma RS 232C
7 ---------------------- 5 GND Código ASCII
K3 2 ---------------------- 2 RxD COM Velocidad 9.600 baudios
3 ---------------------- 7 RTS (DB 9) Formato 1 start bit
7 data bits
BC 5400 Computadora 2 stop bits
(El cable se provee junto al indicador) Paridad impar

2 Transmisión a pedido:
La llave 1 de S1 debe ajustarse a la posición ON.
El mensaje transmitido será el siguiente:

LF , CR
"BRUTO xxxxxx kg" (xxxxxx : Peso indicado en el display del BC 5400)
LF , CR
"TARA 000000 kg"
LF , CR
"NETO xxxxxx kg"
LF , CR

Rutina de recepción de datos en lenguaje QBASIC:
OPEN "COM1:9600,O,7,2,CS,DS,CD" FOR INPUT AS #1
nn = 0
b$ = ""
cantidad = 0
inicio:
IF EOF(1) THEN GOTO Espera
A$ = INPUT$(1, 1)
b$ = b$ + A$
IF ASC(A$) = 13 THEN nn = nn + 1
IF nn < 4 THEN GOTO inicio
CLOSE 1
PRINT MID$(b$, 9, 6)
END
Espera:
cantidad = cantidad + 1
FOR esp = 1 TO 30000
IF EOF(1) = 0 THEN GOTO inicio
NEXT esp
IF cantidad = 3 THEN CLOSE 1: PRINT "0": END
GOTO inicio

NOTA: La instrucción OPEN "COM..., provoca que la línea RTS cambie de nivel lógico. Esto actúa como pedido de transmisión al cabezal, que enviará la información antes detallada.
Al finalizar la rutina, la instrucción CLOSE provoca que la línea RTS retorne a su nivel inicial.

ACLARACION: En procesadores con número de serie inferior al 82746000 la llave 1 de S1 se encuentra anulada, no interesando la posición en que se encuentra.

3 Transmisión continua:
La llave 1 de S1 debe ajustarse a la posición OFF

En esta condición el equipo transmite en forma permanente el valor del peso, más un caracter de control:

BOT, X , xxxxxx, CR
(02) (peso) (13)

X = Z Si el peso es cero
X = M Si el peso esta en movimiento
X = N Si el peso es negativo
X = P Si el peso es positivo y estable

Rutina de recepción de datos en lenguaje QBASIC:

OPEN "COM1:9600,O,7,2,CS,DS,CD" FOR INPUT AS #1
b$ = ""
inicio:
A$ = INPUT$(1, #1)
IF A$ <> CHR$(02) THEN GOTO inicio
lee:
A$ = INPUT$(1, #1)
IF A$ = CHR$(13) THEN GOTO final
b$ = b$ + A$
GOTO lee
final:
PRINT b$
CLOSE
END

El punto decimal es transmitido solamente si está presente en el display y en la posición que corresponda.

Desde ya muchisimas gracias.
Responder Con Cita
  #2  
Antiguo 12-07-2006
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
La forma facil, baja un componente para el manejo del puerto serial si buscas en los hilos encontraras varios.

la forma dificil...
este es un pedazo de codigo para una impresora serial, si cambias los "Writes" por "Reads" y algun detallito no creo que tengas problemas para hacer funcionar el codigo ya que creo que lo que es dificil son las rutinas para el puerto.

Código Delphi [-]
procedure TPrincipal.HacerTicketVenta;
Var
  DescTemp, CantTemp, ImporteTemp, TotalTemp, PagoTemp, CambioTemp:String;
  H:HFile;
  X:Cardinal;
  Str: String;
  Buf: Array[1..100] Of char;
  DCB: _DCB;
  Error, I: Integer;
Begin
  SetLastError(0);
  Repeat
    H := CreateFile(pchar(Puerto),GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    If H = INVALID_HANDLE_VALUE Then
    Begin
      ShowMessage(SysErrorMessage(GetLastError));
      Exit;
    End;
    DCB.DCBlength := Sizeof(DCB);
    GetCommState(H,DCB);
    DCB.BaudRate := CBR_9600;
    DCB.ByteSize := 8;
    DCB.Parity := NOPARITY;
    DCB.StopBits := ONESTOPBIT;
    SetCommState(H,DCB);

    Str := #10;
    StrpCopy(@Buf,Str);
    WriteFile(H,buf,Length(Str),x,nil);
cualquier funcion que tengas duda, la puedes encontrar en el win32 Programmer's Reference que viene en MS SDK Files de tu instalacion de delphi
Responder Con Cita
  #3  
Antiguo 12-07-2006
zugazua2001 zugazua2001 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Necochea
Posts: 237
Poder: 20
zugazua2001 Va por buen camino
Gracias amigo voy a probar con esto

Muchisimas gracias por la molestia.
Cita:
Empezado por luisgutierrezb
La forma facil, baja un componente para el manejo del puerto serial si buscas en los hilos encontraras varios.

la forma dificil...
este es un pedazo de codigo para una impresora serial, si cambias los "Writes" por "Reads" y algun detallito no creo que tengas problemas para hacer funcionar el codigo ya que creo que lo que es dificil son las rutinas para el puerto.


Código Delphi [-]
procedure TPrincipal.HacerTicketVenta;
Var
DescTemp, CantTemp, ImporteTemp, TotalTemp, PagoTemp, CambioTemp:String;
H:HFile;
X:Cardinal;
Str: String;
Buf: Array[1..100] Of char;
DCB: _DCB;
Error, I: Integer;
Begin
SetLastError(0);
Repeat
H := CreateFile(pchar(Puerto),GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
If H = INVALID_HANDLE_VALUE Then
Begin
ShowMessage(SysErrorMessage(GetLastError));
Exit;
End;
DCB.DCBlength := Sizeof(DCB);
GetCommState(H,DCB);
DCB.BaudRate := CBR_9600;
DCB.ByteSize := 8;
DCB.Parity := NOPARITY;
DCB.StopBits := ONESTOPBIT;
SetCommState(H,DCB);

Str := #10;
StrpCopy(@Buf,Str);
WriteFile(H,buf,Length(Str),x,nil);




cualquier funcion que tengas duda, la puedes encontrar en el win32 Programmer's Reference que viene en MS SDK Files de tu instalacion de delphi
Responder Con Cita
  #4  
Antiguo 16-07-2006
zugazua2001 zugazua2001 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Necochea
Posts: 237
Poder: 20
zugazua2001 Va por buen camino
NO me anduvo, alguien puede guiarme como pasar esto

Hola amigos del foro estoy muy complicado porque tengo que entregar un modulo de una balanza para el miercoles y tengo que levantar la informacion del puerto serial de una balanza rs232 son los conectores. Me pasaron un codigo pero no me funciono me podrian ayudar a pasar el codigo de QBasic.
El sistema operativo que yo utilizo es XP.

Muchisimas gracias por su ayuda.
Responder Con Cita
  #5  
Antiguo 17-07-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Puestos a escoger me quedo con el método de transmisión continua. Aquí te queda el código, no esta muy optimizado, pero dada la urgencia que tienes puede servirte para salir del apuro. Comprueba que los parámetros del puerto serie (velocidad, bits de parada, etc) son correctos, si no estas seguro, lo mejor, es utilizar el hypertermial del propio windows, ahí podrás probar diferentes configuraciones del puerto hasta conseguir la correcta.

Código Delphi [-]
function Peso(Puerto: String): String;
var
  hPort: THandle;
  DCB: TDCB;
  Leidos: Cardinal;
  C: char;
begin
  Result:= '';
  Puerto:= Uppercase(Puerto);
  // Cambiar esto si es necesario un puerto diferente
  if (Puerto<>'COM1') and (Puerto<>'COM2') then
    exit;
  hPort:= CreateFile(PChar('\\.\'+Puerto), GENERIC_READ or GENERIC_WRITE,0, nil,
    OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  if hPort<>INVALID_HANDLE_VALUE then
  begin
    DCB.DCBlength:= sizeof(DCB);
    if GetCommState(hPort,DCB) then
    begin
      // Cambiar esto para una configuracion del puerto diferente
      with DCB do
      begin
        BaudRate := CBR_9600;
        ByteSize := 8;
        Parity   := NOPARITY;
        StopBits := ONESTOPBIT;
        Flags    := $01;
      end;
      if SetCommState(hPort, DCB) then
      begin
        PurgeComm(hPort, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or
          PURGE_RXCLEAR);
        // Aqui esta la rutina para leer
        C:= #0;
        // Esperamos el caracter de inicio
        repeat
          ReadFile(hPort,C,1,Leidos,nil);
        until C = #02;
        // Leemos el peso
        repeat
          ReadFile(hPort,C,1,Leidos,nil);
          if C <> #13 then
            Result:= Result + C;
        until C = #13;
        // aqui termina
      end;
    end;
    CloseHandle(hPort);
  end;
end;

// Un ejemplo de como usar la funcion
ShowMessage(Peso('COM2'));

Pruebalo, sino funciona prueba distintos parámetros con el hyperterminal, y si aun así no funciona a lo mejor tenemos que jugar con los valores del Pin RTS, pero primero vamos a probar así.
Responder Con Cita
  #6  
Antiguo 17-07-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Fijándome mejor en los parámetros que utiliza el código de ejemplo, puede que la configuración del puerto que estamos buscando sea la siguiente:

Código Delphi [-]
   with DCB do
      begin
        BaudRate := CBR_9600;
        ByteSize := 7;
        Parity   := ODDPARITY;
        StopBits := TWOSTOPBITS;
        Flags    := $03;
      end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pasar de delphi 7 a Delphi 2006 (problemas con VCL) jmlifi .NET 8 24-01-2006 15:51:30
Pasar de Excel a Delphi CamiloU Conexión con bases de datos 2 05-01-2006 14:03:24
Pasar Delphi 5 a 6,7 y viceversa Ivanzinho Varios 2 29-11-2005 10:36:14
Pasar salidas delphi a xml friendspark Varios 3 14-11-2005 18:23:56
Pasar cabecera dll en C++ a delphi mar646 API de Windows 0 15-04-2005 19:18:47


La franja horaria es GMT +2. Ahora son las 14:43:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi