كيفية إرسال واستقبال عبر المنفذ التسلسلي rs-485؟

StackOverflow https://stackoverflow.com//questions/10689404

  •  12-12-2019
  •  | 
  •  

سؤال

أريد التواصل بين جهاز الكمبيوتر الخاص بي وبعض لوحات التحكم.

من المتوقع أن يرسل جهاز الكمبيوتر معرفًا للوحة على RS-485 ومن ثم يجب أن يتلقى الإجابة من اللوحة.

عندما أحاول تلقي الرد، أتلقى بيانات خاطئة.

هنا هو الكود الخاص بي:

public void set()
    {

        SerialPort sp = new SerialPort("COM1");
        sp.Open();
        if (sp.IsOpen)
        {
            byte[] id = new byte[]{0,0,0,0,0,0,0,0,0,0};
            byte[] rec = new byte[540];
            while (!end)
            {
                sp.Write(id,0,id.Length);

                sp.Read(rec,0,rec.Length);

                //do some with rec
                //WORKING
                //do soem with rec

            }
        }
        sp.Close();
    }

إنه يعمل إذا كنت أستخدم RS-232، ولكن ليس عندما أستخدم RS-485.

تحديث :

إنه سلك RS-485 2.(http://en.wikipedia.org/wiki/RS-485)

هل كانت مفيدة؟

المحلول

لقد وجدت المشكلة.

 sp.Read(rec,0,rec.Length);

Read هي طريقة غير محظورة لذا فهي تقرأ المخزن المؤقت ولكنها لا تنتظر كل البايتات.لذلك تحتاج إلى استخدام القيمة المرجعة لهذه الوظيفة التي ترجع عددًا صحيحًا يحتوي على عدد من البايتات التي يمكنها قراءتها.

أنا أستخدم هذا:

int read = 0;
int shouldRead = readData1.Length;
int len;
while (read < shouldRead )
{
    len = serialport.Read(buffer, 0, readData1.Length);
    if (len == 0)
         continue;
    Array.Copy(buffer, 0, readData1, read, len);
    read += len;
    Thread.Sleep(20);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top