Универсальная программа
Универсальная программа
Ребят. По роду своей деятельности часто сталкиваюсь с достаточно простыми системами управления оборудованием через микроконтроллеры. Обычно логика, зашитая в МК управляется кнопками, подключенными к входам. А вот каждый раз, когда нужно сделать программку, которая бы работала с девайсом по RS-232, обращаюсь к программисту. Но у того очень мало свободного времени
и порой я бываю посланным и работа затягивается на неопределенный срок.
Может кто-нибудь знает программку, которой можно сказать сколько кнопочек сделать, а она делает окошко, а потом, когда нажимаешь на кнопки, она отсылает номер кнопки в COM-порт компа? Меня пытались обучить дельфям, но беспрерпективно. Стар я уже для этого. 
- Реклама
Re: Универсальная программа
Все равно нужно знать основы программирования.
Хотя если вам нужно всего лишь однотипные программы с несколькими кнопками и отправкой данных в 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 раз.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Универсальная программа
Заинтересовать надо человека.gotter писал(а):у того очень мало свободного времени
Docendo discimus
Re: Универсальная программа
Мурик писал(а):Все равно нужно знать основы программирования.
Хотя если вам нужно всего лишь однотипные программы с несколькими кнопками и отправкой данных в 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/, но она после установки аварийно завершилась. После установки обновления от микрософта заработало. В принципе то что нужно, жаль точканет нужен. Хотя у меня все крутится на одном компе, поэтому пофиг. Но сыроватая прога и отправляет только текстовые данные, а мне желательно по одному байту.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Универсальная программа
Мурик, порт правильнее открывать при старте проги, и закрывать при завершении, а не по событию от кнопки. иначе между событиями кому-нибудь приспичит порт открыть, и плакала ваша прога 
битва с дураками проиграна, победители торжествуют. слава победителям!
- Реклама
Re: Универсальная программа
Это только на первый взгляд так.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" и решили поделится с другими, но у многих программа для компа так же будет аварийно завершатся. Вам это надо?
Лучше изучить не сложный язык программирования чем использовать конструктор программ - возможностей будет намного больше.
Это я знаю.Мастер Ломастер писал(а):Мурик, порт правильнее открывать при старте проги, и закрывать при завершении
В примере я показал что нужно закрывать порт когда он не нужен программе.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Универсальная программа
а я как раз обратил ваше внимание на то, что этого как раз делать не стоит.Мурик писал(а):В примере я показал что нужно закрывать порт когда он не нужен программе.
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: Универсальная программа
В реальной программе, нужно закрывать порт при выборе другого порта при условии что текущий больше не нужен или при закрытии программы.
Пример с открытием порта при старте программы и закрытием при ее завершении.
Пример с открытием порта при старте программы и закрытием при ее завершении.
Код: Выделить всё
; Открываем порт 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 порт.Re: Универсальная программа
Большое спасибо за ответ. Буду изучать.Мурик писал(а):В реальной программе, нужно закрывать порт при выборе другого порта при условии что текущий больше не нужен или при закрытии программы.
Пример с открытием порта при старте программы и закрытием при ее завершении.Код: Выделить всё
; Открываем порт 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 порт.
Re: Универсальная программа
А кто подскажет и даст пример как сделать например так:
Программа постоянно считывает 3 байта из COM порта (например часы, минуты, секунды) и размешает их значения в окне в данном виде byte0, ":",byte1, ":",byte2. Также в программе есть 3 текстовых метки: часы, минуты, секунды и напротив этих меток 3 текстовых поля для ввода числовых значений, а также имеется кнопка установка времени, при нажатии которой значения из текстовых полей последовательно передаются в COM порт.
Программа постоянно считывает 3 байта из COM порта (например часы, минуты, секунды) и размешает их значения в окне в данном виде byte0, ":",byte1, ":",byte2. Также в программе есть 3 текстовых метки: часы, минуты, секунды и напротив этих меток 3 текстовых поля для ввода числовых значений, а также имеется кнопка установка времени, при нажатии которой значения из текстовых полей последовательно передаются в COM порт.
Re: Универсальная программа
Вот хороший кандидат на "Универсальную программу"
http://ru.wikipedia.org/wiki/LabVIEW
Сам пользуюсь. Не люблю код писать.. Рисовать понятней как-то)
http://ru.wikipedia.org/wiki/LabVIEW
Сам пользуюсь. Не люблю код писать.. Рисовать понятней как-то)
Моими устами глаголет истина. И такое при этом несет...
Re: Универсальная программа
Nemridis, а вы пробовали запустить схему без LabVIEW?
Можно конечно, но за схемой придется тащить runtime, размером 100 МБ!
Эт не айс!
Можно конечно, но за схемой придется тащить runtime, размером 100 МБ!
Эт не айс!
Re: Универсальная программа
Да, не айс. Но что такое 100 мегов по сравнению с вечностью?)
Необходимость использовать рантайм с лихвой перекрывается удобством и простотой создания нормально работающего приложения.
Впрочем я не программист. Делал несколько программ в этой среде, для личного пользования и не более того.
Необходимость использовать рантайм с лихвой перекрывается удобством и простотой создания нормально работающего приложения.
Впрочем я не программист. Делал несколько программ в этой среде, для личного пользования и не более того.
Моими устами глаголет истина. И такое при этом несет...
Re: Универсальная программа
Вот поэтому программы все больше весят и потребляют ресурсов - главное простота разработки, а на пользователей плевать!Nemridis писал(а):Необходимость использовать рантайм с лихвой перекрывается удобством и простотой создания
Re: Универсальная программа
Преимущество этой среды как-раз в том, что программу себе делает сам пользователь. Инженер\техник не знающий не одного языка программирования может "набросать" программу для своей задачи и получить нормальной работающее приложение. Да, сама среда и рантайм для нее много весят. НО есть разница- неделя\две на освоение ЛабВью или полгода\год на какой-нить С, С++?
Причем среда весьма серьезная. Позволяет делать много чего даже нубу.
Причем среда весьма серьезная. Позволяет делать много чего даже нубу.
Моими устами глаголет истина. И такое при этом несет...
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Универсальная программа
Это среда для единичных задач или обкатки идеи, никак не сможет заменить более тонкие языки программирования. Если тебе надо программу состряпать для какого-то однократного расчета или обработки данных здесь и сейчас - такая программа пойдет в самый раз.


