Подключение к COM - порту - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день, делаю подключение платы к программе на c#, общение должно происходить по RS-485, по протоколу WAKE. Плата работает правильно(проверял через программу WakeUp!, все команды понимает все нормально), авторы протокола WAKE дали в открытый доступ dll для работы с платой по их протоколу но она написана на С++, я делаю вот такой импорт функций из dll
  
        [DllImport("wsp32.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern bool AccessCOM(char[] P);
 
        [DllImport("wsp32.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern bool OpenCOM(char[] P, int baud);
в с++ это выглядит вот так
bool AccessCOM(char *P)
bool OpenCOM(char *P, DWORD baud)
собственно bool AccessCOM(char *P) - функция проверяет доступность порта. В качестве параметра передается имя порта (например, "COM1"). Возвращает true в случае доступности порта. bool OpenCOM(char *P, DWORD baud) - функция открывает порт. В качестве параметров передаются имя порта (например, "COM1") и скорость в бодах, которая может принимать одно из стандартных значений (например, 115200). Возвращает true в случае успешного выполнения. Функция устанавливает на линии DTR уровень -12В, а на линии RTS уровень +12В. Пытаюсь проверить порт на доступность функцией AccessCOM и она возвращает True, то есть с портом все нормально и можно подключаться, но когда я выполняю функцию OpenCOM то мне возвращается False, помогите, не могу понять что делаю не так
            char[] nameCom = new char[4] { 'C', 'O', 'M', '1' };
 
            bool chek = AccessCOM(nameCom);
            MessageBox.Show(chek.ToString());
 
            chek = OpenCOM(nameCom, 57600);
            MessageBox.Show(chek.ToString());

Решение задачи: «Подключение к COM - порту»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace WpfApplication4
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        SerialPort _serialPort;
        private void button_Click(object sender, RoutedEventArgs e)
        {
             _serialPort = new SerialPort("COM1",
                                        57600,
                                        Parity.None,
                                        8,
                                        StopBits.One);
            _serialPort.Handshake = Handshake.None;
            _serialPort.DtrEnable = true;
           
            _serialPort.DataReceived += _serialPort_DataReceived;
 
            _serialPort.Open();
            byte[] send = new byte[] { 0xC0, 0xD0,0x14};
            
            _serialPort.Write(send, 0, send.Length);
         
 
        }
 
        private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            MessageBox.Show("");
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы