Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
5 / 5 / 6
Регистрация: 26.03.2012
Сообщений: 27

Не работает скомпилированный ехе файл (работа с СОМ портом)

13.12.2013, 13:42. Показов 2041. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
закончил написание приложения для работы с ком портом
за основу брал исходник http://www.sources.ru/vb/vb_serial_comms.shtml
т.о. обращался с ком портом через API функцию. вот модуль

Visual Basic
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
Option Explicit
 
Global ComNum As Long
Global bRead(1535) As Byte
 
Type COMSTAT
        fCtsHold As Long
        fDsrHold As Long
        fRlsdHold As Long
        fXoffHold As Long
        fXoffSent As Long
        fEof As Long
        fTxim As Long
        fReserved As Long
        cbInQue As Long
        cbOutQue As Long
End Type
 
Type COMMTIMEOUTS
        ReadIntervalTimeout As Long
        ReadTotalTimeoutMultiplier As Long
        ReadTotalTimeoutConstant As Long
        WriteTotalTimeoutMultiplier As Long
        WriteTotalTimeoutConstant As Long
End Type
 
Type DCB
        DCBlength As Long
        BaudRate As Long
        fBinary As Long
        fParity As Long
        fOutxCtsFlow As Long
        fOutxDsrFlow As Long
        fDtrControl As Long
        fDsrSensitivity As Long
        fTXContinueOnXoff As Long
        fOutX As Long
        fInX As Long
        fErrorChar As Long
        fNull As Long
        fRtsControl As Long
        fAbortOnError As Long
        fDummy2 As Long
        wReserved As Integer
        XonLim As Integer
        XoffLim As Integer
        ByteSize As Byte
        Parity As Byte
        StopBits As Byte
        XonChar As Byte
        XoffChar As Byte
        ErrorChar As Byte
        EofChar As Byte
        EvtChar As Byte
End Type
 
Type OVERLAPPED
        Internal As Long
        InternalHigh As Long
        offset As Long
        OffsetHigh As Long
        hEvent As Long
End Type
Type SECURITY_ATTRIBUTES
        nLength As Long
        lpSecurityDescriptor As Long
        bInheritHandle As Long
End Type
 
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Declare Function GetLastError Lib "kernel32" () As Long
Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Long) As Long
Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Long) As Long
Declare Function SetCommTimeouts Lib "kernel32" (ByVal hFile As Long, lpCommTimeouts As COMMTIMEOUTS) As Long
Declare Function GetCommTimeouts Lib "kernel32" (ByVal hFile As Long, lpCommTimeouts As COMMTIMEOUTS) As Long
Declare Function BuildCommDCB Lib "kernel32" Alias "BuildCommDCBA" (ByVal lpDef As String, lpDCB As DCB) As Long
Declare Function SetCommState Lib "kernel32" (ByVal hCommDev As Long, lpDCB As DCB) As Long
Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Declare Function FlushFileBuffers Lib "kernel32" (ByVal hFile As Long) As Long
 
 
Function fin_com()
    fin_com = CloseHandle(ComNum)
End Function
 
Function FlushComm()
    FlushFileBuffers (ComNum)
End Function
 
Function Init_Com(ComNumber As String, Comsettings As String) As Boolean
On Error GoTo handelinitcom
    Dim ComSetup As DCB, Answer, Stat As COMSTAT, RetBytes As Long
    Dim retval As Long
    Dim CtimeOut As COMMTIMEOUTS, BarDCB As DCB
    ' Open the communications port for read/write (&HC0000000).
    ' Must specify existing file (3).
    ComNum = CreateFile(ComNumber, &HC0000000, 0, 0&, &H3, 0, 0)
    If ComNum = -1 Then
        'MsgBox "Com Port " & ComNumber & " not available. Use Serial settings (on the main menu) to setup your ports.", 48
        Init_Com = False
        Exit Function
    End If
    'Setup Time Outs for com port
    CtimeOut.ReadIntervalTimeout = 20
    CtimeOut.ReadTotalTimeoutConstant = 1
    CtimeOut.ReadTotalTimeoutMultiplier = 1
    CtimeOut.WriteTotalTimeoutConstant = 10
    CtimeOut.WriteTotalTimeoutMultiplier = 1
    retval = SetCommTimeouts(ComNum, CtimeOut)
    If retval = -1 Then
        retval = GetLastError()
        MsgBox "Unable to set timeouts for port " & ComNumber & " Error: " & retval
        retval = CloseHandle(ComNum)
        Init_Com = False
        Exit Function
    End If
    retval = BuildCommDCB(Comsettings, BarDCB)
    If retval = -1 Then
        retval = GetLastError()
        MsgBox "Unable to build Comm DCB " & Comsettings & " Error: " & retval
        retval = CloseHandle(ComNum)
        Init_Com = False
        Exit Function
    End If
    retval = SetCommState(ComNum, BarDCB)
    If retval = -1 Then
        retval = GetLastError()
        MsgBox "Unable to set Comm DCB " & Comsettings & " Error: " & retval
        retval = CloseHandle(ComNum)
        Init_Com = False
        Exit Function
    End If
    
    Init_Com = True
