Newsgroup: it.comp.lang.delphi
Titolo: copiare sulla seriale

Scusate ragazzi ma credo che la mia vecchiaia mi stia dando problemi
di memoria; scherzo.....
Ma mi servirebbe un'aiutono per come fare a copiare paro, paro un file
txt sulla seriale.
Questo file non è niente altro che una sequenza di caratteri.
Sono sicuro che è una cagata pazzesca ma in questo momento non riesco
a ricordare niente.
Scusatemi.
Grazie a tutti Ciaoooooo


Pare che nessuno abbia risposto. Allora rinnovo l'apppello, anche a me
servirebbe una funzione del genere.

 >
Questo l'ho usato in un mio programma e funziona (ho fatto una operazione di
copia/incolla/adattamento, al posto di tutti gli exit nella SerialOut
dovresti mettere dei raise per visualizzare l'errore)
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;
...
function SerialOut(PortParam:string;FileName:String):Boolean;
const
  fBinary           = $00000001;  fParity         = $00000002;
  fOutxCtsFlow      = $00000004;  fOutxDsrFlow    = $00000008;
  fDtrControl       = $00000030;  fDsrSensitivity = $00000040;
  fTXContinueOnXoff = $00000080;  fOutX           = $00000100;
  fInX              = $00000200;  fErrorChar      = $00000400;
  fNull             = $00000800;  fRtsControl     = $00003000;
  fAbortOnError     = $00004000;  fDummy2         = $FFFF8000;
var
  f           : TextFile;
  sLine       : string;
  hCommPort   : THandle;
  DCB         : TDCB;
  CommTimeOuts: TCOMMTIMEOUTS;
  nCharWrited :Cardinal;
  CommBuffer  :Array[1..1024] of Char;
begin
  hCommPort:=INVALID_HANDLE_VALUE;
  Result:=FALSE;
  try
hCommPort:=CreateFile(PCHAR(copy(PortParam,1,pos(':',PortParam))),GENERIC_WR
ITE,0,nil,OPEN_EXISTING,0,0);
    if hCommPort=INVALID_HANDLE_VALUE  then exit;
    if not GetCommState(hCommPort,DCB) then exit;
    if not BuildCommDCB(PCHAR(PortParam),DCB) then exit;
    if not SetCommState(hCommPort,DCB) then exit;
    CommTimeOuts.ReadIntervalTimeout        :=MAXDWORD;
    CommTimeOuts.readTotalTimeoutMultiplier :=MAXDWORD;
    CommTimeOuts.ReadTotalTimeoutConstant   :=2000;
    CommTimeOuts.WriteTotalTimeoutMultiplier:=0;
    CommTimeOuts.WriteTotalTimeoutConstant  :=2000;
    if not SetCommTimeouts(hCommPort,CommTimeOuts) then exit;
    PurgeComm(hCommPort, PURGE_RXABORT + PURGE_RXCLEAR);
    if not fileexists(FileName) then exit;
    AssignFile(f,FileName);
    Reset(f);
    while not Eof(f) do
    begin
      Readln(f, sLine);
      StrPCopy(@CommBuffer,sLine);
      WriteFile(hCommPort,CommBuffer,Length(sLine),nCharWrited,nil);
    end;
    CloseFile(f);
    Result:=TRUE;
  finally
    if hCommPort<>INVALID_HANDLE_VALUE then begin
      CloseHandle(hCommPort);
      hCommPort:=INVALID_HANDLE_VALUE;
      Result:=TRUE;
    end else begin
      Result:=FALSE;
    end;
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  SerialOut('COM1: baud=115200 parity=N data=8 stop=1','c:\autoexec.bat');
end;
Ciao, Roberto


Ebbene, premesso che tu abbia un file ad esempio un txt, comunque deve
contenere codice ascii.
Il metodo che ho utilizzato può essere poco ella da vedere ma nella
necessità funziona.
Poi ci sono due modi per spedirlo nella seriale; uno è con il veccio
copy e l'altro con il type.
Ti faccio un esempio:
da dos o tasca dos scrivi:  copy "nomefile"  com1
oppure: type "nomefile" > com1:
poi scivi un file .bat con dentro questa riga di comando che ad
esempio chiami copia e lo lanci da delphi con la riga
  ShellExecute(0, nil, 'copia', nil, nil, SW_HIDE);
ti consiglio di utilizzare il comando copy perchè soprattutto con
windows 2000 il type è male interpretato.
Inoltre ti può capitare che all'accensione del PC quando tu invii una
stampa, la stampante non muove.
Ho scoperto che win 2000 alcune volte non resetta bene la seriale
soprattutto se c'è collegata una stampante allora ti consiglio di
aggiungere al file autoexec.bat questa riga:
mode com1:9600,n,8,1
che come vedi serve per impostare bene la seriale.
Chiaramente se la periferica che hai collegato ha impostazioni diverse
ricorda di modificarle.
spero di esserti stato utilie ciaooo, Gulma