Hirdetés
-
Megérkezett Magyarországra a Samsung új OLED gaming monitora
ph Az Odyssey OLED G8 32 hüvelyes, sík OLED panellel dolgozik.
-
Olcsó USB WiFi AC adapter
lo Egy olcsó WiFi AC USB adapter jó szolgálatot jelenthet, ha az új router csak elvileg támogatja a 2,4 GHz-es átvitelt.
-
Lőn világosság: megérkezett új fénymérőnk
ma A márka és a metódus maradt, gyorsan pótoltuk a Honor 200 Pro méréseit.
Új hozzászólás Aktív témák
-
Sziasztok!
Egy kis segítséget szeretnék kérni. Nem vagyok túl jártas a C# nyelvben, de össze kellene raknom egy kis programot. Amivel gondom akadt, hogy a programnak soros porton keresztül kell adatot fogadnia és küldenie.
Össze ollóztam a netről egy kis programot, amivel a kommunikációt akartam lepróbálni, de sajnos csak részben működik. A program fogadni képes a portra érkező adatot, de ha küldök rá akkor ledob hibával, a „sendSerialPort.Open();” sort jelöli ki és valami olyasmi volt a hibaüzenet hogy nincs jogosultságom (nem vagyok otthon így nem tudom pontosan).
Ha valakinek van ötlete, hogy mi lehet a hiba a programban vagy tud egy jó leírást soros port kommunikációjához esetleg akad egy működő példa program soros portra azt nagyon megköszönném.
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
SerialPort port = new SerialPort("COM4");
port.BaudRate = 9600;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.DataBits = 8;
port.Handshake = Handshake.None;
port.RtsEnable = true;
port.DataReceived += Port_DataReceived;
port.Open();
Console.WriteLine("Küldj üzenetet a COM4 portra:");
while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape)) {
WriteData(Console.ReadLine());
}
port.Close();
sendSerialPort.Close();
}
static SerialPort sendSerialPort = new SerialPort("COM4");
private static void WriteData(string readLine)
{
if(sendSerialPort.IsOpen == false)
{
sendSerialPort.BaudRate = 9600;
sendSerialPort.Parity = Parity.None;
sendSerialPort.StopBits = StopBits.One;
sendSerialPort.DataBits = 8;
sendSerialPort.Handshake = Handshake.None;
sendSerialPort.RtsEnable = true;
sendSerialPort.Open();
}
sendSerialPort.WriteLine(readLine);
}
private static void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
var sp = (SerialPort)sender;
string dataReceived = sp.ReadExisting();
Console.WriteLine("A vissza jövö uzenet a COM4 port ra: " + dataReceived);
}
}
}[ Szerkesztve ]
-
Sikerült megírni amit szerettem volna, de nem lett túl elegáns, ami valószínűleg csak az én járatlanságomnak köszönhető.
A port kommunikáció elvár működése: a „munkagép” küld egy üzenetet a soros porton keresztül a PC-nek miszerint várja a következő adatot. A program ezt az eseményt érzékelve egy tömbből elküldi a következő adatot és várja az újabb adatkérést.A gondom azzal volt, hogy a példa programban amit sikerült életre kelteni a küldés és fogadás külön metódus, és nem sikerült egybe gyúrnom a kettőt. Szerintem az egyik ideális megoldás az lenne, hogy a fogadás metódusnál megtörténik az esemény kezelés és az meghívná a küldés metódust. Ezt viszont nem tudtam megírni mert ahhoz, hogy meghívjam a küldésnek át kell adnom a többek között a ’port’-ot is, de azt meg nem tudtam bevinni a ’Port_DataReceived’-hez.
A jelenlegi működés az hogy ha jön üzenet akkor egy változóba írok ’mentes_valtozo’ ezt a változót egy ciklusban (main, using) kiértékelve meghívom a küldés metódust és nullázom a ’mentes_valtozo’-t.
using (var port = new SerialPort("COM" + cp))
{
port.BaudRate = 9600;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.DataBits = 8;
port.Handshake = Handshake.None;
port.RtsEnable = true;
port.DataReceived += Port_DataReceived;
port.Open();
while (fo_tomb_index <= (fo_tomb_merete-1))
{
if (mentes_valtozo != null)
{
WriteData(port, fo_tomb[fo_tomb_index]);
mentes_valtozo = null;
Console.WriteLine(fo_tomb[fo_tomb_index]);
fo_tomb_index++;
}
}
}
}
private static string mentes_valtozo;
private static void WriteData(SerialPort port, string readLine)
{
port.WriteLine(readLine);
}
private static void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
var sp = (SerialPort)sender;
string dataReceived = sp.ReadExisting();
mentes_valtozo = dataReceived;
}[ Szerkesztve ]
-
-
Köszönöm a válaszokat!
Lehet nem volt egyértelmű, így leírom pontosabban a működést.
A munkagép egy fűrészgép léptető motorral mikrovezérlővel stb, ez kapcsolódik a PC-hez.
A program elindítása után feldolgozza az adatokat egy file-ból és elkészít egy tömböt mely a vágandó deszkák méretét tartalmazza vágási sorrendben. Nem szükséges fejléc vagy egyéb azonosítás.Elsőnek a fűrészgép üzen hogy kéri az adatot -> a PC elküldi az első deszka hosszát, ez ismétlődik a tömb végéig. Az üzenet általában 4 karakter. A deszka hosszon kívül küldi még ha új darabot kell betenni vagy ha minden ki lett vágva, ezek is a tömbbe vannak berendezve a megfelelő helyre, de ezek most nem relevánsak illetve megoldottak.
Megnéztem és az üres pörgés valóban felviszi a proci terhelését, szóval ezt tényleg át kell alakítanom.
A timeout-on már én is gondolkoztam, hogy azt valahogy le kell kezelni ha egy idő után nem válaszol a munkagép. Egyenlőre nem rendelkezem azzal információval hogy mennyi ideg tart egy vágás.
Amiket írtatok igyekszem értelmezni, azt hiszem lesz még kérdésem
-
Szia!
Egy olyan kérdésem lenne, hogy a program által kiküldött string végére mindig tesz egy "\r\n" -t (új sor, előre ugrás). Valahogy megoldható, hogy ezeket ne küldje csak a string-et?
A program igazából jól működik csak valami gondja van a vezérlőnek és próbáljuk kizárni a lehetséges hibákat hátha ez segítene.
-
Tiszteletem!
Lenne egy valószínűleg amatőr kérdésem.
Ha generálok egy listát ami változó tartalmú/elemszámú lehet és a listából RadioBotton-okat hozok létre akkor hogyan tudom egy eseménykezeléssel lekérdezni hogy melyik lett kiválasztva?
foreach (string elem in lista)
{
RadioButton rdo = new RadioButton();
rdo.Text = elem;
rdo.Location = new Point(5, rdo_y);
bool CheckedChanged = false;
this.Controls.Add(rdo);
rdo_y += 20;
} -
Köszönöm. Azt tudom hogy ezek kellenek, illetve ezeket találtam általában a leírásokban is, de sehogy nem akar összejönni. Lepróbálgattam az "iskola példákat" azok persze mennek, de azokban konkrét kirakott radiobutton-ok vannak amikre lehet CheckedChanged -et dobni, a sender-t meg nem is igazán értem igazán, azt is csak egy konkrét rb-vel tudtam meghívni és amit kiírt azzal se mentem sokra.
Nyilván én csinálok valamit rosszul, de tényleg nem jövök rá hogy mit.
[ Szerkesztve ]
-
válasz
Zalanius #8700 üzenetére
Köszönöm!
Próbálkoztam én az eseménykezelő hozzáadásával is, de rosszul használtam a sender-t. Az esemény elindításával meg nem értem semmit mert nem tudtam megállapítani hogy melyik kiválasztásra indult el.
Hibásan a "sender.ToString()" -el próbálkoztam a "((RadioButton)sender).Text" helyett.
Köszönöm, így most már jó
[ Szerkesztve ]
-
Tiszteletem!
Egy beléptető rendszer „SQLite format 3” adatbázis fájlt hoz létre, ebből kellene adatokat kinyernem és dolgoznom vele. Egy bowser-el megnyitottam a file-t, látom benne a szükséges táblákat/adatokat.Azt szeretném kérni, ha valaki jártas az SQLite használatában egy pár sorban mutassa meg a szintaktikát, hogyan tudok megnyitni és kiolvasni (csak olvasni kell) egy ilyen adatbázist. Vagy ha van valahol egy egyszerű leírás róla azt is szívesen fogadom.
A VisualStudio-hoz kell valamilyen kiegészítőt telepítenem az SQLite használatához?
-
Keem1 és joysefke köszönöm a válaszokat.
Próbálom értelmezni amit írtatok :D ha valami nem megy majd jövök.
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Samsung Galaxy Watch 4 Classic 46mm, E-SIM, Kártyafüggetlen, 1 Év Garanciával
- Samsung Galaxy S21+ 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
- Beats Studio 3 Wireless /// Makulátlan Állapot // Számla + 6 Hónap Garancia
- 1More ComfoBuds Pro Vezeték nélküli fejhallgató ZAJSZŰRÉSSEL /// ÚJ // Számla + garancia
- K-39 Vezeték Nélküli Fülhallgató ( Stereo Headset ) /// Új // Számla + 1 Év Garancia