الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما هو الخطا في هذا الكود وما هو الحل

بدأه abu7midan في 11 مايو 2012 · 2 رد · 1,711 مشاهدة · في التحكم الصناعي وربط الحاسب بالعالم الخارجي
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

الى خبراء المنتدى الكريم ما نستفيده من علم يوميا من هذا المنتدى الرائع لكم فيه جزيل الشكر والاحترام وجزاكم الله خير

لدي سؤال حول مشروع تخرج قمت بتصميمه بفضل الله ثم بففضل منتداكم

ساطرح عليكم كود قمت بكتابته وتجميعه للتحكم بالبراراليل بورت عبر الشبكة باستخدام tcp

ولكن المشكلة هي ان كود السيرفر يقوم بتشغيل الامر ولكن في اجزاء من الثانية نرجو منكم الاطلاع و والرد لحل المشكلة وجزاكم الله خير

كلاينت

 public partial class Client : Form
    {
        TcpClient MyTcpClient;
        NetworkStream NS;
        StreamWriter SW;

        public Client()
        {
            InitializeComponent();      
        }
        public void connect()
        {
            try
            {
                 MyTcpClient = new TcpClient("192.168.1.106", 3000);
                 NS = MyTcpClient.GetStream();
                 SW = new StreamWriter(NS);

            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message.ToString());
            }
        }

        private void disconnect()
        {
            SW.Close();
            NS.Close();
            MyTcpClient.Close();
        }

        private void ubbtton_Click(object sender, EventArgs e)
        {
            connect();
            SW.WriteLine("up");
            disconnect();
        }

        private void ubbtton_MouseUp(object sender, MouseEventArgs e)
        {
            connect();
            SW.WriteLine("stop");
            disconnect();
        }

        private void downbutton_Click(object sender, EventArgs e)
        {
            connect();
            SW.WriteLine("down");
            disconnect();
        }

        private void downbutton_MouseUp(object sender, MouseEventArgs e)
        {
            connect();
            SW.WriteLine("stop");
            disconnect();
        }

        private void rightbutton_Click(object sender, EventArgs e)
        {
            connect();
            SW.WriteLine("right");
            disconnect();
        }

        private void rightbutton_MouseUp(object sender, MouseEventArgs e)
        {
            connect();
            SW.WriteLine("stop");
            disconnect();
        }

        private void leftbutton_Click(object sender, EventArgs e)
        {
            connect();
            SW.WriteLine("left");
            disconnect();
        }

        private void leftbutton_MouseUp(object sender, MouseEventArgs e)
        {
            connect();
            SW.WriteLine("stop");
            disconnect();
        }
    }

سيرفر

