PDA

View Full Version : معادل این کد سی توی دلفی چی میشه؟



omidan321
سه شنبه 30 مهر 1392, 17:36 عصر
byte[] bytesToSend = new byte[5] { 0x10, 0x49, 0x91, 0xDA, 0x16 };
Port.Write(bytesToSend, 0, bytesToSend.Length);


اگه بخواهیم عوض مقادیر ثابتی که الان هست بهش مقادیر متغیر بدیم(مثلا از یه تکست باکس اطلاعاتشو بگیره ) باید چیکار کنیم ؟؟؟؟؟؟؟؟؟؟؟؟

یوسف زالی
سه شنبه 30 مهر 1392, 19:43 عصر
آخه مگه اینجا تالار ترجمه هست؟
کمی هم به خودتون زحمت بدید.
اول فکر کردم یکی دوباره. اما این بار چندمه که این تاپیک ها دیده می شه.

omidan321
سه شنبه 30 مهر 1392, 20:54 عصر
آخه اخوی من که زبان سی ام زیاد خوب نیست تمرینشو کردم دیدم نمیتونم با دلفی اینو پیاده کنم ، نتیجه این شد که تاپیک بزنم برای حل این موضوع

کار من اشتباهه میدونم ولی عدم علم کافیم موجبات ناراحتی شما رو پدید اورد

rahnema1
سه شنبه 30 مهر 1392, 23:08 عصر
آخه اخوی من که زبان سی ام زیاد خوب نیست تمرینشو کردم دیدم نمیتونم با دلفی اینو پیاده کنم ، نتیجه این شد که تاپیک بزنم برای حل این موضوع

کار من اشتباهه میدونم ولی عدم علم کافیم موجبات ناراحتی شما رو پدید اورد

دوست عزیز این کد به زبان سی شارپ دات نت نوشته شده و محتوای یک آرایه از نوع بایت رو توی serialport می نویسه فکر کنم کار با دات نت اونقدر مشکل نباشه

SayeyeZohor
سه شنبه 30 مهر 1392, 23:29 عصر
byte[] bytesToSend = new byte[5] { 0x10, 0x49, 0x91, 0xDA, 0x16 };
Port.Write(bytesToSend, 0, bytesToSend.Length);


اين يك نمونه كد سي شارپ دات نت كه توضيح هم داره


// Choose the port name and the baud rate.
System.IO.Ports.SerialPort port = new System.IO.Ports.SerialPort("COM4", 115200);

// Connect to the port.
port.Open();

// Transmit two bytes on the TX line: 1, 2
port.Write(new byte[]{1, 2}, 0, 2);

// Wait for a byte to be received on the RX line.
int response = port.ReadByte();

// Show the user what byte was received.
MessageBox.Show("Received byte: " + response);

// Disconnect from the port so that other programs can use it.
port.Close();

SayeyeZohor
سه شنبه 30 مهر 1392, 23:35 عصر
اين يك نمونه كد با دلفي كه ارتباط با پورت Com يا سريال رو توضيح مي ده
بخون و ...


function OpenCOMPort: Boolean;
var
DeviceName: array[0..80] of Char;
ComFile: THandle;
begin
{ First step is to open the communications device for read/write.
This is achieved using the Win32 'CreateFile' function.
If it fails, the function returns false.

Wir versuchen, COM1 zu öffnen.
Sollte dies fehlschlagen, gibt die Funktion false zurück.
}
StrPCopy(DeviceName, 'COM1:');

ComFile := CreateFile(DeviceName,
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);

if ComFile = INVALID_HANDLE_VALUE then
Result := False
else
Result := True;
end;


function SetupCOMPort: Boolean;
const
RxBufferSize = 256;
TxBufferSize = 256;
var
DCB: TDCB;
Config: string;
CommTimeouts: TCommTimeouts;
begin
{ We assume that the setup to configure the setup works fine.
Otherwise the function returns false.

wir gehen davon aus das das Einstellen des COM Ports funktioniert.
sollte dies fehlschlagen wird der Rückgabewert auf "FALSE" gesetzt.
}

Result := True;

if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then
Result := False;

if not GetCommState(ComFile, DCB) then
Result := False;

// define the baudrate, parity,...
// hier die Baudrate, Parität usw. konfigurieren

Config := 'baud=9600 parity=n data=8 stop=1';

if not BuildCommDCB(@Config[1], DCB) then
Result := False;

if not SetCommState(ComFile, DCB) then
Result := False;

