Работа с COM портом

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Видимо процедуре OW_ReadROM в первом аргументе было передано число 0, вместо указателя на структуру OW_Buff. На скриншоте этот участок кода не виден.
Реклама
Родился
Сообщения: 6
Зарегистрирован: Сб окт 10, 2015 18:26:37

Сообщение СВМ »

Мурик писал(а):Видимо процедуре OW_ReadROM в первом аргументе было передано число 0, вместо указателя на структуру OW_Buff. На скриншоте этот участок кода не виден.
Кода здесь - кот наплакал:

Код: Выделить всё

XIncludeFile "OWire_Module.pbi"
UseModule OWire

Procedure Select_ComPort() 
   Port.s = GetGadgetText(3)   
      If IsSerialPort(4)   ; Если с таким ИД порт уже открыт,      
           OW_ClosePort(4) ;   то закрываем его и
           SetGadgetColor(1,#PB_Gadget_BackColor, $0000FF);зажигаем красный свет
           SetGadgetText(2,"Открыть порт")
      Else
           OW_OpenPort(Port, 4); открываем порт.
              If IsSerialPort(4); Если  порт  открыт, то
                 SetGadgetColor(1,#PB_Gadget_BackColor, $00FF00); зажигаем зелёный свет
                 SetGadgetText(2,"Закрыть порт") 
               Else
                 SetGadgetColor(1,#PB_Gadget_BackColor, $0000FF);
                 MessageRequester("Ошибка","Выбранный порт недоступен, выберите другой порт.",#PB_MessageRequester_Ok)
              EndIf
      EndIf  
EndProcedure
    
Procedure   DS_Number()
  Protected Text.s,  Dim Input_Byte.a(8)
  OW_ReadROM(*Input_Byte, 4)
  SetGadgetText(6,Text)  ;здесь покажем номер
EndProcedure
    
If OpenWindow(0, 0, 0, 250, 150, "Тестер DS", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  TextGadget(1, 110, 30, 20, 20, "");  Индикатор
  SetGadgetColor(1,#PB_Gadget_BackColor, $0000FF)
  ButtonGadget(2, 130, 30, 100, 20, "Открыть порт")
  ComboBoxGadget(3, 20, 30, 90, 20)
        For i=1 To 16          
            AddGadgetItem(3,-1,"COM" + Str(i))          
        Next i 
        SetGadgetState(3,0)
  ButtonGadget(5, 20, 90, 100, 20, "Номер ")
  TextGadget(6, 130, 93, 120, 20, "");  Номер 
  
  Repeat
    Event = WaitWindowEvent()
           If Event=#PB_Event_Gadget        
             Gadget = EventGadget ( ) ;узнаём,какой гаджет был активирован 
             If Gadget = 2; нажата кнопка "Открыть порт"               
                Select_ComPort()
             EndIf
             If Gadget = 5; нажата кнопка "Номер"
                DS_Number()
             EndIf 
           EndIf
  Until Event=#PB_Event_CloseWindow 
EndIf
End
ПодскажИте, пожалуйста, что я не доделал, чтобы получить принятые байты? В текст я их сам преобразую, этого в коде нет.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

В 24 строке должен быть указатель на массив, а не просто указатель неизвестно на что.

Код: Выделить всё

OW_ReadROM(@Input_Byte(), 4)
Символ @ - получение указателя на нужный объект, которым может быть переменная, экземпляр структуры, массив, связный список, процедура и т. д.
Родился
Сообщения: 6
Зарегистрирован: Сб окт 10, 2015 18:26:37

Сообщение СВМ »

Мурик писал(а):В 24 строке должен быть указатель на массив, а не просто указатель неизвестно на что.

Код: Выделить всё

OW_ReadROM(@Input_Byte(), 4)
Символ @ - получение указателя на нужный объект, которым может быть переменная, экземпляр структуры, массив, связный список, процедура и т. д.
Спасибо, заработало! А правильнописАние у меня хромает...
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «Интеграция с ПК»