handelinitcom:
    Exit Function
End Function
 
Function ReadCommPure() As String
On Error GoTo handelpurecom
    Dim RetBytes As Long, i As Integer, ReadStr As String, retval As Long
    Dim CheckTotal As Integer, CheckDigitLC As Integer
    retval = ReadFile(ComNum, bRead(0), 1535, RetBytes, 0)
    ReadStr = ""
    If (RetBytes > 0) Then
        For i = 0 To RetBytes - 1
            ReadStr = ReadStr & Chr(bRead(i))
        Next i
       Else
        FlushComm
    End If
    'Return the string read from serial port
    ReadCommPure = ReadStr
handelpurecom:
    Exit Function
End Function
 
Function WriteCOM32(COMString As String) As Integer
On Error GoTo handelwritelpt
    Dim RetBytes As Long, LenVal As Long
    Dim retval As Long
    Dim BB As Byte
    
If COMString = 1 Then BB = &H55
If COMString = 2 Then BB = &H75
If COMString = 3 Then BB = &H85
 
    retval = WriteFile(ComNum, BB, 1, RetBytes, 0)
    WriteCOM32 = RetBytes
    
handelwritelpt:
    Exit Function
End Function
вызываю функцию кнопкой (в текст2 команда 1,2 или 3)
Visual Basic
1
2
3
4
5
6
7
Private Sub Command1_Click()
If WriteCOM32(txt(2)) <> Len(txt(2)) Then   'проверка записываемой команды
        MsgBox "Error writing to comm's"
        Exit Sub
End If
'далее мои операторы
*****
так вот,когда запускаю все это в редакторе VB 6 все работает нормально.
А скомпеллированный ЕХЕ файл не работает, пишет ошибку MsgBox "Error writing to comm's".
Пробовал пошагово вставлять MsgBox'ы, определил что не срабатывает

WriteFile(ComNum, BB, 1, RetBytes, 0)

думал, что проблемы с библиотекой "kernel32", но функция sleep (из другого модуля) в ЕХЕшнике работает
Visual Basic
1
2
3
4
5
Declare Sub sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
 
Sub Sleep1(timee As Long)
sleep timee
End Sub
кто-нибудь знает, в чем может быть дело?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.12.2013, 13:42
Ответы с готовыми решениями:

