Jak sterować portm rs232/com w komputerze z poziomu delphi. Napewno będzie trzeba dać wstawkę assemblerową, ale jaką. Może ktoś wie jak się steruje tym portem w komputerze.
Wielkie dzięki
Wielkie dzięki
Czy wolisz polską wersję strony elektroda?
Nie, dziękuję Przekieruj mnie tamCytat:Literka f oznacza, że dane pole to flaga (w notacji jakiegoś węgra bodajrze).
typedef struct _DCB { // dcb
DWORD DCBlength; // sizeof(DCB)
DWORD BaudRate; // current baud rate
DWORD fBinary: 1; // binary mode, no EOF check
DWORD fParity: 1; // enable parity checking
DWORD fOutxCtsFlow:1; // CTS output flow control
DWORD fOutxDsrFlow:1; // DSR output flow control
DWORD fDtrControl:2; // DTR flow control type
DWORD fDsrSensitivity:1; // DSR sensitivity
DWORD fTXContinueOnXoff:1; // XOFF continues Tx
DWORD fOutX: 1; // XON/XOFF out flow control
DWORD fInX: 1; // XON/XOFF in flow control
DWORD fErrorChar: 1; // enable error replacement
DWORD fNull: 1; // enable null stripping
DWORD fRtsControl:2; // RTS flow control
DWORD fAbortOnError:1; // abort reads/writes on error
DWORD fDummy2:17; // reserved
WORD wReserved; // not currently used
WORD XonLim; // transmit XON threshold
WORD XoffLim; // transmit XOFF threshold
BYTE ByteSize; // number of bits/byte, 4-8
BYTE Parity; // 0-4=no,odd,even,mark,space
BYTE StopBits; // 0,1,2 = 1, 1.5, 2
char XonChar; // Tx and Rx XON character
char XoffChar; // Tx and Rx XOFF character
char ErrorChar; // error replacement character
char EofChar; // end of input character
char EvtChar; // received event character
WORD wReserved1; // reserved; do not use
} DCB;
with dcb do
begin
BaudRate:=cbr_38400; //OK
StopBits:=ONESTOPBIT; //OK
fbinary:=1; //Undeclared identifier "fbinary"
end;
query : PChar = 'CDAT?'+#13+#10; // przykładowe zapytanie
// zakończone parą znaków CR LF
Dim Name As String * 10
Dim Bd(9) As Byte
Dim Tmp As Integer
Dim Wynik As Single
dim temp1 as integer (albo string * 10)
dim temp2 as integer (albo string * 10)
'---------------------procedóra odczytu dla 2 taka sama
Config 1wire = Portd.4
1wreset
If Err = 1 Then
Locate 1 , 21
Lcd "ERR "
Else
1wwrite Skip_rom
1wwrite Convert
Waitms 800
1wreset
1wwrite Skip_rom
1wwrite Read_sp
Bd(1) = 1wread(9)
1wreset
Tmp = Bd(2) * 256
Tmp = Tmp + Bd(1)
Wynik = Tmp
Wynik = Wynik / 16
print temp1
print temp2
var
query : PChar = 'CDAT?'+#13+#10; // przykładowe zapytanie
// zakończone parą znaków CR LF
Buffer_O : ARRAY[0..cbOutQueue] of Char; // bufor wyjściowy
Buffer_I : ARRAY[0..cbInQueue] of Char; // bufor wejściowy
//----------------------------------------------------------------------------------
function TForm1.Read_Comm(hCommDev: THANDLE;
Buf_Size: DWORD): Integer;
var
nNumberOfBytesToRead: DWORD;
begin
ClearCommError(hCommDev, Errors, @Stat);
if (Stat.cbInQue > 0) then
begin
if (Stat.cbInQue > Buf_Size) then
nNumberOfBytesToRead := Buf_Size
else
nNumberOfBytesToRead := Stat.cbInQue;
ReadFile(hCommDev, Buffer_I, nNumberOfBytesToRead,
Number_Bytes_Read, NIL);
Read_Comm := 1;
end
else
begin
Number_Bytes_Read := 0;
Read_Comm := 0;
end;
end;
//-----------------------------
FlushFileBuffers(hCommDev);
Until (Write_Comm(hCommDev, StrLen(Buffer_O)) <> 0);
if (Read_Comm(hCommDev, SizeOf(Buffer_I)) > 0) then // odbiór
// danych
RichEdit1.Text := Buffer_I
else
RichEdit1.Text := 'Brak danych';