0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 14
1

Создать программу, которая бы работала с COM-port

07.05.2012, 16:45. Показов 1402. Ответов 7
Метки нет (Все метки)

Создать программу, которая бы работала с COM-port, передавая 8 битов и получая назад результат работы. Com port: baud rate = 115200, Parity = None Stop bit = one
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2012, 16:45
Ответы с готовыми решениями:

Возможно ли написать программу которая бы работала с модемом роутер DLink
Доброго, у меня такой вопрос, возможно ли написать программу которая бы работала с модемом роутер...

Используя оператор выбора, написать программу, которая работала бы как калькулятор
Используя оператор выбора, написать программу, которая работала бы как калькулятор...

Найти площадь круга, вписанного в треугольник с заданными сторонами. напишите программу которая работала бы )
Найти площадь круга, вписанного в треугольник с заданными сторонами. напишите программу которая...

Создать программу,которая находит минимальное из 3х чисел. Для нахождения минимального числа создать функцию
Создать функцию - double mini (double a, double b, double c), где a,b,c - задание числа. Спасибо...

7
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 14
22.10.2012, 13:27  [ТС] 2
да ето всьо я проделав)) как мне розшифровати дані коториє я получаю назад у видє бітов?
0
73 / 73 / 10
Регистрация: 18.09.2012
Сообщений: 208
22.10.2012, 14:07 3
Зависит от того, кто их Вам посылает...
1
606 / 581 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
22.10.2012, 15:01 4
лови, чо)
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
    /// <summary>
    /// Класс - представляющий собой протокол приёма-передачи сообщений на устройство,
    /// работающее по COM порту
    /// </summary>
    public class ASCII_RW
    {
        //--- события для работы с делегатами--------------------------------------
        /// <summary>
        /// Событие на получение ошибки
        /// </summary>
        public event SomeExceptionDo ErrorRecived;
        /// <summary>
        /// Событие, реализующее получение сообщения
        /// </summary>
        public event SomeStringDo MessageRecived;
        /// <summary>
        /// Событие, реализующее получение сообщения
        /// </summary>
        public event SomeStringDo MessageSended;
        /// <summary>
        /// Событие на запуск устройства
        /// </summary>
        public event SomeVoidDo OnStart;
        /// <summary>
        /// Событие на остановку устройства
        /// </summary>
        public event SomeVoidDo OnStop;
        /// <summary>
        /// Событие на принятие ответа - завершение одной комманды
        /// </summary>
        protected event StringCommandFinish CommandFinished;
 
 
       //----различные поля------------------------------------------------------- 
       /// <summary>
       /// COM порт устройства
       /// </summary>
        public SerialPort spPort = null;
       /// <summary>
       /// основной поток для чтения
       /// </summary>
        protected Thread tdRead = null;
       /// <summary>
       /// Очередь комманд
       /// </summary>
        protected Last_Command LastCommand;
        /// <summary>
        /// утверждение продолжать чтение
        /// </summary>
        protected bool boolRead = true;
        /// <summary>
        /// Буффер принятых байт
        /// </summary>
        protected List<byte> sBuffer;
        /// <summary>
        /// Флаг подключенности
        /// </summary>
        public bool isConnected = false;             
 
        //---конструктор----------------------------------------------------------
        /// <summary>
        /// Конструктор по умолчанию и без параметров
        /// </summary>
        protected ASCII_RW() { new ASCII_RW("IMITATOR",100); }
 
        /// <summary>
        /// Основной конструктор
        /// </summary>
        /// <param name="ComPort">имя серийного порта</param>
        /// <param name="TimeOuts">тайм-ауты</param>
        public ASCII_RW(string ComPort, int TimeOuts)
        {
            //назначение устройству порта
            spPort = new SerialPort(ComPort);
            //создание потока на процедуру чтения
            tdRead = new Thread(Read);
 
            //создание очередей
            LastCommand.Command = new List<byte[]>();
            LastCommand.Number = new List<byte>();
 
            //установка тайм-аутов
            spPort.WriteTimeout = TimeOuts;
            spPort.ReadTimeout = TimeOuts;
        }
 
        /// <summary>
        /// метод запуска устройства
        /// </summary>
        public void Start()
        {
            try
            {
                //создание буффера
                this.sBuffer = new List<byte>();
                //сброс параметров
                this.ClearingAll();
                //установка флага подключенности
                this.isConnected = true;
                //установка флага постоянного чтения
                this.boolRead = true;
                //открытие порта
                this.spPort.Open();
                //создание и запуск потока чтения
                this.tdRead = new Thread(Read);
                this.tdRead.Start();
 
                //событие запуска
                if (OnStart != null)
                    OnStart(this);
            }
            //попытка стартануть запущенный поток чтения
            catch (InvalidOperationException)
            {
                if (ErrorRecived != null)
                    ErrorRecived(this, new Exception("Попытка запустить уже работающее устройство."));
            }
            //попытка открыть открытый порт
            catch
            {
                if (ErrorRecived != null)
                    ErrorRecived(this, new Exception("Ошибка при открытии COM порта."));
 
                //в этом случае лучше вызвать метод остановки устройства
                Stop();
            }
        }
 
        /// <summary>
        /// метод остановки устройства
        /// </summary>
        public void Stop()
        {
            try
            {
                this.isConnected = false;
                this.boolRead = false;
            }
            catch (ThreadStateException)
            {
            }
        }
 
        /// <summary>
        /// метод очищения очереди и сброса параметров
        /// </summary>
        public void ClearingAll()
        {
            try
            {
                //очищение..
                this.LastCommand.Command.Clear();
                this.LastCommand.Number.Clear();
                this.sBuffer.Clear();
            }
            catch { }
        }
 
        /// <summary>
        /// метод чтения данных с com-порта
        /// </summary>
        protected void Read()
        {
            //пока флаг чтения истинный
            while (boolRead)
            {
                try
                {
                    //побайтовое чтение того, что порт посылает
                    byte newByte = (byte)spPort.BaseStream.ReadByte();
                    sBuffer.Add(newByte);
                }
                //если кончилось время ожидания..
                catch (TimeoutException)
                {
                    if (sBuffer.Count > 0)
                    {
                        //преобразование их в массив
                        byte[] recivedByte = sBuffer.ToArray();
                        string recivedStr = Encoding.ASCII.GetString(recivedByte);
 
                        FullMessageRecived(recivedStr);
                    }
                }
            }
 
            this.sBuffer.Clear();
            this.spPort.Close();
 
            //событие закрытия порта
            if (OnStop != null)
                OnStop(this);
        }
 
        /// <summary>
        /// Метод, говорящий что получен правильный и полный ответ
        /// </summary>
        /// <param name="reBytes"></param>
        private void FullMessageRecived(string message)
        {
                //сообщение о том что было полученно сообщение
                if (MessageRecived != null)
                    MessageRecived(this, message);
 
                if (CommandFinished != null) CommandFinished(this, LastCommand.Number[0], message);
 
                //и если в очереди есть номера комманд..
                if (LastCommand.Number.Count > 0)
                {
                    //удаление обработанного номера комманды
                    LastCommand.Number.RemoveAt(0);
                }
 
                sBuffer.Clear();
                //отправка следующего запроса
                SendNext();
        }
 
        /// <summary>
        /// Метод отправления в очередь массива байт
        /// </summary>
        /// <param name="btMass">Массив байт</param>
        /// <param name="number">Номер комманды</param>
        public void ToWriteList(byte[] btMass, int number)
        {
            try
            {
                //если порт закрыт оповещаем соответствующей ошибкой
                if (!spPort.IsOpen) throw new InvalidOperationException();
                
                if (number != -1)
                    LastCommand.Number.Add((byte)number);
                LastCommand.Command.Add(btMass);
                
                if(LastCommand.Number.Count<2)
                     SendNext();
            }
            catch (InvalidOperationException)
            {
                //вызов ошибки записи
                if (ErrorRecived != null) ErrorRecived(this, new Exception("Порт не открыт."));
                //вызов ошибки чтения
                if (ErrorRecived != null) ErrorRecived(this, new Exception("Невозможно ответить при отключенном устройстве."));
 
            }
        }
 
       /// <summary>
       /// Метод отправления следующего запроса на устройство
       /// (ну или первого если запросов не было)
       /// </summary>
        protected void SendNext()
        {
            //если в очереди есть хоть чтото..
            if (LastCommand.Command.Count > 0)
            {
                //формируем массив
                byte[] s = LastCommand.Command[0];
                //удаляем из очереди комманду
                LastCommand.Command.RemoveAt(0);
 
                //сообщаем об отправке
                if (MessageSended != null)
                    MessageSended(this, Encoding.ASCII.GetString(s));
 
                try
                //отправляем данные на порт
                { spPort.BaseStream.Write(s, 0, s.Count()); }
 
                catch (Exception e)
                //если ошибка - сообщение о ней
                { if (ErrorRecived != null) ErrorRecived(this, e); }
            }
        }
    }
правда два нюанса:
1) работа производится кодировкой сообщения ASCII строкой, но в конце концов это те же байты, просто влом переделывать, думаю и сам справишся
2) обработка полученных ответов производится исходя из номера комманды, который мне опять же влом изменять.

оба этих нюанса исправляются простым удалением блоков ненужного кода. твоя задача - найти его, локализовать, и удалить так чтоб потом класс по прежнему работал)
1
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 14
03.11.2012, 00:34  [ТС] 5
как розшифравать дание типу 45 05 AA 0F FF F0 FF FF . Или какие-то такие данные. В системе "ефкы"?
В систему double?
0
606 / 581 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
06.11.2012, 10:23 6
чёрт, а я не знаю кто такой "ефк" =(
0
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 14
08.11.2012, 02:05  [ТС] 7
Перевести з 45 05 AA 0F FF F0 FF FF в Double&
0
606 / 581 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
08.11.2012, 09:41 8
4973568349195796479...

просто преобразуешь строку, убирая из неё пробелы, потом преобразуешь (но по моему в вещественные так нельзя)
C#
1
double myInt=Convert.ToInt64(myString,16);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2012, 09:41
Помогаю со студенческими работами здесь

Создать программу которая - создает другую программу с действиями
Мне нужны подсказки кусочки O_o Создать программу которая - создает другую программу программа...

Возможно ли создать программу, которая сама бы компилировала программу
Вообщем тема такова,возможно ли написать программу которая могла сама скомпилировать другую...

Не запускается программа, которая работала ранее
Помогите пожалуйста, вот только пару минут назад запускалась, а теперь &quot;exception...

Создать функцию для вычисления величин. Создать программу которая использует данную функцию
Создать функцию для вычисления величин. Создать программу которая использует данную функцию. ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru