Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
FatumNNM писал(а):
Не груби ! Раз не можешь ответить толково, то лучше промолчи...умнее будешь казаться хоть...
А то, что по рукам за такое получить можно, от антивирусников. Есть несколько вариантов: 1. Собственный драйвер. 2. Через ZwOpenSection замапить кусок физической памяти и там подменить дескриптор в GDT и окажешься в ring0. Такой метод применялся в CrystalCPUID. 3. Для твоей задачи хватит и WinAPI. Добавлено спустя 50 секунд А я не грубил, а вот ты вполне, умнее казатся мне не нужно, я и так есть
Member
Статус: Не в сети Регистрация: 24.12.2004 Откуда: Ставрополье
Lord_of_Darkness мне необходим возможность по байтовой работы с портами Добавлено спустя 1 минуту, 58 секунд
Daemon писал(а):
Через ZwOpenSection замапить кусок физической памяти и там подменить дескриптор в GDT и окажешься в ring0. Такой метод применялся в CrystalCPUID
Вот так бы и сразу ответил)
_________________ Ставрополье Оверклокерс http://forums.overclockers.ru/viewtopic.php?t=125746 -= World Of Tanks =- (для связи Ватс Ап +7-903-418-03-43)
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
FatumNNM писал(а):
это нужно для написания драйвера работы с портами COM и LPT
Я в дипломе писал прогу для СОМ-портов (программа связывалась с устройством измерения посредством интерфейса RS-232). Так что возможно смогу что-нибудь подсказать несложное по СОМ-портам. Писал с помощью WinAPI функций, готовые компоненты не использовал (чужие ошибки в коде мне не нужны, мне итак своих хватает ), а писать собственный драйвер не решился (не имею WinXP DDK и соответствующих знаний языка С).
По поводу LPT. До меня один товарищ писал несколько похожую программу (но которая работала с портом LPT компьютера). Он там использовал довольно известный драйвер lptwdmio.sys (для прямого доступа к регистрам портов из под NT). Если хочешь работать c LPT через модифицированный драйвер, набери в поисковике LPTWDMIO. Помню в нете были примеры для Делфи.
Member
Статус: Не в сети Регистрация: 24.12.2004 Откуда: Ставрополье
Shader 3.0 благодарю
_________________ Ставрополье Оверклокерс http://forums.overclockers.ru/viewtopic.php?t=125746 -= World Of Tanks =- (для связи Ватс Ап +7-903-418-03-43)
Наверное многим известны такие программы как HideIP, Proxy Switcher и пр. Вопрос: Как на Дельфе реализовать подобное(компоненты, литература и пр.)?, т.е.: 1. Поиск и проверка проксей(прозрачный/не прозрачный) 2. Выборка одного или нескольких(как в SocksChain) проксей для работы с инетом (в моей программе с необходимым серваком). 3. Динамическая смена прокси сервера(ов) - это, собственно, следует из пункта 2. 4. Скрытие IP (Была такая функция в каспере антихакере).
Моя прога, естественно, работает через WinSock.
ЗЫ уже 5 часов яндексю и гуглю. Ничего похожего пока не нашел...
Внимание! Не надо кидать ссылки по созданию собственного прокся и уж тем паче по смене прокси в броузере (TWebBrowser) - уже изучил...
И еще, я в курсе, что постоянно обновляемые списки анонимок можно найти в инете, но хочецца автоматизации
Уже можно не отвечать - подсказали на другом форуме
Member
Статус: Не в сети Регистрация: 01.07.2006 Откуда: Челябинск
Помогите мну, взялся сделать прогу для градусника DS18B20 Через COM порт. Работает он по системе 1Wire. Там все на командах, сначала на скорости 9600 делаем сброс/присутствие отправляя ему "F0" в 16теричном формате если принято другое значение, значит датчик откликнулся, потом нада на скорости 115200 посылать команды, так вот датчик определяется а дальше немогу ничего сделать.
В документации написано нада в асинхронном режиме работать объясните мне в чем разница синхронного и асинхронного режима.
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
}{acker писал(а):
так вот датчик определяется
А в чём именно это проявляется? Можно поподробнее?
}{acker писал(а):
объясните мне в чем разница синхронного и асинхронного режима.
Насколько помню (хотя уже почти не помню ) в асинхронном режиме данные могут придти в любой момент времени. Опрос буфера приёмника (на наличие в нём новых данных) должен происходить постоянно (как правило используют API-функцию WaitCommEvent). Но для этого нужно писать многопоточное приложение (иначе функция WaitCommEvent скушает все ресурсы и прога просто-напросто зависнет). Но можно попробовать сделать попроще - организовать опрос приёмного буфера СОМ-порта по таймеру (например с интервалом 1 мс). Для этого в обработчике таймера нужно написать что-то типа
Код:
ClearCommError(hCommFile,Errors,@Stat); //Сбрасываем флаг ошибок и получаем статус порта InBytes := Stat.cbInQue; if InBytes>0 then //Если данные появились, то ReadFile(hCommFile,InBuffer,InBytes,BytesRead,nil); //Читаем данные
В общем там много заморочек. Напиши что именно уже сделано. И какие именно команды надо посылать этому датчику и в каком виде следует ожидать данные от него (это всё влияет на описание входного и выходного буферов СОМ-порта в программе).
З. Ы. С самим датчиком никакого софта не было?
Member
Статус: Не в сети Регистрация: 01.07.2006 Откуда: Челябинск
Для датчиков софта небыло да и фирменного софта для них несуществует вобще, он для микроконтроллеров. но с помощью схемы RS232<=>TTL можно присабачить к компу. Есть программа для датчика от стороннего разработчика - TempKeeper, но она платная.
Я вобще для работы с портами использую компонент BComPort или Comm32
Команда сброс/присутствие выглядит так - отправляем байт "F0" и если принимается любое другое значение то датчик ответил, если же принимается F0 то ответа нет.
Если заинтересовало могу скинуть инфу по датчику там расписаны команды.
Вобще протокол 1wire по которому общается датчик осуществляется методом отправки приема команд в виде 1го байта. Я с этим датчиком давно мучаюсь прогой TempKeeper проверял все работает температуру кажет.
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
}{acker писал(а):
Я вобще для работы с портами использую компонент BComPort или Comm32
Я в таком не силён. Писал с помошью WinAPI-функций, предназначенных для работы с СОМ-портами.
}{acker писал(а):
Команда сброс/присутствие выглядит так - отправляем байт "F0" и если принимается любое другое значение то датчик ответил, если же принимается F0 то ответа нет.
Хм. Немного странно. По идее, если датчик не отвечает, то никакого ответа и не должно быть (во всяком случае у нас было именно так). Т. е. я отправлял датчику пакет данных, и тут же запускал таймер. Если, к примеру, в течение 3-ёх секунд на СОМ-порт не приходят данные, значит датчик не отвечает. Хотя это не столь важно. Датчик у нас был самодельный и поэтому более примитивно работал.
}{acker писал(а):
Вобще протокол 1wire по которому общается датчик осуществляется методом отправки приема команд в виде 1го байта.
А есть ещё информация о том в каком режиме работает СОМ-порт? Т. е. помимо скорости передачи данных по линии RS232 нужно знать ещё число информационных бит в передаваемых и принимаемых байтах (может быть 5, 6, 7 или 8), наличие контроля четности (если таковой имеется), длительность стопового бита (1; 1,5 либо 2 импульса). Это необходимо знать для правильной инициализации порта.
}{acker писал(а):
Если заинтересовало могу скинуть инфу по датчику там расписаны команды.
Да, было бы интересно глянуть. Если хочешь, могу попробовать написать такую программу. Но только на API-функциях.
Member
Статус: Не в сети Регистрация: 15.03.2005 Откуда: Красноярск
Стыдно прерывать более возвышенную беседу, но срочно нужен небольшой совет: как и можно ли в Delphi преобразовать строку в название скажем переменной или компонента? Пытался через as, но как я понял он не для того создан... В общем help me please!
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
}{acker мыло в профиле. Добавлено спустя 40 минут, 24 секунды
}{acker писал(а):
попробуй на пустой порт пошли данные и потом прими будет одно и то же.
ИМХО, не должно так быть. Глянь на распиновку СОМ-порта. #77 Когда данные из программы отправляешь в порт ПК, они приходят на 3-ий контакт (линия TxD). Оттуда данные идут дальше по кабелю к твоему датчику (стрелка от контакта). Когда данные приходят в порт (от датчика), то попадают на 2-ой контакт порта (линия RxD, стрелка к контакту). Если отправить в порт F0, то это значение появится на линии TxD, а на линии RxD оно не должно появиться (F0 может там появиться только если замкнуть 2-ой и 3-ий контакты порта, т. е. линии TxD и RxD). Хотя наверно это и есть особенность режима "1Wire" (типа линии TxD и RxD замкнуты через датчик).
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
}{acker 1. Пример программы на Делфи (что ты мне прислал) была написана кем-то другим? (просто я, как и автор той программы, тоже из Рязани).
2. Она не подходит, т. к. написана для другого датчика? Нужно сделать нечто подобное?
}{acker писал(а):
И если не трудно то распиши назначения всех контактов порта.
Member
Статус: Не в сети Регистрация: 01.07.2006 Откуда: Челябинск
Ну пример программы не мой, кем написана незнаю, но там можно понять принцип управления датчиком.
А написана скорее всего для DS18S20 он отличается от DS1820, DS18B20 тем что там пределы температур больше и точность вроде выше.
Помоги разобраться с датчиком если понял как.
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
Ну разобраться со всеми примудростями незнакомого датчика так сходу очень сложно. Тут надо долго вникать, а про интерфейс 1Wire я вообще в первый раз услышал (хотя со своими подтягивающими резисторами он несколько напоминает I2C).
Единственное что могу предложить - так это вот такую программу.
У программы есть меню Port для выбора СОМ-порта (можно выбрать только из тех, которые есть на данном ПК). По нажатию на кнопку "Команда сброс/присутствие" программа открывает СОМ-порт и отправляет в него байт F0 (скорость передачи - 9600 бод). Тут же начинается периодический опрос (с интервалом 1 мс) входного буфера порта. Как только от датчика будет получен долгожданный байт, выдаётся сообщение - "Датчик не отвечает" (если байт равен F0) или "Датчик на связи", если полученный байт отличен от F0. Кнопки "Запуск преобразования" и "Остановка преобразования" только лишь отсылают в порт соответственно байты FF и 22 (всё в шестанцатиричном формате, естественно). Т. к. по нажатию на данные кнопки открытия порта не происходит, то их нужно нажимать только после кнопки "Команда сброс/присутствие". Это касается и кнопки "Чтение температуры", по нажатию на которую в порт отправляется байт АА, после чего программа опять начинает периодический опрос СОМ-порта. После принятия первого байта (значение температуры в десятичном формате отображается в Edit1, в том числе и отрицательные значения температуры) программа прекращает опрос порта.
Не знаю, будет работать или нет, но то что программа отсылает данные в порт и читает данные из порта - проверено. Однако как она поведёт себя с датчиком - хз.
Исходник здесь http://cp.people.overclockers.ru/cgi-bi ... ource_.rar P. S. Писал с помощью WinAPI-функций под WinXP. Работоспособность на Win9x не проверял (но был бы благодарен за такую проверку, если есть возможность).
Advanced member
Статус: Не в сети Регистрация: 09.03.2004 Откуда: Кишинёв
}{acker, Shader 3.0 Всё никак не пойму: вы пытаетесь подключив датчик напрямую(преобразование в TTL не в счёт) к COM-порту, читатать с него данные? . Насколько я знаю протоколы RS232 и One-Wire разные. Малой кровью не обойтись думаю. Советую взглянуть на эту страничку. Там предлагают сделать простенький адаптер для соединения COM-порта и датчика. И есть готовые программы с исходниками.
Member
Статус: Не в сети Регистрация: 01.07.2006 Откуда: Челябинск
Вобщето как я писал через программу TempKeeper все работает. А про SDK я знал был как то на той странице но и там у меня проблеммы с чтением байтов блокнотной памяти датчика. Да и все SDK и прочее там на C, с которым я не дружу, я хачу на делфи все сделать и написать свою программу. Добавлено спустя 25 минут, 13 секунд Shader 3.0 Посмотрел я твою програмку что то неправильно измеряет. Приведу список команд для датчика.
Скорость 9600
• Сброс/Присутствие [F0h] Определение присутствия датчика на шине
Скорость 115200
• Read ROM [33h]. Эта команда позволяет прочитать содержимое ПЗУ. В ответ на эту команду DS18S20 передает 8-битный код семейства (10h), затем 48-битный серийный номер, а затем 8-битную CRC для проверки правильности принятой информации.
• Match ROM [55h]. Эта команда позволяет адресовать на шине конкретный термометр. После этой команды мастер должен передать нужный 64-битный код, и только тот термометр, который имеет такой код, будет «откликаться» до следующего импульса сброса.
• Skip ROM [CCh]. Эта команда позволяет пропустить процедуру сравнения серийного номера и тем самым сэкономить время в системах, где на шине имеется всего одно устройство.
• Search ROM [F0h]. Эта довольно сложная в использовании команда позволяет определить серийные номера всех термометров, присутствующих на шине.
• Alarm Search [ECh]. Эта команда аналогична предыдущей, но «откликаться» будут только те термометры, у которых результат последнего измерения температуры выходит за предустановленные пределы TH и TL.
Эти команды будут работать после адресации датчика или команды Skip ROM [CCh]
• Write Scratchpad [4Eh]. Эта команда позволяет записать данные в промежуточное ОЗУ DS18S20.
• Read Scratchpad [BEh]. Эта команда позволяет считать данные из промежуточного ОЗУ.
• Copy Scratchpad [48h]. Эта команда копирует байты TH и TL из промежуточного ОЗУ в энергонезависимую память. Эта операция требует около 10мс.
• Convert T [44h]. Эта команда запускает процесс преобразования температуры.
• Recall E2 [B8h]. Эта команда действует обратным образом по отношению к команде Copy Scratchpad, т.е. она позволяет считать байты TH и TL из энергонезависимой памяти в промежуточное ОЗУ. При включении питания эта команда выполняется автоматически.
• Read Power Supply [B4h]. Эта команда позволяет проверить, использует ли DS18S20 паразитное питание. Дело в том, что DS18S20 можно подключать всего с помощью двух проводов, в этом случае для питания используется линия данных.
Еще есть команды чтения/записи
• Запись лог. 1 [FFh]
• Запись лог. 0 [00h]
• Чтение [FFh] Если принято FFh то принято лог. 1 Если принято 00h то лог. 0
Похоже считывать нада по одному биту. Для чтения температуры надо прочитать первые два байта и того 16 бит.
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
mein Микросхема датчика (насколько я понял) подключается к COM-порту компьютера через уже готовый адаптер, т. е. делать свой адаптер не нужно. Я думаю, что заводской адаптер сам согласует эти два нитерфейса (RS232 и 1Wire).
}{acker А команда сброс/присутствие работает?
}{acker писал(а):
Похоже считывать нада по одному биту. Для чтения температуры надо прочитать первые два байта и того 16 бит.
Не совсем понял. Таким образом читается само значение температуры или что? Там же максимальное значение температуры 100* (а для записи такого числа нужно 7 бит). А если каждый бит передаётся байтом (FFh интерпретируется как 1, 00h - как 0), то получается что читать нужно 7 байт, а не 2 байта? Или я не о том?
Member
Статус: Не в сети Регистрация: 01.07.2006 Откуда: Челябинск
Интерфейс 1wire это однопроводной интерфейс последовательной передачи данных с логическими уровнями TTL (лог. 0 это меньше +0,6В лог. 1 это больше +5,5В) а у COM порта лог. 0 -12В а лог. 1 +12В так вот все что надо это преобразователь уровней RS232<>TTL для подключения датчика к COM порту.
Shader 3.0 пределы температур датчика от -55 до +125. почитай документацию что я те на мыло скинул там расписано
Блокнотная память---------------Номер байта
ТЕМПЕРАТУРА младший байт-----------------0
ТЕМПЕРАТУРА старший байт------------------1
TH/пользовательский байт 1-----------------2
TL/пользовательский байт 2-----------------3
ЗАРЕЗЕРВИРОВАН------------------------------4
ЗАРЕЗЕРВИРОВАН------------------------------5
COUNT REMAIN---------------------------------6
COUNT PER °C----------------------------------7
CRC----------------------------------------------8
и того 9 байт
Единица в 16-битном числе "ТЕМПЕРАТУРА" соответствует 0.5 градуса. То есть значение 25 будет соответствовать 12.5 °C
Ведь точность градусника не 1градус а 0,5градуса потому и так получается.
Сброс присутствие работает датчик обнаруживает. но при чтении температуры постоянно выводит -86
Кстати если хочеш купи себе такой датчик стоит около 100р схемку как у меня я те дам попозже отпишу какие еще детали нада.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения