Keresés

Új hozzászólás Aktív témák

  • G.A.

    aktív tag

    válasz joysefke #9115 üzenetére

    cattus, joysefke
    Köszönöm az irányba igazítást! Így már megy is.

  • G.A.

    aktív tag

    Üdv!

    Egy saját class-t szerettem volna létrehozni:
    public class Avr_Registers
            {
                public string Name
                { get; set; }
                public byte Value
                { get; set; }
                public string[] Bit_Names
                { get; set; }
    }
    amivel már a teszt foo()-ban gondo akadt:
    public void AVR_Register_Test()
            {
              Avr_Registers[] AVR_Regz =new Avr_Registers[256];
                for (UInt64 i = 0; i < 0x08; i++)
                {
                  AVR_Regz[i].Name =  "Reg" + i.ToString();    << már itt hibát ir ki
                    AVR_Regz[i].Value = (byte)i;
                    for (byte b = 0; b < 8; b++)
                    {
                        AVR_Regz[i].Bit_Names[b] = "Bit" + i.ToString() + b.ToString();
                    }
                    write_to_uart_screen(AVR_Regz[i].Name + " value = " + AVR_Regz[i].Value.ToString() + "\r\n");
                    for (byte y = 0; y < 8; y++)
                    {
                        write_to_uart_screen(AVR_Regz[i].Bit_Names[y] + "\r\n");
                    }
                }
    }

    A hiba:
    "System.NullReferenceException: 'Az objektumhivatkozás nincs beállítva semmilyen objektumpéldányra.' "

    Nem tudok a változóimnak (új) értéket adni.

    A legidegtépőbb számomra, hogy akármilyen módon próbálom megoldani nem megy, pedig vagy egy tucat "referencia" kódot találtam a neten, amik leginkább erre a félépítésre hajaznak:
    [link]

    A vicc, hogy van egy másik, egy array-változós class-om, ami meg simán megy, ahogy azt elképzeltem.

  • G.A.

    aktív tag

    válasz G.A. #9111 üzenetére

    Az if() feltétel nem segített. Viszont a
    CheckedListBox.Properties.CheckOnClick = true
    csökkenti a hibák számát, de nem szünteti meg.

  • G.A.

    aktív tag

    válasz bandi0000 #9110 üzenetére

    Majdnem eltaláltad, csak fordítva.
    Ha CheckedListBox_SelectedValueChanged() hívom meg, akkor utána NumUpDown_ValueChanged() is meg lesz hívva. Ez lehet a hiba forrása?
    Talán egy if()-el megoldom, hogy akkor ne fusson le, ha a CheckedListBox_SelectedValueChanged() hívta a fv-t. Tesztelem is...

  • G.A.

    aktív tag

    Üdv!

    Egy NumUpDown számlálót (0-255) és egy 8 paraméterrel rendelkező CheckedListBox "értékeit" szeretném szinkronban megjeleníteni. Azaz ha egyiket módosítom, akkor a másik is változzon.
    Ehhez Evenet interruptokat használok.
    Ha a felhasználó a NumUpDown-t változtatja, akkor annak az Event interruptja megváltoztatja a CheckedListBox "értékeit".
    A másiknál vica-versa, de itt már problémás a dolog. Néha megy, néha nem.

    private void NumUpDown_ValueChanged(object sender, EventArgs e)
            {
                    byte temp = (byte)NumUpDown.Value;
                    for (int i = 0; i < CheckedListBox.Items.Count; i++)
                    {
                        CheckedListBox.SetItemChecked(i,IsBitSet(temp,i));
                    }
                CheckedListBox.Refresh();
            }

    private void CheckedListBox_SelectedValueChanged(object sender, EventArgs e)
            {
                byte temp = 0;
                for (int i = 0; i < CheckedListBox.Items.Count; i++)
                {
                    if (CheckedListBox.GetItemChecked(i))
                    {
                        temp += (byte)Math.Pow(2, (i % 8));
                    }
                }
                NumUpDown.Value = (decimal)temp;
                NumUpDown.Refresh();
    }

    A hibát leginkább úgy tudnám jellemezni, hogy akkor jön elő, ha túl gyorsan jelölöm be (vagy ki) a mezőket CheckedListBox-ban. Merre keressem a hibát?

  • G.A.

    aktív tag

    válasz G.A. #6588 üzenetére

    Tárgytalan.
    Más (is) a gond. Egész sok mindent összekuszáltam.

  • G.A.

    aktív tag

    Üdv!

    Egy TCP alapú adatküldő/fogadó alkalmazást szeretnék készíteni, ehhez írtam egy alap programot.

    Jelenleg egy hibája van, csak 1 csomagot képes elküldeni, utána nem csinál semmit. Nem ír ki hibát, nem fagy le, de csak a programból való kilépés majd újraindítás után tud csomagot küldeni. Egyet.

    A program 2-3 szálon fut, ami szerintem a hiba forrása.

    public partial class Form1 : Form
    {
    Stream tcp_stream;
    public Form1()
    {
    InitializeComponent();
    }

    public void TCP_Client_Init()
    {
    c_src_port = Convert.ToInt32(client_src_port.Text);
    c_dst_port = Convert.ToInt32(client_dst_port.Text);

    client_ips = Dns.GetHostAddresses(client_ip_address.Text);
    TCP_Client = new TcpClient();

    try
    {
    TCP_Client.Connect(client_ips[0], c_dst_port);
    }
    catch (Exception e)
    {
    Close_Client();
    }
    if(run_client)
    {
    tcp_stream = TCP_Client.GetStream();

    TCP_Client.Client.ReceiveTimeout = 100;
    TCP_Client.Client.SendTimeout = 100;
    }
    }

    public void Run_TCP_Client_Listen()
    {
    bool client_rxd_packet = false;
    while(run_client)
    {
    try
    {
    client_rxd_packet = true;
    tcp_stream.Read(client_BUFFER, 0,256);

    string value = Encoding.ASCII.GetString(client_BUFFER);
    write_to_rxd_screen(value);

    client_BUFFER = null;
    }
    catch (Exception e) { }

    if(client_rxd_packet)
    {
    client_rxd_packet = false;
    }
    }
    TCP_Client.Close();
    }


    public void Client_Send_TCP_String(string value)
    {
    //tcp_stream = TCP_Client.GetStream(); // HIBA <<-- ITT
    client_BUFFER = Encoding.ASCII.GetBytes(value);
    try
    {
    tcp_stream.Write(client_BUFFER, 0, client_BUFFER.Length);
    }
    catch (Exception e)
    {
    Close_Client();
    }

    }
    }

    A hiba a Client_Send_TCP_String() funkció első sorában van.
    Ha kihagyom a tcp_stream = TCP_Client.GetStream(); sort akkor 1 csomagot el tud küldeni, de többet nem.
    Ha beírom, akkor ez a hibaüzenet jelenik meg:
    An unhandled exception of type 'System.InvalidOperationException' occurred in System.dll

    Additional information: A művelet nem engedélyezett nem csatlakoztatott szoftvercsatornákon.

    A Client_Send_TCP_String() akkor fut le, amikor a Send gombra kattintok (ezt kihagytam a fenti kódból).
    A Run_TCP_Client_Listen() viszont egy másik szálon fut.

    Ha jól értelmeztem a hibakódot, akkor a gondom az, hogy a tcp_stream-et 2 szálon egy időben használnám. A tcp_stream.Read()-nél, ill. a tcp_stream.Write()-nál.

    Ezt valamilyen invoke (módszer/funkció)-val lehetne megoldani? Hogyan?

  • G.A.

    aktív tag

    válasz kingabo #6526 üzenetére

    Köszi a tippet!
    A két kliens a gond.

    ...
    public static string ip_address_string = "192.168.0.11";
    public static int src_port = 9800, dst_port = 8900;

    IPEndPoint AVREndPoint = new IPEndPoint(IPAddress.Parse(ip_address_string), dst_port);
    UdpClient client = new UdpClient(src_port);

    public Form1()
    {
    InitializeComponent();
    }
    ...

    A klienst ha így hozom létre, a változók után, de a Form1 előtt, akkor a port probléma megoldódott! :)

    Sajnos, így a GUI-ból nem tudom módosítani a portokat.

  • G.A.

    aktív tag

    válasz kingabo #6524 üzenetére

    Igen azt szeretném. Bejövő a 9800as portot és ha küldeni akarok, akkor a forrás port is a 9800as lenne.

    Úgy mint itt:

  • G.A.

    aktív tag

    Üdv!

    A problémám a következő:
    Építettem, pontosabban építgetek, egy mikorcontrollert, amit hálózatra kötnék. Hogy az eszközt távolról is elérhessem írtam hozzá C#-ben egy GUI-s alkalmazást.

    A kommunikációra az UDP protokollt választottam, mivel sokkal egyszerűbb, mint a TCP.
    A program külsőre így néz ki:

    A felső sorokban a Wireshark által kiírt csomagok láthatóak. A hálózaton a 11-es gép a vezérlő, a 8-as a PC.

    Látható, hogy megy a küldés és a fogadás is, ami nem megy az a a programban a forrás port 9800-re való beállítása. Pontosabban az megy, csak ekkor a program összeomlik, a következő hibaüzenettel:

    Additional information: Az összes szoftvercsatorna-cím használatának általában csak egy módja (protokoll/hálózat cím/port) engedélyezett

    Tehát jelenleg arra nem vagyok képes, hogy a beérkezett és a küldendő csomag source<-> destination portjait fel tudjam cserélni.

    A kód:
    namespace Smart_Home
    {
    public partial class Form1 : Form
    {
    public static byte[] data = new byte[1536], TX_BUFFER = new byte[1536], RX_BUFFER = new byte[1536];
    public static bool connection_status = false;
    public static byte[] IP_Address = new byte[4];
    public static string ip_address_string;

    public Form1()
    {
    InitializeComponent();
    }

    public void write_to_screen(string value)
    {
    if (InvokeRequired)
    {
    this.Invoke(new Action<string>(write_to_screen), new object[] { value });
    return;
    }
    screen.Text += value;
    }

    public void RecieveChallenge()
    {

    IPEndPoint AVREndPoint = new IPEndPoint(IPAddress.Parse(rx_ip_address.Text), Convert.ToInt32(rx_dst_port.Text));
    UdpClient client = new UdpClient(Convert.ToInt32(rx_dst_port.Text));

    while (connection_status)
    {
    RX_BUFFER = client.Receive(ref AVREndPoint);
    write_to_screen(Encoding.ASCII.GetString(RX_BUFFER));
    write_to_screen(Environment.NewLine);
    }
    client.Close();
    }

    public void connect_Click(object sender, EventArgs e)
    {


    if (rx_ip_address.TextLength != 0 && rx_dst_port.TextLength != 0)
    {
    if (!connection_status)
    {
    connect.Text = "Disconnect";
    connection_status = true;
    send.Enabled = true;
    Thread recieveChallengeThread = new Thread(new ThreadStart(RecieveChallenge));
    recieveChallengeThread.Start();
    }
    else
    {
    connect.Text = "Connect";
    connection_status = false;
    send.Enabled = false;
    }
    }
    }

    public void send_Click(object sender, EventArgs e)
    {
    IPEndPoint AVREndPoint = new IPEndPoint(IPAddress.Parse(tx_ip_address.Text), Convert.ToInt32(tx_dst_port.Text));
    UdpClient client = new UdpClient(Convert.ToInt32(tx_src_port.Text));
    TX_BUFFER = Encoding.ASCII.GetBytes(send_data.Text);
    client.Send(TX_BUFFER, TX_BUFFER.Length, AVREndPoint);
    client.Close();
    }
    }
    }

  • G.A.

    aktív tag

    válasz sztanozs #6279 üzenetére

    Üdv!

    Igen a using MCP2210 az a DLL file használatához kell.

    Még új vagyok a C#-ban, kérlek javíts ki ha rosszul tudom.
    A class MCP2210_Function amolyan header file-ként tekintem, amibe funkciókat helyeztem.
    print_MCP2210_error
    print_MCP2210_settings
    MCP2210_Settings
    ... stb.

    Amikor a static void Main()-ben használom az egyiket, pl.: MCP2210_Functions.print_mcp2210_setting()-et
    akkor a benne lévő kód lefut, majd amint a tartalma végére ér, az összes benne lévő változót "eldob", vagy itt tévedek?

    Amit most tapasztaltam.
    Véletlenül nem kapcsoltam be az áramkört, így futtattam a kódot, így már az első print-nél hibázott.
    Ekkor az jutott eszembe, mi van, ha valahogy a többinél megszakad a kapcsolat és ezért kapok fura értékeket?

    Így arra gondoltam, mi lenne ha beilleszteném a print-be még ezt a sor:
    bool isConnected = UsbSpi.Settings.GetConnectionStatus();

    és igen, ez segített... ,de miért?

  • G.A.

    aktív tag

    Üdv!

    Egy USB-SPI átalakítóhoz (Microchip - IC: MCP2210) írnék a parancssorban lefutó alkalmazást.
    Jól haladtak eddig a dolgok, de valami nem állt össze, így a kódot lényegében elölről kezdtem, majd apránként adtam hozzá a kívánt funkciókat.

    Már az elején találtam valamit amit nem vagyok képes felfogni, hogy mi lehet a baj?

    A kód egyszerű. Csak ki kéne belőle olvasni a beállításait, majd azokat átírja és ismét kiolvassa, majd harmadszor is.

    A gond, hogy elsőre jól olvassa ki, majd a második és harmadik olvasás is értelmetlen eredményeket ad.
    A szépség az egészben, hogy a kiolvasást egy funkcióba (MCP2210_Functions.print_mcp2210_settings())
    helyeztem el, szóval ugyanaz a kód elsőre megy, aztán meg nem...

    Ez egy kód hiba lenne?

Új hozzászólás Aktív témák

Hirdetés