Универсальная программа
- Сообщения: 3
- Зарегистрирован: Ср сен 21, 2011 11:12:37
Ребят. По роду своей деятельности часто сталкиваюсь с достаточно простыми системами управления оборудованием через микроконтроллеры. Обычно логика, зашитая в МК управляется кнопками, подключенными к входам. А вот каждый раз, когда нужно сделать программку, которая бы работала с девайсом по RS-232, обращаюсь к программисту. Но у того очень мало свободного времени
и порой я бываю посланным и работа затягивается на неопределенный срок.
Может кто-нибудь знает программку, которой можно сказать сколько кнопочек сделать, а она делает окошко, а потом, когда нажимаешь на кнопки, она отсылает номер кнопки в COM-порт компа? Меня пытались обучить дельфям, но беспрерпективно. Стар я уже для этого. 
- Реклама
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Все равно нужно знать основы программирования.
Хотя если вам нужно всего лишь однотипные программы с несколькими кнопками и отправкой данных в COM порт, то задача упрощается.
Вот пример на PureBasic с отправкой байта со значением 2 когда нажимают на кнопку.
Хотя если вам нужно всего лишь однотипные программы с несколькими кнопками и отправкой данных в COM порт, то задача упрощается.
Вот пример на PureBasic с отправкой байта со значением 2 когда нажимают на кнопку.
Код: Выделить всё
; Создаём окно.
OpenWindow(1,0,0,200,90,"Заголовок окна",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ButtonGadget(2,64,30,80,25,"Кнопка")
Repeat ; Начало главного цикла программы.
Event=WaitWindowEvent() ; Получаем идентификатор события.
Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
If Event=#PB_Event_Gadget And Gadget=2 ; Условие будет выполнено при щелчке по кнопке.
; Отерываем порт COM1, со скоростью перебачи 9600 бод.
If OpenSerialPort(0, "COM1", 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 255, 255)
OutByte.b = 2 ; Передаваемый байт.
WriteSerialPortData(0, @OutByte, 1) ; Отправка байта в COM порт.
CloseSerialPort(0) ; Закрываем COM порт.
Else ; Произошла ошибка при открытии порта.
MessageRequester("", "Ошибка открытия порта")
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; Прерываем цикл при закрытии окна- Вложения
-
- SendCom.rar
- (10.29 КБ) 308 скачиваний
Последний раз редактировалось Мурик Ср сен 21, 2011 12:53:09, всего редактировалось 1 раз.
Заинтересовать надо человека.gotter писал(а):у того очень мало свободного времени
Docendo discimus
- Сообщения: 3
- Зарегистрирован: Ср сен 21, 2011 11:12:37
Мурик писал(а):Все равно нужно знать основы программирования.
Хотя если вам нужно всего лишь однотипные программы с несколькими кнопками и отправкой данных в COM порт, то задача упрощается.
Вот пример на PureBasic с отправкой байта со значением 2 когда нажимают на кнопку.Код: Выделить всё
; Создаём окно. OpenWindow(1,0,0,200,90,"Заголовок окна",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) ButtonGadget(2,64,30,80,25,"Кнопка") Repeat ; Начало главного цикла программы. Event=WaitWindowEvent() ; Получаем идентификатор события. Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие. If Event=#PB_Event_Gadget And Gadget=2 ; Условие будет выполнено при щелчке по кнопке. ; Отерываем порт COM1, со скоростью перебачи 9600 бод. If OpenSerialPort(0, "COM1", 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 255, 255) OutByte.b = 2 ; Передаваемый байт. WriteSerialPortData(0, @OutByte, 1) ; Отправка байта в COM порт. CloseSerialPort(0) ; Закрываем COM порт. Else ; Произошла ошибка при открытии порта. MessageRequester("", "Ошибка открытия порта") EndIf EndIf Until Event = #PB_Event_CloseWindow ; Прерываем цикл при закрытии окна
Большое спасибо за пример. Как вариант. Жаль много букв писать надо. Тут на форуме изеелектроникс нашел такую штуку http://free-solutions.ru/modes/soft/MCUInterface/, но она после установки аварийно завершилась. После установки обновления от микрософта заработало. В принципе то что нужно, жаль точканет нужен. Хотя у меня все крутится на одном компе, поэтому пофиг. Но сыроватая прога и отправляет только текстовые данные, а мне желательно по одному байту.
Мурик, порт правильнее открывать при старте проги, и закрывать при завершении, а не по событию от кнопки. иначе между событиями кому-нибудь приспичит порт открыть, и плакала ваша прога 
битва с дураками проиграна, победители торжествуют. слава победителям!
- Реклама
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Это только на первый взгляд так.gotter писал(а):Жаль много букв писать надо.
Я это сделал из готового шаблона и дописал только это
Код: Выделить всё
; Отерываем порт COM1, со скоростью перебачи 9600 бод.
If OpenSerialPort(0, "COM1", 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 255, 255)
OutByte.b = 2 ; Передаваемый байт.
WriteSerialPortData(0, @OutByte, 1) ; Отправка байта в COM порт.
CloseSerialPort(0) ; Закрываем COM порт.
Else ; Произошла ошибка при открытии порта.
MessageRequester("", "Ошибка открытия порта")
EndIf
часть вообще было скопировано из справки через буфер обмена.Так что реально напечатал не больше 10% из всего текста.
Штука конечно хорошая, но думаю что годится лишь для простых задач типа передать байт в порт, а на что-то по сложнее (принять пару байт и произвести с ними кое-какие действия) ее не хватит.gotter писал(а):Тут на форуме изеелектроникс нашел такую штуку
Это касается не только самой программы, но и программ, создаваемых с ее помощью.gotter писал(а):но она после установки аварийно завершилась. После установки обновления от микрософта заработало.
Представьте, вы разработали комплекс, состоящий из устройства на микроконтроллере и программы, созданной в "MCU Interface Studio" и решили поделится с другими, но у многих программа для компа так же будет аварийно завершатся. Вам это надо?
Лучше изучить не сложный язык программирования чем использовать конструктор программ - возможностей будет намного больше.
Это я знаю.Мастер Ломастер писал(а):Мурик, порт правильнее открывать при старте проги, и закрывать при завершении
В примере я показал что нужно закрывать порт когда он не нужен программе.
а я как раз обратил ваше внимание на то, что этого как раз делать не стоит.Мурик писал(а):В примере я показал что нужно закрывать порт когда он не нужен программе.
битва с дураками проиграна, победители торжествуют. слава победителям!
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
В реальной программе, нужно закрывать порт при выборе другого порта при условии что текущий больше не нужен или при закрытии программы.
Пример с открытием порта при старте программы и закрытием при ее завершении.
Пример с открытием порта при старте программы и закрытием при ее завершении.
Код: Выделить всё
; Открываем порт COM1, со скоростью передачи 9600 бод.
If OpenSerialPort(0,"COM1",9600,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,255,255)=0
; Произошла ошибка при открытии порта.
MessageRequester("", "Ошибка открытия порта")
End ; Так как эта программа без открытого порта работать не может, то завершаем её работу.
EndIf
; Создаём окно.
OpenWindow(1,0,0,200,90,"Заголовок окна",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ButtonGadget(2,64,30,80,25,"Кнопка")
Repeat ; Начало главного цикла программы.
Event=WaitWindowEvent() ; Получаем идентификатор события.
Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
If Event=#PB_Event_Gadget And Gadget=2 ; Условие будет выполнено при щелчке по кнопке.
OutByte.b = 2 ; Передаваемый байт.
WriteSerialPortData(0, @OutByte, 1) ; Отправка одного байта в COM порт.
EndIf
Until Event = #PB_Event_CloseWindow ; Прерываем цикл при закрытии окна
CloseSerialPort(0) ; Закрываем COM порт.- Сообщения: 3
- Зарегистрирован: Ср сен 21, 2011 11:12:37
Большое спасибо за ответ. Буду изучать.Мурик писал(а):В реальной программе, нужно закрывать порт при выборе другого порта при условии что текущий больше не нужен или при закрытии программы.
Пример с открытием порта при старте программы и закрытием при ее завершении.Код: Выделить всё
; Открываем порт COM1, со скоростью передачи 9600 бод. If OpenSerialPort(0,"COM1",9600,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,255,255)=0 ; Произошла ошибка при открытии порта. MessageRequester("", "Ошибка открытия порта") End ; Так как эта программа без открытого порта работать не может, то завершаем её работу. EndIf ; Создаём окно. OpenWindow(1,0,0,200,90,"Заголовок окна",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) ButtonGadget(2,64,30,80,25,"Кнопка") Repeat ; Начало главного цикла программы. Event=WaitWindowEvent() ; Получаем идентификатор события. Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие. If Event=#PB_Event_Gadget And Gadget=2 ; Условие будет выполнено при щелчке по кнопке. OutByte.b = 2 ; Передаваемый байт. WriteSerialPortData(0, @OutByte, 1) ; Отправка одного байта в COM порт. EndIf Until Event = #PB_Event_CloseWindow ; Прерываем цикл при закрытии окна CloseSerialPort(0) ; Закрываем COM порт.
- Сообщения: 108
- Зарегистрирован: Пт окт 08, 2010 15:43:55
А кто подскажет и даст пример как сделать например так:
Программа постоянно считывает 3 байта из COM порта (например часы, минуты, секунды) и размешает их значения в окне в данном виде byte0, ":",byte1, ":",byte2. Также в программе есть 3 текстовых метки: часы, минуты, секунды и напротив этих меток 3 текстовых поля для ввода числовых значений, а также имеется кнопка установка времени, при нажатии которой значения из текстовых полей последовательно передаются в COM порт.
Программа постоянно считывает 3 байта из COM порта (например часы, минуты, секунды) и размешает их значения в окне в данном виде byte0, ":",byte1, ":",byte2. Также в программе есть 3 текстовых метки: часы, минуты, секунды и напротив этих меток 3 текстовых поля для ввода числовых значений, а также имеется кнопка установка времени, при нажатии которой значения из текстовых полей последовательно передаются в COM порт.
Вот хороший кандидат на "Универсальную программу"
http://ru.wikipedia.org/wiki/LabVIEW
Сам пользуюсь. Не люблю код писать.. Рисовать понятней как-то)
http://ru.wikipedia.org/wiki/LabVIEW
Сам пользуюсь. Не люблю код писать.. Рисовать понятней как-то)
Моими устами глаголет истина. И такое при этом несет...
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Nemridis, а вы пробовали запустить схему без LabVIEW?
Можно конечно, но за схемой придется тащить runtime, размером 100 МБ!
Эт не айс!
Можно конечно, но за схемой придется тащить runtime, размером 100 МБ!
Эт не айс!
Да, не айс. Но что такое 100 мегов по сравнению с вечностью?)
Необходимость использовать рантайм с лихвой перекрывается удобством и простотой создания нормально работающего приложения.
Впрочем я не программист. Делал несколько программ в этой среде, для личного пользования и не более того.
Необходимость использовать рантайм с лихвой перекрывается удобством и простотой создания нормально работающего приложения.
Впрочем я не программист. Делал несколько программ в этой среде, для личного пользования и не более того.
Моими устами глаголет истина. И такое при этом несет...
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Вот поэтому программы все больше весят и потребляют ресурсов - главное простота разработки, а на пользователей плевать!Nemridis писал(а):Необходимость использовать рантайм с лихвой перекрывается удобством и простотой создания
Преимущество этой среды как-раз в том, что программу себе делает сам пользователь. Инженер\техник не знающий не одного языка программирования может "набросать" программу для своей задачи и получить нормальной работающее приложение. Да, сама среда и рантайм для нее много весят. НО есть разница- неделя\две на освоение ЛабВью или полгода\год на какой-нить С, С++?
Причем среда весьма серьезная. Позволяет делать много чего даже нубу.
Причем среда весьма серьезная. Позволяет делать много чего даже нубу.
Моими устами глаголет истина. И такое при этом несет...
Это среда для единичных задач или обкатки идеи, никак не сможет заменить более тонкие языки программирования. Если тебе надо программу состряпать для какого-то однократного расчета или обработки данных здесь и сейчас - такая программа пойдет в самый раз.


