Diskuze: Prosím o kontrolu kódu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Začni tím, že sem kód vložíš pomocí tlačítka. Tohle nikdo luštit chtít nebude
Hmm tak tady ani nejde smazat svůj vlastní příspěvek?
Nevím jak kód nahrát aby se v tom někomu chtělo hrabat.
Zkoušel jsem přes "VYBRAT SOUBORY" nabízí to jen obrázky, po výběru volby
"všechny soubory" to stejně nic nenahrálo.
Když kliknu na dlouhý zdroják, tak jsem ho uložil, ale zase není dostupný
v psaní příspěvku...nevím jak to děláte.
Tak mě za to snad neodepíšete, jsem starší člověk.....
Takže prosím polopatě: Jak sem vložit kód?
Děkuji
Nejde mi ani tak o celý kód, jako o tuto část
VÝŇATEK Z KÓDU:
SerialPort sp = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
public Form1()
{
InitializeComponent();
}
int a = 7;
private void button1_Click(object sender, EventArgs e)
{
sp.Open();
sp.Write(a.ToString());
label1.Text = a.ToString();
sp.Close();
}
OTÁZKA:
Odešle se na COM1 vždy po stisku Button1 číslo 7?
nad oknem, do kterého píšeš jsou různá tlačítka - jedno z nich je </> - na to klikni a pak tam vlož kód
Oním "tlačítkem" bylo myšleno nad zadávacím formulářem druhé zleva "</>", protože pak je to přehlednější
public Form1()
{
InitializeComponent();
}
int a = 7;
private void button1_Click(object sender, EventArgs e)
{
sp.Open();
sp.Write(a.ToString());
label1.Text = a.ToString();
sp.Close();
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
using System.Runtime.InteropServices;
namespace Test
{
public partial class Form1 : Form
{
SerialPort sp = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
public Form1()
{
InitializeComponent();
}
int a = 7;
private void button1_Click(object sender, EventArgs e)
{
sp.Open();
sp.Write(a.ToString());
label1.Text = a.ToString();
//Thread.Sleep(800);
sp.Close();
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.NumPad9)
{
a = 1;
button1_Click(sender, e);
}
else if (e.KeyCode == Keys.NumPad6)
{
a = 2;
button1_Click(sender, e);
}
else if (e.KeyCode == Keys.NumPad3)
{
a = 3;
button1_Click(sender, e);
}
else if (e.KeyCode == Keys.NumPad1)
{
a = 4;
button1_Click(sender, e);
}
}
private void Form1_Load(object sender, EventArgs e)
{
// Get a list of serial port names.
string[] ports = SerialPort.GetPortNames();
string a = "VOLNÝ SÉRIOVÝ PORT V ZAŘÍZENÍ JE: ";
// Display each port name to the console.
foreach (string port in ports)
{
//MessageBox.Show(a + port);
//textBox1.Text = (a + port);
}
Console.ReadLine();
}
private void Form1_Activated(object sender, EventArgs e)
{
this.BackColor = Color.Green;
textBox1.Focus();
}
private void Form1_Deactivate(object sender, EventArgs e)
{
this.BackColor = Color.Gray;
this.Activate();
textBox1.Focus();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text == "3")
{
a = 1;
button1_Click(sender, e);
textBox1.Text = null;
}
else if (textBox1.Text == "6")
{
a = 2;
button1_Click(sender, e);
textBox1.Text = null;
}
else if (textBox1.Text == "9")
{
a = 3;
button1_Click(sender, e);
textBox1.Text = null;
}
else if (textBox1.Text == "7")
{
a = 4;
button1_Click(sender, e);
textBox1.Text = null;
}
else
textBox1.Text = null;
}
private void button3_Click(object sender, EventArgs e)
{
this.Activate();
}
}
}
Paráda, pro příště to budu vědět.
Díky.
ano to by mělo fungovat
ale takhle ani nevíš , jestli se ti port otevřel
úprava:
private void button1_Click(object sender, EventArgs e)
{
try//pokus o otevreni portu
{
sp.Open();
}
catch(exception ex)// pri neuspechu vypise proc se port neotevrel
{
MessageBox.Show(ex.Message);
return;
}
sp.Write(a.ToString());
label1.Text = a.ToString();
sp.Close();
}
chyb je tam více
a jinak komunikaci přes COM1 ( mimochodem, to musí být nějaký muzeální stroj - to už se jen tak nevidí ) máš vyzkoušenou ? Třeba přes nejaký hotový terminál - na síti je jich spousta?
Jenom poznámka. Sériový port se využívá ještě poměrně často. Aktuálně třeba pro komunikaci se zákaznickými displeji, pokladními tiskárnami, tiskárnami čárových kódů a podobně. Nová zařízení už obvykle využívají USB nebo RJ45, ale v provozu je spousta starších zařízení se sériovým portem. Počítače je pak potřeba rozšířit o kartu s COM porty nebo použít redukci USB-COM. Takže vůbec nemusí jít o muzeální stroj
Tak tak, COM je naprosto jednoduchý a o proti USB a díky tomu je používáme v práci ve vlastních HW zařízeních naprosto běžně v kombinaci s RJčkama, tam kde je třeba lepší traffic:)
Naprostý souhlas - mně šlo ale o konkrétní COM1 který patří RS232 interface integrovanému na základní desce, ale jak právě zjišťuju, tak výrobci základních desek ho tam dávají dodnes a i když není vyvedený na konektor - dá se napíchnout bracket na desetipinovou lištu na desce, ale třeba na noteboocích chybí COM1 (fyzicky konektor) už aspoň 10 let a musí se použít nějaký ten USB převodník či karta
Osobně bych si na takovouto investigaci vytvořil konzolovou aplikaci, a kód maximálně zjednodušil. V tvém případě by to bylo na 5 řádků - tímto se omezí množství možností problému.
Každopádně, na řádek sp.Open() dej breakpoint a aplikaci spusť s připojeným debuggerem (klávesa F5). Krokuj a pokud tam nastává chyba (exception), VS ti to oznámí a ukáže; pokud žádná chyba nenastane, data by měla být odeslána.
Co se týče propojení s druhým PC: popis "nedaří se" je dost vágní a netuším, co jsi zkusil, jak jsi testoval, jaké byly výsledky, takže těžko radit. Byl snad problém při zasouvání konektoru?
Čau,
já bych na to šel taky od základu. Nejprve bych si asi nainstaloval
nějaký virtuální COM a terminál třeba herkules se mi celkem líbí, nebo
Putty je hodně jednoduchý. A na tom bych vyzkoušel funkčnost.
Přidám jednoduchý kód pro vyzkoušení.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SimpleTCP;
using Json;
using System.IO;
using System.IO.Ports;
public partial class Form1 : Form
{
private SerialPort comPort;
public Form1()
{
InitializeComponent();
// vypise seznam dostupnych COMu do ComboBoxu
foreach (string com in SerialPort.GetPortNames())
{
cb_Ports.Items.Add(com);
}
}
//Button pro odpojeni
private void btn_Disconnect_Click(object sender, EventArgs e)
{
if (comPort.IsOpen) {
comPort.Close();
}
}
//Button pro pripojeni
private void btn_Connect_Click(object sender, EventArgs e)
{
if (cb_Ports.SelectedItem.ToString() != "")
{
comPort = new SerialPort(cb_Ports.SelectedItem.ToString(), 9600, Parity.None, 8, StopBits.One);
try {
comPort.Open();
lb_StatusCom.Text = "Open COM port";
}
catch(IOException ex){
lb_StatusCom.Text = "Open ERROR";
}
}
}
//Po stisku tlacitka vypise na linku znak 'a'
private void btn_GetInfo_Click(object sender, EventArgs e)
{
if (comPort.IsOpen)
{
comPort.WriteLine("a");
}
}
}
Snad to k něčemu bude.
Zobrazeno 14 zpráv z 14.