Работа с СОМ-портом
Пишу программу для работы с устройством через COM-порт. Я отсылаю устройству запрос так: WriteFile(hComPort, buff, buffSize,...

Работа с сом-портом
Суть программы-обмен данными с некоторым микроконтроллером. Одна из особенностей- RX и TX соединяются вместе. Получается, когда я...

Работа с СОМ портом
Для тех кто в танке то есть мой случай . Думаю можно отдельную тему вынести программирование СОМ порта. Поясните на как открыть ,...

14
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
13.12.2013, 13:58
Цитата Сообщение от Wizard2509 Посмотреть сообщение
COMString As String
Цитата Сообщение от Wizard2509 Посмотреть сообщение
If COMString = 1
If COMString = 2
If COMString = 3
Разве эти условия когда-нибудь выполнятся?

может быть так?

Visual Basic
1
if COMString = "1"
0
5 / 5 / 6
Регистрация: 26.03.2012
Сообщений: 27
13.12.2013, 14:10  [ТС]
попробовал, - не играет роли. - В отладчике работает и так и так, в .ЕХЕ ни так, ни так.
хотя с недочетом согласен
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
13.12.2013, 14:21
а txt(2) что такое?

Добавлено через 4 минуты
Я бы посмотрел что возвращает функция

Visual Basic
1
msgbox WriteCOM32(txt(2))
0
5 / 5 / 6
Регистрация: 26.03.2012
Сообщений: 27
13.12.2013, 14:22  [ТС]
на форме несколько текстбоксов txt(0), txt(1), txt(2)
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
13.12.2013, 14:25
А почему по-человечески нельзя писать

Visual Basic
1
txt(2).text
Хотя и не в этом причина, но для других людей было бы понятно что это текстбокс, а не какой-то элемент массива.
0
5 / 5 / 6
Регистрация: 26.03.2012
Сообщений: 27
13.12.2013, 14:38  [ТС]
msgbox WriteCOM32(txt(2)) возвращает:
1 при разработке
после компилляции ехе файла 0

не понимаю, как такое возможно

Добавлено через 10 минут
пошел дальше, поменял
168 retval = WriteFile(ComNum, BB, 1, RetBytes, 0) на

msgbox WriteFile(ComNum, BB, 1, RetBytes, 0)

так же - в VB 6 работает, дает "1"
сразу же компилирую ЕХЕ, запускаю его - "0"
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
13.12.2013, 14:41
В нете обсуждалась проблема с этим багом.
1
5 / 5 / 6
Регистрация: 26.03.2012
Сообщений: 27
13.12.2013, 16:06  [ТС]
смотрю

Цитата Сообщение от SoftIce Посмотреть сообщение
дам ссылку и сразу удалю.
не знаю зачем, но если это правило форума то можно удалять

Добавлено через 1 час 22 минуты
проблема там не решена.

сейчас запустил сам исходник (ссылка сверху). Скомпилированный файл функцией msgbox WriteFile все равно возвращает ноль.
тут дело не в моем коде.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,738
Записей в блоге: 14
13.12.2013, 16:15
А компИлируешь в p-код или в Native-код?
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
13.12.2013, 16:43
Цитата Сообщение от Wizard2509 Посмотреть сообщение
msgbox WriteFile(ComNum, BB, 1, RetBytes, 0)
так же - в VB 6 работает, дает "1"
сразу же компилирую ЕХЕ, запускаю его - "0"
Чему равен ComNum при компиляции и разработке? Проверяй LastDllError сразу после вызова WriteFile. Как проходит инициализация порта, успешно? Про GetLastError читали вообще? Что его не вызывают из Basic'а.
Visual Basic: Прикладные программы должны вызывать err. LastDllError вместо GetLastError.
1
5 / 5 / 6
Регистрация: 26.03.2012
Сообщений: 27
15.12.2013, 02:20  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
А компИлируешь в p-код или в Native-код?
не совсем понимаю, о чем идет речь (предполагаю, в то, что стоит по умолчанию). Поясните?

ComNum в моем случае будет "COM4:"
порт открывается нормально

Цитата Сообщение от The trick Посмотреть сообщение
Про GetLastError читали вообще? Что его не вызывают из Basic'а.
про это ничего не знаю.

Парни, выручайте, много времени потратил на написание кода, в отладчике работает, после компиляции нет
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,738
Записей в блоге: 14
15.12.2013, 09:38
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Цитата Сообщение от Wizard2509 Посмотреть сообщение
не совсем понимаю, о чем идет речь
Посмотри свойства проекта (картинка). Попробуй скомпилировать а p-код, отключить оптимизацию.


И еще один совет (такой случай я разбирал на этом форуме года 2 назад) - проверь правильность употребления long/integer, особенно при вызове API-функций!
Миниатюры
Не работает скомпилированный ехе файл (работа с СОМ портом)  
2
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
15.12.2013, 10:32
Цитата Сообщение от Wizard2509 Посмотреть сообщение
Парни, выручайте, много времени потратил на написание кода, в отладчике работает, после компиляции нет
Ну тык ответь на вопросы.
0
5 / 5 / 6
Регистрация: 26.03.2012
Сообщений: 27
16.12.2013, 08:43  [ТС]
Проблема решена!
Проблема была в оптимизации кода. Всем спасибо за помощь, особенно Catstail, (пост #13).
Значение стояло как на картинке. Правильно работает как в p-коде, так и без оптимизации
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2013, 08:43
Помогаю со студенческими работами здесь

Работа с сом-портом
Есть прибор подключаемый через сом-порт и хотелось бы написать программу получения данных с помощью Labview. C помощью матлаба это...

работа в delphi с СОМ-портом
Здравствуйте,пишу программу на пипломник, суть программы: через COM-порт отправляет и принимает определенные команды (программа для работы...

Работа с модемом и СОМ портом Допоможите
Люди допоможите хто чем может! А по существу есть такая проблема. Необходимо сделать звонилку которая будет перебирать номера с...

Работа с СОМ портом (прием и передача)
Подскажите, ПОЖАЛУЙСТА! Хочу написать небольшую программку, которая должна отправлять на СОМ порт определенное значение! Если после этого...

Работа с СОМ-портом через ЛВС
Здравствуйте господа. Мне предстоит следующая задача: в колхозе монтируются автомобильные весы на 60 т., подключенные на порт RS-232....


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru