[Źródło: https://docs.microsoft.com/en-us/dotnet/]
Opis Funkcji:
Pierwsza funkcja publiczna odpowiada za inicjalizowanie nowego wystąpienia klasy SerialPort.
- public void pub_comPortInitialization()
- {
- ComPort = new SerialPort();
- }
Następnie funkcja mająca za zadanie wyszukanie podłączonych portów COM:
- public string[] pub_getSerialPortName()
- {
- string[] enableComPorts = new string[30];
- byte i = 0;
- foreach (String s in SerialPort.GetPortNames())
- {
- enableComPorts[i] = s;
i++;
- }
- return enableComPorts;
- }
Zamknięcie otwartego portu COM:
- public void pub_comPortClose()
- {
- if (ComPort.IsOpen)
- {
- ComPort.Close();
- }
- }
Odczytanie długości wiadomości:
- public int pub_readMsgLength()
- {
- int readBytes = ComPort.BytesToRead;
- return readBytes;
- }
Odczytanie wiadomości o podanej długości:
- public byte[] pub_receiveData(int readBytes)
- {
- byte[] buffer = new byte[readBytes]; /* New buffer with received data */
- ComPort.Read(buffer, 0, readBytes); /* Read number of bytes */
- return buffer;
- }
Funkcje przesyłająca dane przez otwarty port COM:
- public bool pub_comPortSendData(byte[] toSend)
- {
- return comPortSendData(toSend);
- }
- private bool comPortSendData(byte[] dataToSend)
- {
- try
- {
- ComPort.Write(dataToSend, 0, dataToSend.Length);
- }
- catch
- {
- return false;
- }
- return true;
- }
Funkcja publiczna wywołuje funkcje prywatną, która w przypadku błędu podczas przesyłania zwraca wartość false.
W przypadku gdy chcę przesłać część tablicy z danymi wykorzystuje zmodyfikowaną funkcję do której podaje się ilość danych do wysłania:
- public bool pub_comPortSendData(byte[] toSend, byte dataLength)
- {
- return comPortSendData(toSend, dataLength);
- }
- private bool comPortSendData(byte[] dataToSend, byte dataLength)
- {
- try
- {
- ComPort.Write(dataToSend, 0, dataLength);
- }
- catch
- {
- return false;
- }
- return true;
- }
Przesłanie ciągu znaków:
- private bool comPortSendData(string dataToSend)
- {
- char[] charTable = dataToSend.ToCharArray();
- try
- {
- ComPort.Write(charTable, 0, dataToSend.Length);
- }
- catch
- {
- return false;
- }
- return true;
- }
- public bool pub_comPortSendData(string toSend)
- {
- return comPortSendData(toSend);
- }
Wykonanie połączenia z podanymi parametrami:
- public byte pub_connectSerialPort(string portName, string baudRate, string dataBits,
- string parity, string stopBits)
- {
- byte status = 0;
- status = connectSerialPort(portName, baudRate, dataBits,
- parity, stopBits);
- return status;
- }
- private byte connectSerialPort()
- {
- if (ComPort.IsOpen)
- {
- ComPort.Close();
- return 2; /* Com port was open, now we close it */
- }
- else
- {
- try
- {
- ComPort.PortName = connectPortName;
- ComPort.BaudRate = connectBaudRate;
- ComPort.DataBits = connectDataBits;
- ComPort.Parity = connectParity;
- ComPort.StopBits = connectStopBits;
- ComPort.Open();
- return 1; /* Ok*/
- }
- catch
- {
- return 0; /* Error */
- }
- }
- }
Jako argumenty pobieram wartości tekstowe ponieważ wyciągam je bezpośrednio z kontrolek Combo Box w aplikacji.
Można się połączyć poprzez edycję wcześniejszą edycję danych z informacjami o połączeniu, które zostały zdefiniowane w klasie:
Można się połączyć poprzez edycję wcześniejszą edycję danych z informacjami o połączeniu, które zostały zdefiniowane w klasie:
- public static System.IO.Ports.SerialPort ComPort;
- private string connectPortName = "";
- private Int32 connectBaudRate = 115200;
- private byte connectDataBits = 8;
- private Parity connectParity = Parity.None;
- private StopBits connectStopBits = StopBits.One;
- public string ap_connectPortName
- {
- get { return this.connectPortName; }
- set { this.connectPortName = value; }
- }
- public Int32 ap_connectBaudRate
- {
- get { return this.connectBaudRate; }
- set { this.connectBaudRate = value; }
- }
- public byte ap_connectDataBits
- {
- get { return this.connectDataBits; }
- set { this.connectDataBits = value; }
- }
- public Parity ap_connectParity
- {
- get { return this.connectParity; }
- set { this.connectParity = value; }
- }
- public StopBits ap_connectStopBits
- {
- get { return this.connectStopBits; }
- set { this.connectStopBits = value; }
- }
- public byte pub_connectSerialPort()
- {
- byte status = 0;
- status = connectSerialPort();
- return status;
- }
- private byte connectSerialPort()
- {
- if (ComPort.IsOpen)
- {
- ComPort.Close();
- return 2; /* Com port was open, now we close it */
- }
- else
- {
- try
- {
- ComPort.PortName = ap_connectPortName;
- ComPort.BaudRate = ap_connectBaudRate;
- ComPort.DataBits = ap_connectDataBits;
- ComPort.Parity = ap_connectParity;
- ComPort.StopBits = ap_connectStopBits;
- ComPort.Open();
- return 1; /* Ok*/
- }
- catch
- {
- return 0; /* Error */
- }
- }
- }
Cały kod można pobrać z dysku Google pod tym linkiem.