Skip to content

Latest commit

 

History

History
77 lines (62 loc) · 3.07 KB

README.md

File metadata and controls

77 lines (62 loc) · 3.07 KB

Работа с GPIO

Управление исполнительными механизмами

Управление состоянием GPO реализовано запросом SetGpoStates, в котором передаётся массив с состояниями портов.

rfidbus = New COMObject("AddIn.RfidBus1cClient");
reader = rfidbus.GetReaders().GetValue(0);
...
gpoPorts = New COMSafeArray("VT_VARIANT", 4);
For i = 0 To 3 Do
    gpoPort = New COMObject("RfidBus.ReaderGpoStateRecord");
    gpoPort.State = True;
    gpoPort.Port = i + 1;
    gpoPorts.SetValue(i, gpoPort);
EndDo;
	
rfidbus.SetGpoStates(reader, gpoPort);

Получение текущего состояния GPI реализовано в запросе GetGpiStates.

AttachAddIn("AddIn.RfidBus1cClient");
rfidbus = New COMObject("AddIn.RfidBus1cClient");
reader = rfidbus.GetReaders().GetValue(0);
...
gpiStates = rfidbus.GetGpiStates(reader.Id);

For each gpiPort In gpiStates Do
    Message("Port: " + gpiPort.Port + "; State: " + gpiPort.State);
EndDo

События от исполнительных механизмов

Для получения событий изменения GPI необходимо произвести подписку на базовые события считывателя, после чего в обработчике событий появится возможность фиксировать изменения GPI (ReaderGpiStatesChangedEvent).

AttachAddIn("AddIn.RfidBus1cClient");
rfidbus = New COMObject("AddIn.RfidBus1cClient");
reader = rfidbus.GetReaders().GetValue(0);
rfidbus.SubscribeToReader(reader.Id);
...

&AtClient
Procedure ExternalEvent(source, event, data)
	Сообщить(event);
	If source = "RfidBus1cClient" Then
		eventDetails = rfidbus.GetEventDetails(data);
		If event = "ReaderGpiStatesChangedEvent" Then
			AddToLog("Event: ReaderGpiStatesChangedEvent",
					eventDetails.Reader,
					"Port: " + eventDetails.Port +
							"; State: " + eventDetails.State);
		EndIf
	EndIf
EndProcedure

В эмуляторе состояния портов GPI соответствуют состоянию портов GPO. Таким образом, чтобы получить ReaderGpiStatesChangedEvent на эмуляторе необходимо изменить состояние его GPO.

⬅ К оглавлению