Прошу консультации по работе VB6 с LPT-портом.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
bma2bma
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 12.04.2014 (Сб) 5:59

Прошу консультации по работе VB6 с LPT-портом.

Сообщение bma2bma » 27.05.2022 (Пт) 6:46

Друзья, понадобилось средствами VB6 управлять неким устройством, которое считывает показания с 4 (четырех) термодатчиков ds18b20 и включает/выключает 4 (четыре) симистора. В исходном виде устройство представлено Ардуино, которое через COM-порт связано с ноутбуком. Использую переходник USB-COM. Работает, но получилось слишком громоздко. Хочу избавиться от Ардуино и управлять прибором непосредственно с ноутбука. В голову пришло только использование LPT-порта через переходник USB-LPT (параллельного порта, в ноуте, конечно, нет). Грубо говоря, надо снять информацию с 4 пинов порта и отправить "решение" на другие 4 пина.
1. Возможна ли такая система?
2. Можно ли передавать как-то данные с термодатчиков через LPT-порт (на Ардуино-то это делается довольно просто через 1-ware)?
3. Какой посоветуете адаптер (в Сети ходит информация, что не все переходники работают с чем-то помимо принтера)?
4. Возможно, есть какое-то решение этой задачи, избегая именно LPT-порт?
Не откажите в любезности, приведите ссылки, откуда можно взять РАБОЧУЮ информацию по этим вопросам.
Заранее благодарен!
PS: Не откажусь от готового решения, но не настаиваю :).

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16415
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Прошу консультации по работе VB6 с LPT-портом.

Сообщение Хакер » 31.05.2022 (Вт) 1:37

bma2bma писал(а):Грубо говоря, надо снять информацию с 4 пинов

Почему с 4, если все 4 термодатчика могут быть посажены на одну шину 1-wire и опрошены адресно?

Использую переходник USB-COM. Работает, но получилось слишком громоздко. Хочу избавиться от Ардуино и управлять прибором непосредственно с ноутбука. В голову пришло только использование LPT-порта через переходник USB-LPT (параллельного порта, в ноуте, конечно, нет).

Если это слишком громоздко, то более уместным решением будет не переходник USB-LPT, а переходник USB-1-wire.

Решение с LPT-портом в целом выглядит нерациональным и принципиально ненадёжным: дело в таймингах. Протокол Dallas 1-wire чувствителен к точным таймингам: нужно точно отмерять, сколько мастер улерживает линию в прижатом к земле состоянию, и через сколько после отпускания линии нужно проверять её состояние чтобы понять, что передают слейвы. Например, если слейв передаёт бит «0», он удерживает линию в течении 60 микросекунд после того, как мастер дернёл линию вниз в качестве запроса на чтение бита. Учитывая, что Windows — не система реального времени, и программе не гарантируется, в какой момент времени она получит шанс поисполняться на процессора, опрос LPT-порта с целью узнать состояние пинов обречён на то, чтобы пропускать важные события, если только не делать хитрую схемотехническую обвязку.

Да и WinAPI-функции для работы с LPT-портом предполагают установку таймаутов в миллисекундах, тогда как для протокола 1-Wire нужна микросекундная, а не миллисекундная точность.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

bma2bma
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 12.04.2014 (Сб) 5:59

Re: Прошу консультации по работе VB6 с LPT-портом.

Сообщение bma2bma » 31.05.2022 (Вт) 7:03

Ага, спасибо, Хакер.
Несколько датчиков на одой шине - это уже пройденный этап - неудобно:
1. Порой нужно подключать не все термодатчики
2. Каждый раз требуется подключение определенного датчика в свое место
3. Было дело - выходили из строя, надо ставить новый из запаса - переписывать код из-за нового его номера?
А насчет времени - микросекунды в моем деле не требуются. Вполне можно работать с миллисекундами.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16415
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Прошу консультации по работе VB6 с LPT-портом.

Сообщение Хакер » 31.05.2022 (Вт) 12:27

bma2bma писал(а):1. Порой нужно подключать не все термодатчики

Чем шинный подход мешает подключать не все термодатчики? Можно хоть один подключить, хоть сто — ни шину, ни код, ни связь при этом менять не надо.

bma2bma писал(а):2. Каждый раз требуется подключение определенного датчика в свое место

Это как раз неиспользовании шины важно важно, какой датчик на какой пин подключен, и ошибившись с этим, причём ошибиться легко, можно всё испортить. С шинным подходом датчики не важно как и в каком порядке подключены к шине, обращение идёт по уникальному идентификатору датчика.

3. Было дело - выходили из строя, надо ставить новый из запаса - переписывать код из-за нового его номера?

Конечно же нет. С какой стати вообще уникальные идентификаторы датчиков жёстко вписаны в код? Как минимум они должны быть вписаны в конфигурационный файл, в реестр или где-то ещё в настройках опрашивающей программы. Поэтому в худшем случае нужно будет подправить конфиг-файл. В лучшем случае я бы сделал нечто вроде plug-and-play подхода. В начале работы программа производит энумерацию устройств на шине и находит все датчики, которые подключены. Если один из датчиков, который в прошлый раз был, пропал, а за то появился какой-то новый — программа автоматически понимает, что произошла замена одного из датчиков и сама правит конфиг-файл и молча рабоатет с новым датчиком. Если более одного датчика пропало/заменилось, тут уже программа предлагает вмешаться человеку.

Или всегда предлагает, почуяв изменение состава шин: дорогой юзер, раньше, мол, был датчик XXXXXXXX, но он не обнаружен, зато обнаружен новый датчик YYYYYYYYYY. Расценить это как замену?

А насчет времени - микросекунды в моем деле не требуются. Вполне можно работать с миллисекундами.

Тебе не требуется, а протоколу требуется. В отличие того же от протокола I²C, где ведущий и ведомый могут замедлять передачу данных по шине, силком удерживая SCL в низком состоянии, в 1-Wire такого сделать нельзя.

Изображение

Время «A» жестко регламентировано. Время «E» жестко регламентировано. Если «A» вдруг растянется до величины «H», вместо попытки передать бит произойдёт сброс устройств на шине. Если «A» случайно растянется до величины, сопоставимой с «C», вместо передачи единичного бита будет передан нулевой бит.

А дрыгание пинами LPT-порта прикладной программой не даёт никакой гарантии того, с какими временными задержками будут дрыгаться эти самые пины.
Вложения
1wire_timings.gif
(11.8 Кб) Скачиваний: 46
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

bma2bma
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 12.04.2014 (Сб) 5:59

Re: Прошу консультации по работе VB6 с LPT-портом.

Сообщение bma2bma » 02.06.2022 (Чт) 7:55

Все разложено по полочкам. Спасибо, понял. Буду искать пути!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 3

    TopList