Kline777 Posted June 24, 2013 at 04:13 PM Report #514756 Posted June 24, 2013 at 04:13 PM Bem, parece incrivel mas por acaso nunca tinha tido necessidade de ler dados de uma porta COM com o Delphi. Já o fiz com o .NET e é bastante facil. Não estou a conseguir com o Delphi... nem me parece ter nada nativo para ler/escrever em determinada porta COM facilmente. Alguém tem alguma ideia de uma maneira facil de escrever e ler valores da porta COM?
nunopicado Posted June 24, 2013 at 04:18 PM Report #514757 Posted June 24, 2013 at 04:18 PM Tudo se arranja... 🙂 Por acaso até há pouco tempo também não tinha tido necessidade disso. Quando fui procurar, descobri que é possível comunicar nativamente, usando a API do windows a partir do Delphi. Mas como não andamos aqui para perder ou fazer perder tempo, toma lá isto: http://sourceforge.net/projects/comport/ É um componente de comunicação com a COM Port. Uso-o para comunicar com uma balança e receber o peso, mas com certeza podes fazer muito mais com ele... 🙂 "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Kline777 Posted June 24, 2013 at 04:21 PM Author Report #514758 Posted June 24, 2013 at 04:21 PM Pois... foi isto que também encontrei. Mas não estou a conseguir ler nada do dispositivo, neste caso um medidor. Com .NET estou a conseguir, por isso nao deve ser por erro dos baudrates, paridades etc... Simplesmente nao me devolve nada no read... Lembras.te se tiveste que fazer alguma coisa de especial? Isso traz o TComPort, configuras a porta, chamas o Open(); e ele deve disparar o RxChar() quando recebe um valor certo?
nunopicado Posted June 24, 2013 at 04:22 PM Report #514760 Posted June 24, 2013 at 04:22 PM No meu caso, a balança exige que lhe envie uma sequência, só depois é que ela retorna o valor. Esse não tem nada disso? "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Kline777 Posted June 24, 2013 at 04:24 PM Author Report #514761 Posted June 24, 2013 at 04:24 PM Tem... estou a fazer ComPort1.Write('SD',Length('SD')); ComPort1.Read(s,length(s)); Que barbaridade é que tenho aqui mal? :/ Estás a usar os mesmos eventos?
nunopicado Posted June 24, 2013 at 04:31 PM Report #514765 Posted June 24, 2013 at 04:31 PM Ora, então tenho algo assim: Inicialização do componente: Com:=TComPort.Create(Self); with Com do begin Port:='COM'+GetField(dm.qEmpresa.FieldByName('BalancaConfig').AsString,1,','); BaudRate:=TBaudRate(StrToInt(GetField(dm.qEmpresa.FieldByName('BalancaConfig').AsString,2,','))); Parity.Bits:=TParityBits(StrToInt(GetField(dm.qEmpresa.FieldByName('BalancaConfig').AsString,3,','))); DataBits:=TDataBits(StrToInt(GetField(dm.qEmpresa.FieldByName('BalancaConfig').AsString,4,','))-5); StopBits:=TStopBits(StrToInt(GetField(dm.qEmpresa.FieldByName('BalancaConfig').AsString,5,','))); FlowControl.FlowControl:=TFlowControl(StrToInt(GetField(dm.qEmpresa.FieldByName('BalancaConfig').AsString,6,','))); Timeouts.ReadInterval:=StrToInt(GetField(dm.qEmpresa.FieldByName('BalancaConfig').AsString,7,',')); end; try Com.Connected:=True; except ShowMessage(cErrBalanca,epNone); end; if Com.Connected then begin Com.Open; Com.OnRxChar:=ComRxChar; Timer:=TTimer.Create(Self); Timer.Interval:=1000; Timer.OnTimer:=TimerTimer; end; para enviar a sequência, uso isto: Com.WriteStr(Dec2Ascii(dm.qEmpresa.FieldByName('BalancaTXSequence').AsString)); E o event handler da recepção é: procedure TfMain.ComRxChar(Sender: TObject; Count: Integer); var Rx:String; begin // Lê e formata o resultado da balança Com.ReadStr(Rx,Count); end; Ajuda? "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Kline777 Posted June 24, 2013 at 04:47 PM Author Report #514771 Posted June 24, 2013 at 04:47 PM Podes mostrar o codigo dessa tua função Dec2Ascii?
nunopicado Posted June 24, 2013 at 04:54 PM Report #514774 Posted June 24, 2013 at 04:54 PM Esse só converte uma string de numeros, em grupos de 3, em letras Ex.: 065067 Converte em AC (065=A),(067=C) Queres codigo disso? "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
thoga31 Posted June 24, 2013 at 04:56 PM Report #514777 Posted June 24, 2013 at 04:56 PM Ler 3 caracteres, e fazer Char(Str2Int(...)), imagino? 😄 1 Report Knowledge is free!
nunopicado Posted June 24, 2013 at 05:02 PM Report #514779 Posted June 24, 2013 at 05:02 PM Tal e qual... A ideia por tás disto é que há caracteres nas sequencias que é complicado representar em ASCII, pelo que assim, guardo na DB os decimais, e na hora converto e envio! "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Kline777 Posted June 24, 2013 at 05:05 PM Author Report #514780 Posted June 24, 2013 at 05:05 PM Tinha a ver com a configuraçao da comunicação à porta. O handshake no RequestToSend.... nunca tal tinha visto -.- Perdoem-me a expressão mas como se diz na minha terra: Quando não se sabe f**** até os co****s estorvam -.-
nunopicado Posted June 24, 2013 at 05:06 PM Report #514781 Posted June 24, 2013 at 05:06 PM Significa então que já está OK... 🙂 Assim é que eu gosto! "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Kline777 Posted June 24, 2013 at 05:20 PM Author Report #514788 Posted June 24, 2013 at 05:20 PM Muito obrigado pela ajuda 😉
nunopicado Posted June 24, 2013 at 05:21 PM Report #514789 Posted June 24, 2013 at 05:21 PM Muito obrigado pela ajuda 😉 Estamos cá pra isso! 🙂 "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now