Как вывести программу из "ступора"?
|
|
Nicolas_zol | Дата: Четверг, 06.12.2012, 16:18 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 2
Статус: Offline
| Всем доброго времени суток! Помогите пожалуйста чем сможете! Вот кусок кода из программы: Code Dim Shared As Integer w,h Screeninfo w,h ScreenRes w,h,8,,1 Dim As Double t1,t Dim As UShort COM_In(15) Dim As UShort COM_Out(15) Open Com "COM10:57600,n,8,1,ds0,cs0" As #1 Put #1,,COM_Out(0),16 Do Until InKey="q" If Eof(1)<>-1 Then Get #1,,COM_In(0),16 Put #1,,COM_Out(0),16 EndIf Loop close#1 End Программа шлет данные в Com-порт и получает их, всё работает отлично. Но есть одна проблема, данные шлются через RF-модули Xbee (XBP24) и при потери сигнала программа зависает. Почему зависает, я примерно представляю. Вопрос в другом, как избежать зависание программы, чтобы она продолжила своё выполнение, не смотря то, что порт завис?
|
|
| |
haav | Дата: Четверг, 06.12.2012, 18:10 | Сообщение # 2 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1376
Статус: Offline
| Наверно есть смысл работать в отдельном потоке с передачами данных. Сам не пробовал работать с COM портами. Функции для создания дополнительного(ых) потока(ов):
ThreadCreate или ThreadCall
На русском про работу с первой функцией написано ЗДЕСЬ
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Nicolas_zol | Дата: Четверг, 06.12.2012, 18:15 | Сообщение # 3 |
Рядовой
Группа: Пользователи
Сообщений: 2
Статус: Offline
| Спасибо! Почитаю.
|
|
| |
CoBa31Rus | Дата: Вторник, 10.02.2015, 20:56 | Сообщение # 4 |
![CoBa31Rus](/avatar/38/496710.jpg) Рядовой
Группа: Пользователи
Сообщений: 7
Статус: Offline
| Доброго времени суток. Дабы не плодить темы спрошу по COM порту здесь. Открываю COM порт с параметрами "COM1:10400,N,8,1,CS0,DS0" Кладу байт допустим &hFF, сплю 100мс, читаю по байтам что пришло в COM порт, получаю байты которые отправил вместе с теми которые пришли. Вопрос как отделить отправленные от принятых, можно конечно парсингом или по ключевым битам, но ведь должно быть более изящьное решение:)Добавлено (10.02.2015, 20:56) --------------------------------------------- Немного разобрался решение не оч. изящьное но все таки: Код Dim As UByte com_out(1) = {&hFF,&hAA} Dim com_in() As UByte Dim FPort As Integer = FreeFile Dim portString As String
Open com "COM8:10400,N,8,1,CD0,CS0,DS0" As #fport Do Put #fport,,com_out() Sleep(100) ReDim com_in(LOC(fport)-1) Get #fport,0,com_in() For i As UShort = UBound(com_out) + 1 To UBound(com_in) ? Hex(com_in(i)); portstring += Hex(com_in(i)) Next ? Loop Until InKey = "q" Close #fport Sleep Решение в том чтобы считывать полученный буфер байта, с индекса равного длинне отправленного
|
|
| |