Загрузка...

 

 

Главная

Контакты

Общий прайс

Ссылки

Гостевая книга

 

Проекты

Автоматическая система учета и тарификации времени игры на бильярде

Автоматическая система учета и тарификации времени обслуживания в бане, сауне.

Учет времени антикафе, коворкинг-офисов, игровых комнат, тренажерных залов.

Учет общих отделений бань, саун,  спортивных , тренажерных залов,
игровых площадок и т. д.

Учет времени пребывания и игрового времени. Тарификация клуба.

Выключатель управляемый компьтером

Программа "Книга регистрации мини-отеля"

Программа "Журнал заказов"

Блок дистанционного управления турникетами DuLock

 

Хобби проекты

Статьи

 

ЧИТАЕМ DS1990 ПО ШИНЕ 1W  СТАНДАРТНЫМИ СРЕДСТВАМИ Visual Basic

В этой статье я попробую описать простейшие приемы считывания информации с ключей DS1992 и им подобных.
Можно конечно использовать dll сторонних производителей, но они не всегда бесплатны, да и лично меня не привлекает использовать «кота в мешке», тем более как оказалось, написать собственные подпрограммы для чтения, не так уж сложно.

Для начала соберем адаптер считыватель для COM порта. Будем считать, что считыватель, собран верно и работает.

Ставим себе простейшую задачу, прочитать из «таблетки» ее уникальный номер.

В среде VB6 создадим форму с текстовым окном и  кнопочкой. Добавим объект доступа к COM порту, который назовем mscDev.

 

Чтение DS1990 средствами VB. Форма 

Программа должна читать номер «таблетки» по нажатию кнопки. Поэтому весь программный код помещаем в процедуру Command1_Click().


Он состоит из нескольких последовательных шагов:

Настроить порт для работы с адаптером.

mscDev.PortOpen = True   'откроем порт
mscDev.DTREnable = True    'подадим питание на адаптер
mscDev.RTSEnable = True    ' подадим питание на адаптер
mscDev.InBufferCount = 0 'обнуляем буфер порта

Создадим массив для приема номера «таблетки»

Dim ROM(7) As Byte   'массив для чтения ПЗУ таблетки

Теперь надо выдать сброс всех устройств на шину 1W

Call DSReset             'выдаем сброс

Даем команду подключенной «таблетки» на чтение ПЗУ

Call DSOutByte(&H33)     'команда на чтение ПЗУ таблетки

Осталось только считать  идентификатор, что и делаем далее

     
For I% = 0 To 7          'считываем ПЗУ в массив


ROM(I%) = DSInByte


Next I%

А теперь все одним куском :

Private Sub Command1_Click()

Dim ROM(7) As Byte   'массив для чтения ПЗУ таблетки
Call DSReset                              'выдаем сброс
Call DSOutByte(&H33)              'команда на чтение ПЗУ таблетки


For I% = 0 To 7                         'считываем ПЗУ в массив

DSRROM(I%) = DSInByte

Next I%

End Sub

 

Теперь осталось вывести получившийся массив байт в текстовое окно, думаю совсем не сложная задача.

Ах да, не хватает процедур  сброса, чтения и записи байт.

Вот они :

 

Private Sub DSReset() 'подпрограмма выдачи сброса


mscDev.Settings = "19200,N,8,2"   'устанавливаем скорость порта
mscDev.Output = Chr$(&H0)   'передаем сброс (h&0)

Do 'ждем когда выходной буфер очистится
Loop Until mscDev.OutBufferCount = 0

TMInTime# = Now + TimeSerial(0, 0, 1)  ' 1 секунда на ответ
Do 'ждем когда на вход что нибудь придет, с учетом тайм-аута
Loop Until (mscDev.InBufferCount > 0) Or (TMInTime# < Now)

mscDev.InBufferCount = 0   'очишаем  буфер
mscDev.Settings = "115200,N,8,2" 'устанавливаем скорость порта

End Sub

 

Private Sub DSOutByte(DSByte As Byte) 'подпрограмма вывода байта


For I% = 0 To 7

If (DSByte And (2 ^ I%)) / (2 ^ I%) Then

mscDev.Output = Chr$(&HFF)   'передаем 1

Else

mscDev.Output = Chr$(&H0)    'передаем 0

End If

Do 'ждем когда выходной буфер очистится
Loop Until mscDev.OutBufferCount = 0

Next I%

TMInTime# = Now + TimeSerial(0, 0, 1) / 18 ' 1/18 секунды на ответ
Do 'ждем когда придет все эхо, с учетом тайм-аута
Loop Until (mscDev.InBufferCount > 7) Or (TMInTime# < Now)

mscDev.InBufferCount = 0    'обнуляем эхо в приемном буфере

End Sub

 

Private Function DSInByte() As Byte 'подпрограмма ввода байта


Dim Buf() As Byte
Dim By As Byte

mscDev.InBufferCount = 0 'очищаем входной буфер
For I% = 0 To 7


Call DSOutBit(True)

Next I%

TMInTime# = Now + TimeSerial(0, 0, 1) / 18 ' 1/18 секунды на ответ
Do 'ждем когда на вход что нибудь придет, с учетом тайм-аута
Loop Until (mscDev.InBufferCount > 7) Or (TMInTime# < Now)

'проверяем, весь ли байт пришел
If mscDev.InBufferCount <= 7 Then


'байт не целиком, подставляем пучтой символ и выходим
mscDev.InBufferCount = 0    'обнуляем буфер
DSInByte = &HFF
Exit Function


End If

Buf = mscDev.Input   'читаем буфер

For I% = 0 To 7


If Buf(I%) = &HFF Then

By = By + 2 ^ I%

End If

Next I%


DSInByte = By


End Function

Private Sub DSOutBit(DSBit As Boolean) 'подпрограмма вывода бита

Do 'ждем когда выходной буфер очистится
Loop Until mscDev.OutBufferCount = 0

If DSBit Then


mscDev.Output = Chr$(&HFF) 'передаем 1

Else


mscDev.Output = Chr$(&H0) 'передаем 0

End If


Do 'ждем когда выходной буфер очистится
Loop Until mscDev.OutBufferCount = 0


End Sub

Скачать пример

Вот вроде и все  вкратце. Возникли вопросы, пишите.

 

Еще проекты

 

 
г. Кемерово 2006-2016