Подключение к COM - порту - C#
Формулировка задачи:
Добрый день, делаю подключение платы к программе на c#, общение должно происходить по RS-485, по протоколу WAKE.
Плата работает правильно(проверял через программу WakeUp!, все команды понимает все нормально), авторы протокола WAKE дали в открытый доступ dll для работы с платой по их протоколу но она написана на С++, я делаю вот такой импорт функций из dll в с++ это выглядит вот так
собственно
bool AccessCOM(char *P) - функция проверяет доступность порта. В качестве параметра передается имя порта (например, "COM1"). Возвращает true в случае доступности порта.
bool OpenCOM(char *P, DWORD baud) - функция открывает порт. В качестве параметров передаются имя порта (например, "COM1") и скорость в бодах, которая может принимать одно из стандартных значений (например, 115200). Возвращает true в случае успешного выполнения. Функция устанавливает на линии DTR уровень -12В, а на линии RTS уровень +12В.
Пытаюсь проверить порт на доступность функцией AccessCOM и она возвращает True, то есть с портом все нормально и можно подключаться, но когда я выполняю функцию OpenCOM то мне возвращается False, помогите, не могу понять что делаю не так
[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)
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(""); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д