Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 29.05.2012
Сообщений: 31
1

Изменение кодировки при отправке числовых сообщения на com порт

17.11.2013, 13:30. Показов 1803. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! При отправке числовых сообщения на com порт выводятся непонятные символы. Пробовал как то перевести на Unicode, Utf-8 и т д, но результат один и тот же. Собственно, как решить эту задачу?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;
 
namespace SerialTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string line;
            byte[] data = new byte[5];
            int i = 1;
            data[0] = 64;       // '@'
            data[4] = 64;
            
            string[] names = SerialPort.GetPortNames();
            Console.WriteLine("Serial ports:");
            foreach (string name in names)
            Console.WriteLine(name);
            Console.Write("Choose one:");
            SerialPort port = new SerialPort(Console.ReadLine());
            port.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived);
            port.Open();
            
            while (i < 4)
            {
                data[i++] = byte.Parse(Console.ReadLine());
            }
            port.Write(data, 0, data.Length);                                 
            Console.Write("Port is closed\n");
            Console.ReadKey();            
        }        
        static void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {  
            Console.WriteLine((sender as SerialPort).ReadExisting());
        }
 
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.11.2013, 13:30
Ответы с готовыми решениями:

Изменение сообщения при отправке формы обратной связи
Есть страница &lt;?PHP if (!empty($_POST)){ $myemail = &quot;salnikovandrey@list.ru&quot;; ...

Зависание программы при отправке в com порт
Всем доброго времени суток! Я совсем уж новичок в программировании на c# (до этого писал на...

Ошибка при отправке сообщения
Доброго времени суток. При отправке сообщения возникает ошибка: Порт 25, сервер smtp.gmail.com....

Исключение при отправке сообщения
При отправке сообщения появляется исключение: Client does not have permissions to send as this...

4
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
17.11.2013, 16:08 2
ASCII
0
1 / 1 / 0
Регистрация: 29.05.2012
Сообщений: 31
18.11.2013, 13:09  [ТС] 3
При ASCII так же все... может я что то не так делаю?

C#
1
2
3
4
5
6
7
static void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            byte[] b = new byte[128];
            (sender as SerialPort).Read(b, 0, b.Length);
            string s = Encoding.ASCII.GetString(b);
            Console.WriteLine(s);
        }
Изображения
 
0
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
19.11.2013, 06:56 4
Это что, консоль ?
А у консоли какая кодировка назначена ?
Что вернулось из модема лучше под отладчиком смотреть, чем под консолью. Будет меньше мест для перекодировки. Может быть там всё нормально из порта приходит. Если в консоли кракозяблы это ещё ничего не значит. Вообще для начала надо понять, что приходит из порта. Может там вообще бинарнве данные.
0
1 / 1 / 0
Регистрация: 29.05.2012
Сообщений: 31
19.11.2013, 15:05  [ТС] 5
У консоли поставил Unicode по умолчанию.

Вот решил проблему через перевод байтового шестнадцатеричного числа в стринговое десятичное. Теперь заметил другую проблему, что числа, вводимые и выводимые на портах, не должны превышать 2-х знаков, иначе ошибка на строке перевода как раз.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Program
    {
        static void Main(string[] args)
        {
            byte[] data = new byte[6];
            int i = 1;
            data[0] = 64;       // '@'
            data[5] = 64;
 
            string[] names = SerialPort.GetPortNames();
            Console.WriteLine("Serial ports:");
            foreach (string name in names)
                Console.WriteLine(name);
            Console.Write("Choose one:");
            SerialPort port = new SerialPort(Console.ReadLine());
            port.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived);
            port.Open();
 
            while (i < 4)
            {
                string s = Console.ReadLine();
                data[i++] = byte.Parse(s, System.Globalization.NumberStyles.HexNumber);
            }
            byte crc = Crc8.ComputeChecksum(data[1], data[2], data[3]);
            byte check = Crc8.ComputeChecksum(data[1], data[2], data[3], crc);
            data[4] = byte.Parse(crc.ToString(), System.Globalization.NumberStyles.HexNumber);
            if (check != 0)
            {
                Console.WriteLine("Error in the checksum");
            }
            Console.WriteLine(crc);
 
            port.Write(data, 0, data.Length);
            Console.Write("Port is closed\n");
            Console.ReadKey();
        }
 
        static void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            byte[] b = new byte[6];
            byte[] dat = new byte[10];
            (sender as SerialPort).Read(b, 0, b.Length);
            string s1 = Encoding.Default.GetString(b, 0, 1);
            string s2 = BitConverter.ToString(b, 1, 4).Replace("-", " ");
            string s3 = Encoding.Default.GetString(b, 5, 1);
            string str = s1 + " " + s2 + " " + s3;
            Console.WriteLine(str);
            Console.WriteLine("Check CRC8");
            byte crc = Crc8.ComputeChecksum(b[1], b[2], b[3]);
            Console.WriteLine(crc);
        }
    }
Добавлено через 23 минуты
кажется это из-за байтового массива
0
19.11.2013, 15:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2013, 15:05
Помогаю со студенческими работами здесь

Подвисает порт RS232 при отправке данных из кода
При отправке в COM через Hercules устройство отвечает нормально, но при отправки через мое...

BSOD при работе в браузере Mozilla Firefox, при переходах или отправке сообщения
Доброго времени) Прошу помощи у специалистов. Блюскрин возникает при работе в браузере Mozilla...

Сохранность данных при отправке сообщения
вот пример Отправка сообщения через WCF IService_wcf.cs using System; using...

Вывод сообщения при отправке формы
Здесь я принимаю форму и записываю в файл &lt;?php define('GUEST','guest.txt');...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru