Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913

Com порт и индикация происходящего

14.06.2011, 13:22. Показов 1698. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Читаю и посылаю данные в Com порт. На форме должна быть какая-то индикация. Записываю в label.Text на форме ту строку, что посылаю в порт. Но она то видна, то нет. Т.е. форма зависает? Как правильно показать на форме то, что записываю в порт? Спасибо
Мои код
1.Сам класс работы с портом
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using CellPipe7;
 
namespace SerialPortTest
 
{
  public  class SerialPortTester
  {
        SerialPort sp;
        public SerialPortTester()
        {
            string strCom = "COM1";
            sp = new SerialPort(strCom);
            sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
            sp.BaudRate = 9600;
            sp.DataBits = 8;
            sp.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "1");
            sp.DtrEnable = true;
            sp.RtsEnable = true;
            sp.Parity = (Parity)Enum.Parse(typeof(Parity), "None");
                      
        }
           public void OpenPort(string strCom)
            {
 
                try
                {  
                    sp.Open();
                }
                catch (Exception e2)
                {
                    MessageBox.Show("AAA    "+e2.ToString());
                }
                finally
                {
 
                }
                bool connChecker = sp.IsOpen;
                if (connChecker==true)
                {
                   // MessageBox.Show("Port Open  "+ strCom);
                  
                }
                else
                {
                    Console.WriteLine("Cannot open the connection to port {0}", strCom);
                }
 
            }
          void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                SerialPort sp = (SerialPort)sender;
                 //this.Invoke(new EventHandler(DoUpdate));              
               stroka = stroka + sp.ReadExisting();
 
                 if ((stroka.IndexOf(">>")) != -1) 
               {
                 // MessageBox.Show("Read: sp_DataReceived ->>" + ">>");
                   Thread.Sleep(3000);
               }
               else
               {
                  // MessageBox.Show("Read: sp_DataReceived " + stroka);
                     Thread.Sleep(3000);
               }
 
            }
            public string stroka = "";
                      public void SendToPort(string str1)
            {
                sp.Write(str1);
            }
            public void ClosePort(string strCom)
            {
 
                    bool connChecker = sp.IsOpen;
                    if (connChecker)
                    {
                        sp.Close();
                       // MessageBox.Show("Port   " + strCom + "   closed");
                      
                    }
                    else
                    {
                        MessageBox.Show("Cannot closed the connection to port " + strCom);
                    }
            }
               
            
    }
 
    }
Здесь сам код интерфейса
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
 private void buttonRestoreDefault_Click(object sender, EventArgs e)
        {
            textBoxGPRSContext.Text = "...";
            textBoxGPRSUserID.Text = "1";
            textBoxGPRSPassword.Text = "\"web\"";
            textBoxSocketdef.Text = "..."
            textBoxPackettimeout.Text = "1";
            textBoxTCPtimeout.Text = "5";
            textBoxReconnectinterval.Text = "30";
            textBoxExtraInitString1.Text = "...";
            textBoxIDSTring.Text = "Hello ";
 
        }
 
        private void buttonSendtounit_Click(object sender, EventArgs e)
        {
            lblSendData.Text = "A";
            if (comboBox1.Text == "")
            {
                MessageBox.Show("No communication port was selected.", "Connection error");
                return;
            }
 
            MessageBox.Show("Reset prees OK button.", "Connection");
            lblSendData.Focus();           
             lblSendData.Text="Try to Connect";//И ЗДЕСЬ НЕ СРАЗУ МЕНЯЕТСЯ, А ТОЛЬКО КОГДА СВРЕШИТСЯ СОБЫТИЕ
           SerialPortTester test = new SerialPortTester();
            test.OpenPort(comboBox1.Text);
            //Thread.Sleep(20000);
           bStop=false;
            lblbStop.Text = bStop.ToString();
            timerConTest.Start();
            for (int k = 0; k < 240; k++)
            {
               
                Thread.Sleep(1000);
                if ((test.stroka.IndexOf(">>")) != -1)
                {
                    MessageBox.Show("Read: wait simbol->>" + ">>");
                    lblSendData.Text = "Connected";
                     
                    test.SendToPort("7\r\n");
                    MessageBox.Show("Send 7");
                    break;
                }
                else
                {
                    if (((test.stroka.IndexOf(">>")) == -1) && (bStop == true))
                    {   
                        lblbStop.Text = bStop.ToString();
                        MessageBox.Show("No connection with unit.\r\nPlease check the cable or Power supply.");
                        return;
                    }
                }
            }
            lblSendData.Text = "Wait ...";
            Thread.Sleep(5000);
            if (((test.stroka.IndexOf("ok")) != -1) || ((test.stroka.IndexOf("OK")) != -1)) //1 response
                {
                    MessageBox.Show("Read: sp_DataReceived OK");
                    string[] sendData ={ 
                                    textBoxGPRSContext.Text,
                                    textBoxGPRSUserID.Text,
                                    textBoxGPRSPassword.Text,
                                    textBoxSocketdef.Text,
                                    textBoxPackettimeout.Text,
                                    textBoxTCPtimeout.Text,
                                    textBoxReconnectinterval.Text,
                                    textBoxExtraInitString1.Text,
                                    textBoxInitString2.Text,
                                    textBoxIDSTring.Text,
                                    textBoxFlowControlcharachter.Text};
 
                    for (int i = 0; i < sendData.Length - 1; i++)
                    {
                        test.SendToPort("#" + i.ToString() + "=" + sendData[i] + "\r\n");
                        Thread.Sleep(3000); 
 
                        if ((((test.stroka.IndexOf("ok")) != -1) || ((test.stroka.IndexOf("OK")) != -1)))
                        {
                            lblSendData.Text = "Send " + sendData[i]; //здесь не всегда видно то, что посылаю!!!Что не так?
                            
                            continue;
                        }
                        else
                        {
                            MessageBox.Show("Can not write item number " + "#" + i.ToString() + " into the unit\r\nPlease check the cable or Power supply.");
                            break;
                        }
                    }
 
                }
                else
                {
                    MessageBox.Show("Connection error");
                }
 
 
                Thread.Sleep(3000);
                test.ClosePort(comboBox1.Text);
                lblSendData.Text="Write items success!";
            }
 
        private void label1_Click(object sender, EventArgs e)
        {
 
        }
 
        private void timerConTest_Tick(object sender, EventArgs e)
        {
            bStop = true;
        }
 
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.06.2011, 13:22
Ответы с готовыми решениями:

Программа записи происходящего на экране
Ребята... кто знает программу чтобы она включалась при запуске компа и записывала всё происходящее на экране, причём не подавала никаких...

СМА BOSCH WFR-2441 ОТСУТСТВУЕТ ИНДИКАЦИЯ НА ДИСПЛЕЕ, При полностью работающей машине отсутствует индикация на дисплее
Доброго времени суток, господа, товарищи, мужчины. Попалась сегодня машина Bosch WFR-2441 (E-NR WFR-2441 /05 FD 8408 700326). ...

Создание собственного компонента, происходящего от Edit
Нужна помощь. Надо создать собственный компонент, типа Edit, но чтобы в нём вводилась информация в виде даты ( то есть в таком виде:...

6
 Аватар для L1nk91
9 / 9 / 1
Регистрация: 06.09.2009
Сообщений: 54
14.06.2011, 14:00
Exception поставь и будет тебе видно на каком этапе у тебя не работает и какая ошибка вылетает..
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
14.06.2011, 14:58  [ТС]
Где поставить?

Добавлено через 50 минут
Поставила try, catch Ошибку не выдает, но в label так и не вижу, чтобы менялся Text
0
Заблокирован
15.06.2011, 09:12
iva_a, попробуйте после изменения текста лабела поставить что-то следующее
C#
1
2
3
            Application.DoEvents();//или
            Thread.Sleep(0);//или
            Invalidate();
может поможет

или перейдите на потоки
C#
1
             lblSendData.Text="Try to Connect";//И ЗДЕСЬ НЕ СРАЗУ МЕНЯЕТСЯ, А ТОЛЬКО КОГДА СВРЕШИТСЯ СОБЫТИЕ
здесь может делать через Invoke();

PS: я сейчас на vb.net делаю нечто похожее, но там другой принцип работы с ком-портами, потоками опроса и обмена данными между потоками, поэтому особо в код не вчитывался
1
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
15.06.2011, 12:29  [ТС]
Спасибо большое! Сделала как Вы сказали, показывает все как надо!!!!
C#
1
2
3
            lblSendData.Text = "Try to Connect";
            Application.DoEvents();
            Invalidate();
Добавлено через 1 час 15 минут
Dzhej-Dzhej , появилась новая проблема. Сразу не обратила внимания, а теперь обнаружила, что при
C#
1
 Application.DoEvents();
становится активной главная форма, из которои вызывается 2 форма , в которои, собственно и сидит весь мои данный код. МОжно с этим как-нибудь справиться?
0
Заблокирован
15.06.2011, 12:34
может после
C#
1
Application.DoEvents();
вызывать
C#
1
            Form2.Focus();
если я правильно понял
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
15.06.2011, 14:55  [ТС]
Сейчас попробую

Добавлено через 7 минут
Сделала так, вроде работает...
C#
1
2
3
4
lblSendData.Text = "Wait ...";
           Thread.Sleep(0);
           Invalidate();
           Refresh();
Добавлено через 1 час 57 минут
Нет, то нормально работает, то 1 форма выскакивает вперед Не могу понять от чего это зависит ...

Добавлено через 13 минут
Добавила
C#
1
2
3
4
5
            lblSendData.Text = "Try to Connect";
            Thread.Sleep(0);
            Invalidate();
            Refresh();
            Focus();
Пока работает ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.06.2011, 14:55
Помогаю со студенческими работами здесь

Как сделать видео съемку происходящего на экране?
Как сделать видео съемку происходящего на экране? Как поместить зачок программы на Taskbar? Зарание благодарен!

Настроить взаимодействие происходящего на экране с окружающим миром
наткнулся на такое прикольное видео, cut может кто знает как можно сделать похожее ?? заранее спасибо!

Открыть порт 4444 в брэндмауэре. Антивируса нет. провайдером порт открыт
Подскажите как открыть данный порт,все делал как тут http://windows.microsoft.com/ru-ru/windows/open-port-windows-firewall#1TC=windows-7....

В конфигурационном файле прописан порт, но пишет ошибку порт 80 занят другим приложением
Здравствуйте. Пишу решение с 2 проектами - сервер и клиент с дуплексным контрактом. Служба запускается нормально. Когда же запускаю...

Индикация
Вот тут задумался, если подсоединить к каждой ножке резистор ом на 150-200, если зажечь каждый сегмент 7-ми семисегментника, то на каждой...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru