Cześć,
mam taki problem, że w jednej funkcji muszę obsłużyć inicjalizację komunikacji RS232 i Ethernet oraz coś tam wysłać.
Problem polega na tym, że chcę inicjalizację przeprowadzić tylko raz więc użyłem warunku if, lecz dalsza część kodu odpowiedzialna za wysyłanie i odbiór nie widzi że komunikacja w ogóle była nawiązana i wyskakują błędy:
public void ProcWatek() // Procedura uruchamiana w watku
{
if (Inicjalizacja == 0)
{
isStop = true;
}
else
{
isStop = false;
}
String linia;
String PortSzeregowy;
String PortSzeregowyCaly;
SerialPort serial;
String Adres1;
String Port1;
TcpClient Klient1;
NetworkStream Stream1;
BinaryWriter SWrite;
BinaryReader Sread;
String message;
if (Inicjalizacja == 0)
{
Console.Write("Podaj port szeregowy do otwarcia [1-10]: ");
PortSzeregowy = Console.ReadLine(); // Przypisz do zmiennej Port1 odczytane dane z konsoli.
PortSzeregowyCaly = "COM" + PortSzeregowy;
SprawdzPortCOM(PortSzeregowy);
while (string.IsNullOrEmpty(PortSzeregowy) || BladCOM == 1)
{
Console.WriteLine("Podaj poprawny port szeregowy do otwarcia [1-10]: ");
PortSzeregowy = "COM" + Console.ReadLine(); // Przypisz do zmiennej Port1 odczytane dane z konsoli.
SprawdzPortCOM(PortSzeregowy);
}
serial = new SerialPort();//Deklaracja obiektu
serial.PortName = PortSzeregowyCaly;//port w DEVKIT!
serial.BaudRate = 115200;
serial.Parity = Parity.None;
serial.DataBits = 8;
serial.StopBits = StopBits.One;
serial.Handshake = Handshake.None;
try
{
serial.Open();//otwiera port
}
catch
{
Console.WriteLine("Błąd otwarcia portu - Możliwe zajęcie.");
Console.WriteLine("\n");
}
Console.Write("Podaj adres IP serwera pomiarowego: "); // Wypisz tekst w konsoli.
Adres1 = Console.ReadLine(); // Przypisz do zmiennej Adres1 odczytane dane z konsoli.
SprawdzAdres1(Adres1); // Sprwdź poprawność adresu IP serwera pomiarowego
Console.Write("Podaj port serwera pomiarowego: "); // Wypisz tekst w konsoli.
Port1 = Console.ReadLine(); // Przypisz do zmiennej Port1 odczytane dane z konsoli.
SprawdzPort1(Port1); // Sprawdź poprawność danych zmiennej Port1.
while (string.IsNullOrEmpty(Adres1) || BladIP1 == 1)
{
Console.Write("\nPodaj poprawny adres IP serwera pomiarowego: "); // Wypisz tekst w konsoli.
Adres1 = Console.ReadLine(); // Przypisz do zmiennej Adres1 odczytane dane z konsoli.
SprawdzAdres1(Adres1); // Sprwdź poprawność adresu IP serwera pomiarowego.
}
while (string.IsNullOrEmpty(Port1) || BladPort1 == 1)
{
Console.Write("\nPodaj poprawny port serwera pomiarowego: "); // Wypisz tekst w konsoli.
Port1 = Console.ReadLine(); // Przypisz do zmiennej Port1 odczytane dane z konsoli.
SprawdzPort1(Port1); // Sprawdź poprawność danych zmiennej Port1.
}
Console.Write("\n"); // Wypisz tekst w konsoli.
Klient1 = new TcpClient(); // Program łączy się do serwera jako klient 1.
try
{
BladOtwarciaEth = 0;
Klient1.Connect(IPAddress.Parse(Adres1), Port1i); // Adres IP i port serwera do którego trzeba się podłączyć (pomiarowy).
}
catch (SocketException e)
{
Console.WriteLine("Błąd inicjalizacji połączenia: \n"); // Wypisz tekst w konsoli.
Console.WriteLine("SocketException: {0}", e); // Wypisanie błędu w konsoli.
BladOtwarciaEth = 1;
}
while (BladOtwarciaEth == 1)
{
Console.Write("Podaj poprawny adres IP serwera pomiarowego: "); // Wypisz tekst w konsoli.
Adres1 = Console.ReadLine(); // Przypisz do zmiennej Adres1 odczytane dane z konsoli.
SprawdzAdres1(Adres1); // Sprwdź poprawność adresu IP serwera pomiarowego
Console.Write("Podaj poprawny port serwera pomiarowego: "); // Wypisz tekst w konsoli.
Port1 = Console.ReadLine(); // Przypisz do zmiennej Port1 odczytane dane z konsoli.
SprawdzPort1(Port1); // Sprawdź poprawność danych zmiennej Port1.
while (string.IsNullOrEmpty(Adres1) || BladIP1 == 1)
{
Console.Write("\nPodaj poprawny adres IP serwera pomiarowego: "); // Wypisz tekst w konsoli.
Adres1 = Console.ReadLine(); // Przypisz do zmiennej Adres1 odczytane dane z konsoli.
SprawdzAdres1(Adres1); // Sprwdź poprawność adresu IP serwera pomiarowego.
}
while (string.IsNullOrEmpty(Port1) || BladPort1 == 1)
{
Console.Write("\nPodaj poprawny port serwera pomiarowego: "); // Wypisz tekst w konsoli.
Port1 = Console.ReadLine(); // Przypisz do zmiennej Port1 odczytane dane z konsoli.
SprawdzPort1(Port1); // Sprawdź poprawność danych zmiennej Port1.
}
Console.Write("\n"); // Wypisz tekst w konsoli. // Sprawdź poprawność danych zmiennej Port1.
try
{
Klient1.Connect(IPAddress.Parse(Adres1), Port1i); // Adres IP i port serwera do którego trzeba się podłączyć (pomiarowy).
BladOtwarciaEth = 0;
}
catch (SocketException e)
{
Console.WriteLine("Błąd inicjalizacji połączenia: \n"); // Wypisz tekst w konsoli.
Console.WriteLine("SocketException: {0}", e); // Wypisanie błędu w konsoli.
BladOtwarciaEth = 1;
}
}
Stream1 = Klient1.GetStream(); // Pobranie strumienia - Klient 1.
SWrite = new BinaryWriter(Stream1); // Strumień zapisu nr 1.
Sread = new BinaryReader(Stream1); // Strumień odczytu nr 1.
}
while (!isStop)//dziala w petli
{
Thread.Sleep(500);
try
{
serial.WriteLine("U");//
linia = serial.ReadLine(); //odbior
Console.WriteLine("Odebrano napiecie: " + linia);
int wartosc = Int32.Parse(linia);
if (wartosc > 10)
{
message = "1";
SWrite.Write(Convert.ToByte(message));
}
if (wartosc < 10)
{
message = "2";
SWrite.Write(Convert.ToByte(message));
}
serial.WriteLine("I");//
linia = serial.ReadLine(); //odbior
wartosc = Int32.Parse(linia);
if (wartosc > 5)
{
message = "11";
SWrite.Write(Convert.ToByte(message));
}
if (wartosc < 5)
{
message = "22";
SWrite.Write(Convert.ToByte(message));
}
Console.WriteLine("Odebrano natezenie: " + linia);
}
catch
{
Console.WriteLine("Blad odbioru danych.");
}
}
serial.Close();
}
Błędy jakie się pojawiają to:
Error 1 Use of unassigned local variable 'serial' C:\Users\Marcin\Desktop\SCRLabCw5\DevKitWatekRs232Sterowanie\Program1.cs 228 17 DevKitWatekRs232Sterowanie
Error 2 Use of unassigned local variable 'SWrite' C:\Users\Marcin\Desktop\SCRLabCw5\DevKitWatekRs232Sterowanie\Program1.cs 193 29 DevKitWatekRs232Sterowanie