Avatar billede keepy Seniormester
01. juni 2015 - 11:36 Der er 2 kommentarer

Serielport

Jeg er ved at lave en DLL der kommuniker med en COMPORT enhed.
Når jeg sender data via m_objSerialPort.Write(Command,0,Command.Length);
Modtager jeg samtlige data jeg lige har sendt med det samme.
Nogle der ved hvad jeg gør galt?

Hardware mæssigt er det iorden.

public bool WriteData(byte[] Command)
        {
            data.Clear();
         
            m_objSerialPort.Write(Command, 0, Command.Length);
            int byteToWrite = m_objSerialPort.BytesToWrite;
            int byteToRead = m_objSerialPort.BytesToRead;
            System.Threading.Thread.Sleep(500);
            m_objSerialPort.DiscardInBuffer();
       
            return true;
        }
SerialPort m_objSerialPort = new SerialPort();
private void m_objSerialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            try
            {
                if (!sp.BytesToRead.Equals(null))
                {
                    byteRec = (byte)sp.ReadByte();
                    data.Add(byteRec);
                }
            }
            catch (Exception ex)
            {
                InfoMessage = "Error";
            }

        }
    public bool SetComPort(String comPort)
        {
            try
            {
                m_objSerialPort.PortName = comPort;
                m_objSerialPort.DataBits = 8;
                m_objSerialPort.BaudRate = 1200;
                m_objSerialPort.Parity = Parity.None;
                m_objSerialPort.StopBits = StopBits.One;
                m_objSerialPort.Handshake = Handshake.None;
                m_objSerialPort.DtrEnable = true;//Data Terminal Ready
                m_objSerialPort.RtsEnable = true;//Requist To Sent
                m_objSerialPort.ReadTimeout = 2000;
                m_objSerialPort.WriteTimeout = 2000;
                m_objSerialPort.ReadBufferSize = 1024;
                //sp.Encoding = Encoding.GetEncoding("iso-8859-1");
                m_objSerialPort.Encoding = Encoding.Default;
                m_objSerialPort.DataReceived += new SerialDataReceivedEventHandler(m_objSerialPort_DataReceived);
            }
            catch (Exception ex)
            {
                return (false);
            }
            return (true);
        }

byte[] Commands = {0x80,0xB0,0xD1,0x00,0x00,0xA3,0x75,0x0D};

private void Form1_Load(object sender, EventArgs e)
        {
           
            bool Status = SetComPort("COM4");
            if (Status)
            {
                OpenSerielPort();
            }
           
        }
private void button1_Click(object sender, EventArgs e)
        {
           
            WriteData(Commands);
            textBox1.Clear();
            for (int i = 0; i < data.Count; i++)
            {
                if (textBox1.InvokeRequired)
                {
                    textBox1.Invoke((MethodInvoker)(() => textBox1.Text += data[i].ToString("X") + " "));
                }
                else
                {
                    textBox1.Text += data[i].ToString("X") + " ";
                }
            }
            data.Clear();
        }
Avatar billede sonalias Seniormester
01. juni 2015 - 15:51 #1
Seriel porten i sig selv, echoer IKKE dine data. Derfor må det være en buffer du glemmer at tømme eller din enhed i den anden ende der echoer tilbage (Dette er meget normalt!).

Din textbox1.text laver du en += som vil sige du tilføjer dine læste data + det der stod der i forvejen, mener du måske bare en = her?
Avatar billede keepy Seniormester
01. juni 2015 - 21:12 #2
Hej sonalias

tak for svaret, det er rigtig nok med +=, da jeg modtager 8 byte.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester