ADI@345 Ответов: 1

Как написать последовательный порт с помощью C#


Я сделал коммуникационное приложение последовательного порта, используя оконное приложение c#, но не смог написать код для последовательного порта . У меня есть данные в массиве, но я не могу записать этот массив данных в последовательный порт..

Пожалуйста, ответьте мне поскорее..

Что я уже пробовал:

Список

1 Ответов

Рейтинг:
0

OriginalGriff

Попробуй:

SerialPort mySerialPort = new SerialPort();
mySerialPort.BaudRate = ...  // Set your parameters;
...
mySerialPort.Open();
byte[] data = ... // your byte data;
mySerialPort.Write(data, 0, data.Length);


"Всю эту информацию я объявляю в массиве с именем array1 ,а затем вызываю этот array1 в последовательном порту записи"

Так почему же вы вчера не сказали нам: "это список целых чисел"?
С ними так просто иметь дело!
List<int> array1 = new List<int>();
array1.Add(1);
array1.Add(666);
array1.Add(int.MaxValue);
byte[] data = array1.SelectMany(BitConverter.GetBytes).ToArray();


ADI@345

где я должен вызвать свой массив ..

OriginalGriff

byte[] data = ... / / ваши байтовые данные;

ADI@345

На самом деле я хочу это знать,
Список массив1 = новый список();
Я должен написать этот array1 в serialWrite

OriginalGriff

Что это за список и как его преобразовать в последовательные данные - я этого не знаю, потому что не вижу вашего экрана. Так что дайте мне информацию для работы, и я постараюсь вам помочь - но общий список, который даже не говорит мне, что это за список, совсем не помогает!

ADI@345

Я не могу разместить свой код здесь..

OriginalGriff

Поэтому постарайтесь объяснить: я ничего не могу сделать без информации!

ADI@345

У меня есть мои данные в массиве, для которого я объявляю array1 здесь, этот array1 включает в себя мою информацию, которую я должен написать . Мне просто нужно записать этот array1 в последовательный порт записи.

OriginalGriff

Вы не можете просто написать список-неизвестного класса-в последовательный порт.
Сначала вам нужно преобразовать его в байтовые (или символьные) значения.
Подумайте об этом: даже если это был массив байтов, система на другом конце должна знать, сколько байтов ожидать, чтобы она знала, когда все это закончится!
И ваш список, вероятно, не является байтовыми значениями: это, вероятно, класс какой-то формы, что означает, что его размер в настоящее время неизвестен и может даже не быть одинаковым для двух разных экземпляров класса в списке.
Там нет общего "отправьте это .NET object", потому что последовательные порты ничего не знают о .NET!

Поэтому начните думать о том, что содержит список и что находится на другом конце последовательного порта. Чего он ждет? Ты тоже это пишешь?

ADI@345

как я буду сначала конвертировать байты или символы?

OriginalGriff

Проблема в том, что я понятия не имею, что вы пытаетесь преобразовать *из* - и это отличается, например, для int и string.
Помните, что я не могу видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли. :смеяться:

ADI@345

я не могу отправить свой код сюда..

ADI@345

Пожалуйста, дайте мне знать, буду ли я записывать свой массив записей в последовательный порт.

ADI@345

byte[] byteArray = новый байт[array1];
//Этот код дает ошибку :-
не удается неявно преобразовать тип System.коллекции.универсальный.список

OriginalGriff

Именно это я и говорю вам уже больше часа...

Ralf Meier

уважение... вы очень терпеливы ...

Ralf Meier

Что ОГ пытается тебе объяснить :
Какие данные вы заполнили (добавили )в свой общий список array1? Содержимое должно быть преобразовано (возможно, также в строку), прежде чем оно будет передано в serialport. Порт ничего не знает о содержании вашего списка ...

ADI@345

byte[] buffer = новый байт[array1]; //
как я исправлю эту строчку?. здесь array1 находится в int.. array1 содержит мою запись, которую я должен написать .. итак, должен ли я преобразовать этот array1 в строку..

Ralf Meier

Мы вращаемся по кругу ...
Мое предложение таково: вы покажете нам еще немного вашего кода и (что важно) то, что содержит ваш "array1" и как он входит в этот массив.
После этого мы должны создать своего рода метод преобразования, который создает что-то, что можно использовать для serialport. Но есть еще одна вещь, о которой мы забыли : что ждет приемник (программа на другой стороне сериального порта)? Другими словами : на какое устройство вы отправляете эти данные и что это устройство делает с этими данными ?

Если вы хотите сделать шаг вперед, вы должны начать с ответов на "наши" вопросы, и вы должны улучшить свой вопрос с большим количеством дополнительной информации.

ADI@345

Всю эту информацию я объявляю в массиве с именем array1 ,а затем вызываю этот array1 в последовательном порту записи
общественного недействительными записи(строки текста)
{
Последовательный порт mySerialPort = новый последовательный порт();
пробовать
{
mySerialPort.Имя_порта = comboBox6.Текст;
mySerialPort.Скорость = Конвертировать.ToInt32(comboBox7. Text);
mySerialPort.Открыть();

byte [] buffer = array1;
mySerialPort.Записи(буфера, 0, буфер.Длина);

}
поймать (исключение бывший)
{
Ящик для сообщений.Показать (например, сообщение);
}
mySerialPort.Рядом();

}

ADI@345

На самом деле я не могу разместить здесь весь свой код целиком...

OriginalGriff

Ответ обновлен.

Ralf Meier

Отлично... ;)
Но я полагаю, что это не решает проблему OP, потому что : Serialport.Писать-это одно, а получать данные-совсем другое. Кто получает данные ? Этот ответ (для меня) все еще отсутствует ...

OriginalGriff

К сожалению, вы можете дать правильные ответы только тем людям, которые слушают вопросы, которые вы им задаете...: вздох:
Я не уверен, что ОП понимает, что такое последовательный порт, а тем более то, что подключено на другом конце, если вообще что-то есть.

ADI@345

Согласно моему запросу, я не получаю никакого правильного ответа с вашей стороны.. я все еще путаю, как вызвать мой массив в последовательном порту записи .. если вы знаете, пожалуйста, ответьте, это срочно для меня ....

ADI@345

Я использую информацию, предоставленную вами , но одну вещь я хочу знать, что мне снова нужно объявить данные в array1 во время последовательной записи
array1. Add(1);
array1. Add(666);
массив1.Добавить(тип int.Максвеллову);
Byte[] данные = массив1.SelectMany(BitConverter.Метод getbytes).Метод toArray();

Ralf Meier

Нет... но вы должны объявить Array1 так же, как это сделал OG "List of INT"