IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Daniel Semerák:5.10.2022 18:05

Vyšlu příkaz pro čtení, ten se mi sice zobrazí v Logu, ale zařízení data sice vyšle, ale na výstupu je nevidím, tak nevím, kde je pro ted zase chyba. 🙁
Rozhodně LEDka na OptoHlavě bliká zeleně, takže nějaká data do programu posílá, ale už nezobrazí.
V Logu i na výstupu se mi zobrazí a uloží jen příkaz ke spuštění čtení dat, ale to je všechno.

Zkusil jsem:

private void BtnOdecet_Click(object sender, EventArgs e)
        {
            TbcVystupDat.SelectedTab = TbpOdecet;
            RtbOdecet.Clear();
            TxtZprava.Clear();

                        // Zde bude kod, kde se vyčtou data z ElMěru a zobrazí se vpravo v okně "Odečet".
            ComSerialPort.Encoding = Encoding.ASCII;
            ComSerialPort.PortName = CmbCisloPortu.Text;
            ComSerialPort.BaudRate = int.Parse(CmbRychlostStartovaci.Text);
            ComSerialPort.ReadTimeout = 300;
            ComSerialPort.Open();
            ComSerialPort.DiscardInBuffer();

            BtnOdecet.Enabled = false;
            //string Posli = /*TextFormatFlags(Color.Red);*/

            TxtZprava.Text = "Probíhá komunikace ...";

                        if (Data == ">>> ")
                                {
                                RtbOdecet.SelectionColor = Color.Blue;
                                }
                        else if (Data == "<<< ")
                                RtbOdecet.SelectionColor = Color.Red;

                        Data = ">>>" + "/?!" + (char)13 + (char)10;
                        ComSerialPort.Write("<<< " + Data);
            RtbLog.AppendText("***** ");
            RtbLog.AppendText(DateTime.Now.ToString("dddd, d. MMMM yyyy; H:mm:ss"));
            RtbLog.AppendText(" *****");

            ComSerialPort.DataReceived += new SerialDataReceivedEventHandler(ComSerialPort_DataReceived);

            RtbOdecet.AppendText(Data);  // (ComSerialPort.ReadLine & vbCrLf)
            RtbLog.Text = RtbLog.Text + Environment.NewLine + RtbOdecetElektroMeru.Text;
            RtbLog.AppendText(Environment.NewLine);

        }

        private void ComSerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string indata = sp.ReadExisting();
            Data = indata;

            this.BeginInvoke(new EventHandler(DoUpdate));
        }

public void DoUpdate(object s, EventArgs e)
        {

            //RtbOdecet.Text = Data;
            var textAppend = string.Empty;
            var konec = false;
            ComSerialPort.BaudRate = int.Parse(CmbRychlostKomunikace.Text);
            if (Data == ">>> ")
            {
                RtbOdecet.SelectionColor = Color.Blue;
            }
            else if (Data == "<<< ")
                RtbOdecet.SelectionColor = Color.Red;

            char[] chars = Data.ToCharArray();

            foreach (var ch in chars)
            {
                Console.WriteLine((int) ch);
                // kdy je enter tak prilep konec radku
                if ((int) ch == 13)
                {
                    textAppend = "\n";
                }
                // kdyz je 0a tak prilep zacatek
                else if ((int) ch == 10)
                {
                    textAppend = ">>> ";
                }
                // kdyz je ! tak skonci
                else if((int) ch == 03)
                {
                    konec = true;
                }
                // jinak to pridej
                else
                {
                    textAppend = ch.ToString();
                }
            }

                        RtbOdecet.Text += textAppend;

                        if (!konec) return;
            BtnOdecetElektroMeru.Enabled = true;
            TxtZprava.Text = "Data ze zařízení byla vyčtena.";
            Thread.Sleep(100);
            ComSerialPort.DiscardInBuffer();
            ComSerialPort.Close(); //now close the form
        }

Chci docílit: Rád bych viděl všechna data, jež se načtou nejen na výstupu a tím pádem se uložila do Logu, kam se rozhodně uloží, to je už ošetřené.
Díky za pomoc při nalezení chyb(y) a vyřešení problému.

 
Odpovědět
5.10.2022 18:05
Avatar
Ghst
Člen
Avatar
Ghst:12.10.2022 16:16

Ahoj,

zkus příkaz pro čtení zapsat pomocí software hercules, třeba je špatnéé konfigurace, nebo hw neodpovídá.

Poté zkus použít kód z následujícího odkazu
msdn

Jestli to bude fungovat, podle mě máš divočinu někde zde

this.BeginInvoke(new EventHandler(DoUpdate));

Dej si do toho eventu breakpoint a uvidíš, odkrokuj si to.

 
Nahoru Odpovědět
12.10.2022 16:16
Avatar
Odpovídá na Ghst
Daniel Semerák:13.10.2022 18:49

Už jsem to vyřešil mezitím s pomocí jednoho člověka.

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
13.10.2022 18:49
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.