Avatar billede sph1nx Nybegynder
29. oktober 2008 - 09:50 Der er 3 kommentarer

Vista C# og Serial port

Jeg sidder og skal skrive til en komponent via serial porten fra C# på windows vista, kan sagtens skrive til den gennem hyperterminal.

Men fra C# sker der bare ingenting, koden jeg bruger har jeg med succes brugt på win xp før! så er der noget specielt man skal på vista for at skrive til en serial port ?

Koden jeg bruger er denne :

using System;
using System.Threading;
using System.ComponentModel;
using System.IO.Ports; 

public class SMSCOMMS
{
    private SerialPort SMSPort;
    private Thread SMSThread;
    private Thread ReadThread;
    public static bool _Continue = false;
    public static bool _ContSMS = false;
    private bool _Wait = false;
    public static bool _ReadPort = false;
    public delegate void SendingEventHandler(bool Done);
    public event SendingEventHandler Sending;
    public delegate void DataReceivedEventHandler(string Message);
    public event DataReceivedEventHandler DataReceived;   

    public SMSCOMMS(string COMMPORT)
    {
        SMSPort = new SerialPort();
        SMSPort.PortName = COMMPORT;
        SMSPort.BaudRate = 9600;
        SMSPort.Parity = Parity.None;
        SMSPort.DataBits = 8;
        SMSPort.StopBits = StopBits.One;
        SMSPort.Handshake = Handshake.RequestToSend;
        SMSPort.DtrEnable = true;
        SMSPort.RtsEnable = true;
        SMSPort.NewLine = System.Environment.NewLine;
        ReadThread = new Thread(
            new System.Threading.ThreadStart(ReadPort));
    }     

    private void ReadPort()
    {
        string SerialIn = null;
        byte[] RXBuffer = new byte[SMSPort.ReadBufferSize + 1];
        string SMSMessage = null;
        int Strpos = 0;
        string TmpStr = null;
        while (SMSPort.IsOpen == true)
        {
            if ((SMSPort.BytesToRead != 0) & (SMSPort.IsOpen == true))
            {
                while (SMSPort.BytesToRead != 0)
                {
                    SMSPort.Read(RXBuffer, 0, SMSPort.ReadBufferSize);
                    SerialIn =
                        SerialIn + System.Text.Encoding.ASCII.GetString(
                        RXBuffer);
                            if (SerialIn.Contains(">") == true)
                    {
                        _ContSMS = true;
                    }
                    if (SerialIn.Contains("+CMGS:") == true)
                    {
                        _Continue = true;
                        if (Sending != null)
                            Sending(true);
                        _Wait = false;
                        SerialIn = string.Empty;
                        RXBuffer = new byte[SMSPort.ReadBufferSize + 1];
                    }
                }
                if (DataReceived != null)
                    DataReceived(SerialIn);
                SerialIn = string.Empty;
                RXBuffer = new byte[SMSPort.ReadBufferSize + 1];
            }
        }
    }   

    public bool SendSMS(string CellNumber, string SMSMessage)
    {
        string MyMessage = null;
        if (SMSMessage.Length <= 160)
        {
            MyMessage = SMSMessage;
        }
        else
        {
            MyMessage = SMSMessage.Substring(0, 160);
        }
        if (IsOpen == true)
        {
            SMSPort.WriteLine("AT+CMGS=" + CellNumber + "r");
            _ContSMS = false;
                SMSPort.WriteLine(
                    MyMessage + System.Environment.NewLine + (char)(26));
              _Continue = false;
            if (Sending != null)
                Sending(false);
        }
        return false;
    }   

    public void Open()
    {
        if (IsOpen == false)
        {
            SMSPort.Open();
                ReadThread.Start();
        }
    }   

    public void Close()
    {
        if (IsOpen == true)
        {
            SMSPort.Close();
        }
    }   
}
Avatar billede microjet Nybegynder
29. oktober 2008 - 14:32 #1
Hejsa

Jeg har uploaded et eksempel som virker for mig i C#. Jeg bruger Vista uden problemer... Måske kan du bruge det... I hvert fald til at afkræfte at det skulle være din Vista der laver problemer!

Men der skal ikke skrives speciel kode til serielporten i vista!

Hent eksemplet her: http://www.haubac.com/Downloads/SerialPortCommunication.zip
Avatar billede sph1nx Nybegynder
29. oktober 2008 - 17:56 #2
#Microjet

Hvis man skrive f.eks "AT" i den app du har sendt, så burde der blive svaret tilbage med "OK" ikke ? altså lige som hvis jeg gjorde det fra hyperterminal, det gør den bare ikke
Avatar billede microjet Nybegynder
30. oktober 2008 - 13:28 #3
Jo! Det burde virke!... Du skriver til sidst i den streng du sender +"r" hvis det er en carrige return skal du skrive +"\r" i C#... jeg er ikke så meget inde i AT kommandoer, men "\r" svare til 0D Hex eller carrige return

Ellers kunne du jo prøve at kopiere hele Hyperterm mappen fra din XP maskine over til din vista. Det har jeg selv gjort og det virker fint, så kan du jo afprøve med Hyperterm på din vistamaskine.

Skal du bruge handshake? Det kunne jo være sat forkert op!

Det kan også være din COM-port der er brændt af... dem der sidder onboard er alt for følsomme... min er allerede deffekt efter 6mdr... jeg bruger somregel kun USB-->RS232 convertere (ATEN UC-232A er en super converter til 150kr)
Det "sjove" ved min COM1 er at jeg kan åbne og luke den, men hvis jeg skriver til den får jeg nogle mystiske fejl.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester