PDA

View Full Version : سوال: اتصال به ComPort



water_lily_2012
دوشنبه 29 مهر 1392, 09:25 صبح
سلام
ایا کدنویسی شناخت پورت و اتصال به ComPort به صورت مستقیم و با زمانیکه چندین ComPort به یک USB وصل شده فرق میکنه؟؟

دستگاهی که به پورت وصله یک ساختار داده ای میفرسته که ماکزیمم 255 بایت هست. ولی پشت سرهم داره این کار را انجام میدهد. من چجوری اطلاعات را بخونم که بتونم تشخیص بدم هر ساختار را با ساختار بعدی. اصلا این داده هایی که می فرسته در کجا و چگونه ذخیره میشه و تا چه موقع وجود داره؟؟


تشکر

rezaei_y
دوشنبه 29 مهر 1392, 09:44 صبح
یه نگاهی به این بنداز (http://msmvps.com/blogs/coad/archive/2005/03/23/SerialPort-_2800_RS_2D00_232-Serial-COM-Port_2900_-in-C_2300_-.NET.aspx)

water_lily_2012
دوشنبه 29 مهر 1392, 10:27 صبح
این برنامه را دیدم و داشتم ولی سوال من چیز دیگری بود. مخصوصا سوال اولم.

water_lily_2012
سه شنبه 30 مهر 1392, 07:29 صبح
اگر بخواهم هم زمان با چند پورت کار کنم و ندانم که پورت ها چه تعداد هست و در هنگام اجرا مشخص بشه. چگونه باید توابع مربوطه را ایجاد کنم.


namespace SerialComBuffering
{
class Program
{
SerialPort com = new SerialPort(SerialPort.GetPortNames()[0],
9600, Parity.None, 8, StopBits.One);
List<byte> bBuffer = new List<byte>();
string sBuffer = String.Empty;

static void Main(string[] args)
{ new Program(); }

Program()
{
com.DataReceived +=
new SerialDataReceivedEventHandler(com_DataReceived);
com.Open();

Console.WriteLine("Waiting for incoming data...");
Console.ReadKey();
}

void com_DataReceived(object sender,
SerialDataReceivedEventArgs e)
{
// Use either the binary OR the string technique (but not both)

// Buffer and process binary data
while (com.BytesToRead > 0)
bBuffer.Add((byte)com.ReadByte());
ProcessBuffer(bBuffer);

// Buffer string data
sBuffer += com.ReadExisting();
ProcessBuffer(sBuffer);
}

private void ProcessBuffer(string sBuffer)
{
// Look in the string for useful information
// then remove the useful data from the buffer
}

private void ProcessBuffer(List<byte> bBuffer)
{
// Look in the byte array for useful information
// then remove the useful data from the buffer
}
}
مثلا در کد بالا یک Com ایجاد کرده و یک Event نیز به آن متصل کرده و داده های دریافتی پورت را بررسی می کند.
حالا اگر من در هنگام اجرا 3 پورت داشته باشم. چگونه همزمان هر سه را کنترل کنم و از هر سه داده دریافت کنم؟؟

تشکر

water_lily_2012
سه شنبه 30 مهر 1392, 10:31 صبح
یک آرایه تعریف کردم و تمامی پورت ها را در ان قرار دادم ولی در به کار گیری تابع DataReceived برای هر پورت مشکل دارم.

amir3321
سه شنبه 30 مهر 1392, 12:51 عصر
فکر کنم به این دو تالینک یک نگاهی بندازی بد نیست

http://stackoverflow.com/questions/16147409/reading-from-two-serial-ports-at-the-same

http://stackoverflow.com/questions/17519760/multiple-serial-ports-in-c-sharp-trouble-using-list

http://stackoverflow.com/questions/17679459/apparent-io-ports-serialport-flaw-in-c-sharp-or-possible-hardware-flaw