public class Controls 
    {
        [DllImport("inpout32.dll", EntryPoint = "Out32")]
        public static extern void Output(int adress, int value);
        int[] Bin = new int[9];
        public Controls()
        {
        }

        public void OutLPT(int PinNumber, int Value)          //this function convert binarry to decimal, output decimal number to LPT
        {
            Bin[PinNumber] = Value;                                // put selected value in selected location in temp array

            //start convert binary to decimal
            int Num = 1;
            Bin[0] = 0;
            for (int i = 8; i > 0; i--)
            {
                if (Bin == 1)
                    Bin[0] = Bin[0] + (Num);
                Num = Num * 2;
            }
            //END convert binary to decimal

            Output(0x378, Bin[0]);  
        }
        public void stopall()
        {
           Output(0x378, 0);
        }
    }
    public partial class Server : Form
    {
        public Server()
        {
            InitializeComponent();
        }
        Controls controle = new Controls();
        TcpListener MyTcpListener;
        NetworkStream NS;
        Socket MySocket;
        StreamReader SR;
        public delegate void MethodInvoker();

        public void Listener()
        {
            MyTcpListener = new TcpListener(System.Net.IPAddress.Any,3000);
            MyTcpListener.Start();

            while (true)
            {
                MySocket = MyTcpListener.AcceptSocket();
                NS = new NetworkStream(MySocket);
                SR = new StreamReader(NS);
                //CommandList.Items.Add(SR.ReadToEnd().ToString());
                MethodInvoker invoker1 = new MethodInvoker(delegate()
                    {
                        ShowCommand(SR.ReadLine());
                    }
                );
                this.BeginInvoke(invoker1);
            }
        }

        Thread thread;
        private void Server_Load(object sender, EventArgs e)
        {
            controle.stopall();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            thread = new Thread(new System.Threading.ThreadStart(Listener));
            thread.Start();
        }

        private void Server_FormClosed(object sender, FormClosedEventArgs e)
        {
            try
            {
                MyTcpListener.Stop();
            }
            catch (Exception ex)
            { 
                MessageBox.Show(ex.Message.ToString());
            }

            try
            {
                thread.Abort();
            }
            catch (Exception ex) 
            {
                MessageBox.Show(ex.Message.ToString());
            }

        }

        private void ShowCommand(string Comm)
        {
            CommandList.Items.Add(Comm);
            switch (Comm)
            {
                case "up":
                    controle.OutLPT(1, 1);
                    controle.OutLPT(3, 1);
                    break;

                case "down":
                    controle.OutLPT(2, 1);
                    controle.OutLPT(4, 1);
                    break;
                case "left":
                    MessageBox.Show("left");
                    break;
                case "right":
                    MessageBox.Show("right");
                    break;
                case "stop":
                    controle.stopall();
                    break;

                default:
                    MessageBox.Show("Wrong Command");
                    break;

            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            MyTcpListener.Stop();
            thread.Abort();
        }
    }
#2

أخى هذا الكود يختص ببرمجة الحاسب هنا برمجة المتحكمات لكى تجد الإجابة يجب عليك التحول الى قسم من اقسام برمجة الكمبيوتر

اذكر القسم الذى أحولك إليه

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#3

السلام عليكم و رحمة الله تعالى و بركاته,

اخي الكريم,

ارجو منك الاجابة على ما يلي لكي نستطيع تحديد المشكلة ثم حلها بعون الملك القدوس سبحانه و تعالى.

1- هل هناك من مشكلة في برنامجي Client-Server اعني هل الامر المرسل يتم استقباله باكمله?

2- من الطبيعي ان يكون تنفيذ الامر باجزاء من الثانية و هذا بسبب استخدامك EventHandlers المرتبطة بالضغط على زر الامر و ارساله اي تركه - و عادة ما يكون هذا بسرعة- فان لم يكن هذا مرادك فارجو منك ايضاح المطلوب "اعني بيان كيفية تنفيذ الامر"

3- اظنك تحاول التحكم بمحركين لتوجيه شيىء, احسبها كاميرة, هل هذا صحيح -من حقك ان لا تجيب عنه.

4- هل واجهت مشكلة في توافق Client-Server Responses ام لا? ان كانت الاولى فهل لك حظ في تجريب Asynchronous Communication over TCP/IP using Client-Server Structure.

5- بحسب تقديري, انت ادرجت جزءا من البرنامجين و ان لم يكن الامر كذلك فعساك ان تعيد النظر في بنية البرامج و بعض من الدوال المستخدمة فيهما للوصول الى الافضل.

6- اقترح عليك فصل جزء Client-Server عن جزء Parallel Port مبدئيا للتاكد من مصدر الخلل.

7- ان كان الخلل من جزء Parallel Port فارجو اطلاعنا عليه و اسمح لي ايراد بعض من هذه الاخطاء كثيرة الحدوث لا سيما عند استخدام inpout32.dll

(Run-Time Errors)

* عدم ادراجها في نفس المجلد الذي يحوي البرنامج التنفيذي.

* عدم استخدام الاسم الصحيح ل Entry Point.

لطفا, هل اخذت بالحسبان SPP/ EPP/ ECP Operation Mode for the Parallel Port الموجودة في كثير من انظمة الحاسوب الجديدة, فبعض هذه الخيارات لا يسمح للبرنامج بان يتحكم بالمخرج المتوازي Parallel Port كما يشاء و قد يكون هذا الاخير هو سبب مشكلتك.

للفائدة انظر الاتي لطفا:

http://www.ni.com/white-paper/3466/en

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…