with CommTimeouts do
begin
ReadIntervalTimeout := 0;
ReadTotalTimeoutMultiplier := 0;
ReadTotalTimeoutConstant := 1000;
WriteTotalTimeoutMultiplier := 0;
WriteTotalTimeoutConstant := 1000;
end;

if not SetCommTimeouts(ComFile, CommTimeouts) then
Result := False;
end;


{
The following is an example of using the 'WriteFile' function
to write data to the serial port.

Folgendes Beispiel verwendet die 'WriteFile' Funktion, um Daten
auf den seriellen Port zu schreiben.
}


procedure SendText(s: string);
var
BytesWritten: DWORD;
begin
{
Add a word-wrap (#13 + #10) to the string

An den übergebenen String einen Zeilenumbruch (#13 + #10) hängen
}
s := s + #13 + #10;
WriteFile(ComFile, s[1], Length(s), BytesWritten, nil);
end;


{
The following is an example of using the 'ReadFile' function to read
data from the serial port.

Folgendes Beispiel verwendet die 'ReadFile' Funktion, um Daten
vom seriellen Port zu lesen.
}


procedure ReadText: string;
var
d: array[1..80] of Char;
s: string;
BytesRead, i: Integer;
begin
Result := '';
if not ReadFile(ComFile, d, SizeOf(d), BytesRead, nil) then
begin
{ Raise an exception }
end;
s := '';
for i := 1 to BytesRead do s := s + d[I];
Result := s;
end;


procedure CloseCOMPort;
begin
// finally close the COM Port!
// nicht vergessen den COM Port wieder zu schliessen!
CloseHandle(ComFile);
end;

SayeyeZohor
سه شنبه 30 مهر 1392, 23:46 عصر
8 تا فانكشن داره كه براي ارتباط با پورت سريال باهاش كار داري 8 WinApi functions

CreateFile
GetCommState
SetCommState
SetCommTimeouts
EscapeCommFunction
CloseHandle
WriteFile
ReadFile



Opening Port:


function TComPort.Open() : Boolean;
var
PortDCB : TDCB;
Timeouts : COMMTIMEOUTS;
begin
Result := False;
FHandle := CreateFile(PChar(FName),
GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING,
0, 0); //trying to open com port

if (FHandle = INVALID_HANDLE_VALUE) then
exit;//com port was nor oppened for some reasons

FillChar(PortDCB, sizeof(TDCB), #0);
PortDCB.DCBlength := sizeof(TDCB);
GetCommState(FHandle, PortDCB); //getting port state

PortDCB.BaudRate := FBaudRate;
PortDCB.ByteSize := 8;
PortDCB.Parity := NOPARITY;
PortDCB.StopBits := ONESTOPBIT;
PortDCB.Flags := FFlags;//4243;

if (not SetCommState(FHandle, PortDCB)) then
exit;

Timeouts.ReadIntervalTimeout := MAXDWORD;
Timeouts.ReadTotalTimeoutMultiplier := MAXDWORD;
Timeouts.ReadTotalTimeoutConstant := FReadTimeOut; //read timeout
Timeouts.WriteTotalTimeoutMultiplier := MAXDWORD;
Timeouts.WriteTotalTimeoutConstant := FWriteTimeOut; //write timeout

if (not SetCommTimeouts(FHandle, Timeouts)) then
exit;

EscapeCommFunction(FHandle, 11);

Result := True;
end;


Reading from port:


function TComPort.Read() : String;
var
dwRead : Cardinal;
begin
Result := '';
//reading from port
ReadFile(FHandle, m_pBuf^, 1024, dwRead, nil);
Result := String(m_pBuf);
SetLength(Result, dwRead);
end;


Writing to port:


Function TComPort.Write(AData : string) : boolean;
var
m_ppBuf : Pointer;
dwWrote, dwCurWrote : Cardinal;
begin
Result := False;
m_ppBuf := @Pointer(AData)^;
dwWrote := 0;
while (dwWrote < Length(AData)) do

begin
//writing to port
if (not WriteFile(FHandle, Pointer(LongInt(m_ppBuf) + dwWrote)^, length(AData) - dwWrote, dwCurWrote, nil)) then
begin
exit;
end;

Inc(dwWrote, dwCurWrote);
end;

Result := True;
end;



اينم يك سورس كار با پورت سريال

ComPort.zip (http://alexmogurenko.com/Examples/ComPort.zip)


دفعه آخرتون باشه ها ....
بگرد داداش ...
منم c# كار نكردم و چيزي هم بلد نيستم
تلاشتو بكن
:متفکر: