Последние записи
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
20th
Июл
Загрузка bmp в TImage на WinApi
{
Данный код был спроектирован в среде APIx - Visual WinAPI 2
Copyright (c) PiddleSoft 2004-2006
http://piddlesoft.narod.ru
piddlesoft@mail.ru
Дата генерации листинга - 19.07.2010 16:05:36
}
program APIx_Project26;
uses
windows, messages, commctrl; //Используемые модули
// Иконка
{$R 'icon.res'}
var
WinClass : TWndClass; //переменная класса TWndClass для создания главного окна
hInst : HWND; //хандлер приложения
Handle : HWND; //локальный хандлер
Msg : TMSG; //сообщение
Bmp : HBITMAP;
hFont : HWND; //хандлер шрифта
Image1 : HWND; //TImage
{$R 'D:\_MainDir\APIx 2 - Visual WinAPI\temp\bitmaps.res'}
procedure ShutDown; //процедура завершения программы
begin
DeleteObject(hFont); //удаление шрифта
UnRegisterClass('TAPIxForm', hInst); //удаление окна
ExitProcess(hInst); //закрытие программы
end;
function WindowProc(hwnd, msg, wparam, lparam: longint): longint; stdcall; //обработчик сообщений
begin
Result := DefWindowProc(hwnd, msg, wparam, lparam);
case Msg of
WM_DESTROY: ShutDown;
end;
end;
begin
hInst := GetModuleHandle(nil);
with WinClass do
begin
Style := CS_PARENTDC; //стиль класса главного окна
hIcon := LoadIcon(hInst, MAKEINTRESOURCE('APIXICON')); //иконка программы
lpfnWndProc := @WindowProc; //назначение обработчика сообщений
hInstance := hInst;
hbrBackground := COLOR_BTNFACE + 1; //цвет окна
lpszClassName := 'TAPIxForm'; //класс окна
hCursor := LoadCursor(0, IDC_ARROW); //активный курсор
end;
InitCommonControls;
RegisterClass(WinClass); //регистрация класса в системе
// Создание главного окна программы
Handle := CreateWindowEx(0, 'TAPIxForm', 'Форма1',
WS_OVERLAPPEDWINDOW or
WS_VISIBLE or WS_MINIMIZEBOX or WS_MAXIMIZEBOX or WS_SYSMENU,
219, 116, 550, 366,
0, 0,
hInst, nil);
// Создание шрифта
hFont := CreateFont(
-11, 0, 0, 0, 0, 0, 0, 0,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH or FF_DONTCARE, 'MS Sans Serif');
Image1 := CreateWindow(
'Static',
'' ,
WS_CHILD or SS_BITMAP or WS_VISIBLE,
104, 88, 225, 145, Handle, 0, hInst, nil);
SendMessage(Image1, WM_SETFONT, hFont, 0);
Bmp := LoadBitmap(hInstance, MAKEINTRESOURCE('Image1'));
SendMessage(Image1, STM_SETIMAGE, IMAGE_BITMAP, Bmp);
// Цикл сбора сообщений
while(GetMessage(Msg, 0, 0, 0)) do
begin
TranslateMessage(Msg); //прием сообщений
DispatchMessage(Msg); //удаление сообщений из очереди
end;
end.
bmp – это HBitmap
20th
Как в Delphi сделать принтскрин и пережать в jpeg формат?
procedure GetRS(RS:TBitmap; Path: string);
var
c: TCanvas;
r: TRect;
jpgImg: TJPEGImage;
begin
c:=Tc.Create;
c.Handle:=getWindowDC(GetDesktopWindow);
try
r:=Rect(0,0,screen.Width,screen.Height);
RS.Width:=screen.Width;
RS.Height:=screen.Height;
RS.Canvas.CopyRect(r,c,r);
RS.SaveToFile(Path);
jpgImg := TJPEGImage.Create;
jpgImg.Assign(RS);
jpgImg.SaveToFile(Path)
finally
ReleaseDC(0,c.Handle);
c.Free;
jpgImg.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
b: TBitMap;
begin
b:=TBitMap.Create;
GetRS(b,ExtractFilePath(Application.ExeName) + IntToStr(i) + ‘.jpg’);
b.Free;
Inc(i);
end;
19th
Июл
Универсальный совет для дизассемблирования
Это очень обширная тема, и, естесственно, не бывает универсальной методики, а бывают килограммы книг по дизассемблированию (копать в сторону Криса Касперски). Но вот есть что-то общее для этой темы:
Здравствуйте уважаемые формучане, есть проблемма с получением исходников из ехе приложения, упакован Armadilio, помогите советом, или прийдется позновать все тонкости дизассемблирования ((((….
1) Открой прогу в PEID(можно скачать с www.cracklab.ru) и определи версию упаковщика Armadillo.
2) Распакуй(распаковщик для Armadillo на этом же сайте) свою прогу и еще раз
открой в PEID(или можно в EXEINFO) чтобы узнать на чем же писали и версию компилятора.
3) Если нужен диззассемблированный код открой в OllyDebuger v 1.10(не 2.0) или
IDA advanced pro и анализируй код до посинения.
4) Если нужен именно исходник то после определения на чем писалось и версии
компилятора делай так:
Если покажет Delphi то декомпилируй в DeDe
Если С++ то декомпилер от HexRays тебе в руки(кстати вместе с IDA как плугин
прикрепляют).
Если честно современными декомпиляторами можно получить многое о коде но не
все(Даже и не думай об обратной компиляции исходника полученного таким способом). Поэтому шоб получить читабельный компилябельный код надо хроршо
погимориться над этим.
Кстати еще можно попробовать SourceRescuer для декомпиляции С++ Builder
19th
Перемещение TImage по форме. Как это сделать?
dmitriegorovih:
Значит у меня Delphi 7
кидаем на форму image1 и кнопку, чтоб создавались image(ы)
во “всеобщий var” пишем следующиеvar
x2,y2,n:integer;
nagata:boolean;в обработчике onmousedown пишем следующие
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
nagata:=true;
x2:=x;
y2:=y;
end;в обработчике onMouseMove пишем следующие
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if nagata=true then begin
if xx2 then begin
Timage(sender).Left:=Timage(sender).Left+(x-x2)
end;
if yy2 then begin
Timage(sender).Top:=Timage(sender).Top+(y-y2)
end;
end;
end;в обработчике onMouseUp пишем следующие
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
nagata:=false;
end;по нажатию кнопки пишем следующие
procedure TForm1.Button1Click(Sender: TObject);
Var K:Timage;
Begin
K:=Timage.create(self);
k.parent:=self;
k.picture:=image1.picture;
k.onMouseMove:=image1.onMouseMove;
k.onMouseDown:=image1. onMouseDown;
k.onMouseUp:=image1.onMouseUp;
k.name:=’Image_’+inttostr(n);
inc(n);
end;
Ещё один способ:
Кидаем на форму TPanel На нее кидаем TImage, и расстягиваем Image на AlClient чтоб оно заполнило всю панель.
Далее в в обработчике зажатия мышки для Image пишем:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const Sc_dragmove = $F012;
begin
ReleaseCapture;
Panel1.Perform(WM_SYSCOMMAND, Sc_dragmove, 0);
end;
19th
Delphi+MySQL. Какой компонент можно использовать?
Posted by Chas under Пост-обзор
MySQL Data Access Components v5.90.0.57 (Delphi 5-2010)
MySQL Data Access Components (MyDAC) – это расширенная библиотека VCL / VCL DOT NET / CLX компонентов для быстрого прямого доступа к серверам MySQL из Delphi, C++Builder и Kylix. MyDAC тщательно протестирован на производительность и стабильность для обеспечения наиболее быстрого соединения по сетевому протоколу с MySQL.
— Прямой доступ к данным сервера. Не требует установки других средств доступа к данным (таких как BDE и ODBC).
— В Direct режиме не требует клиента MySQL, а работает напрямую через TCP/IP.
— Полная поддержка последних версий MySQL и всех типов данных MySQL.
— Disconnected Model с автоматическим контролем соединения для работы с данными в режиме offline.
— Local Failover для обнаружения потери соединения и перевыполнения определенных операций.
— Все типы локальной сортировки и фильтрации.
— Автоматическое обновление данных с помощью компонентов TMyQuery, TMyTable и TMyStoredComponents.
— Поддержка Unicode и национальных кодировок.
— Поддержка специфических для MySQL типов данных и функций, таких как блокировка, типы данных SET и ENUM.
— Расширенная функциональность выполнения скриптов при помощи компонента TMyScript.
— Поддержка макроподстановок в текстах запросов.
— Интеграция с MySQL Developer Tools для решения сложных задач разработки и администрирования баз данных.
— Простая миграция с BDE с помощью Migration Wizard.
19th
Как установить принтер. WinApi и С++
TCHAR temp[MAX_PATH];
DWORD size = MAX_PATH;
GetDefaultPrinter(temp, &size);
HDC hDC = CreateDC(NULL, temp, NULL, NULL);
if(hDC){
DOCINFO docinfo;
docinfo.cbSize = sizeof(docinfo);
docinfo.lpszDocName = _T("Simple");
docinfo.lpszOutput = NULL:
docinfo.lpszDatatype = _T("EMF");
docinfo.fwType = 0;
if(StartDoc(hDC, &docinfo) > 0){
if(StartPage(hDC) > 0){
TextOut(hDC, ....);
EndPage(hDC);
}
EndDoc(hDC);
}
DeleteDC(hDC);
18th
Июл
Использование оператора goto в современных программах
Electron:
Можно ли при написании современных программ использовать оператор goto. И не могу понять почему все так избегают этот оператор как злую собаку. Все равно на низком уровне после дизассемблирования там же есть что то вроде jmp,jz,jnz(тоже goto). Так почему же на ЯВУ нельзя?
15th
Июл
Рассылка. Выпуск 67.
Posted by Chas under Рассылка
От ведущего.
Добрый день, читатели рассылки. Сегодня выходит 67 выпуск рассылки, читайте в нём: (читать всё…)
14th
Июл
Энкодер датчика PDF на ПЛИС. Часть 1
Данная статья рассчитана в помощь программистам и инженерам-разработчикам в области промышленной автоматизации и АСУТП. Поскольку материал объемный, то было решено разделить статью на части, в первой рассмотрим схемотехнику и конструктив модулей передачи и приема сигналов с датчиков приращений, алгоритм работы энкодера, а в остальных – его реализацию на ПЛИС, методику программирования и непосредственно практическое создание тестовой утилиты визуализации состояний датчика приращений…
Сергей Бадло
by raxp http://raxp.radioliga.com
Каждый компонент системы не должен быть наилучшим, а ровно таким, чтобы обеспечить требуемый уровень функционирования всей системы… / принцип системотехники
Для передачи импульсных сигналов с датчика приращений на относительно большие расстояния в условиях промышленных помех можно использовать как радиоканал, так и проводной вариант*, к примеру, дифференциальные интерфейсы на основе RS- 485 и LVDS. Реализация радиоканала и RS-485 видится избыточной, так как необходимо наличие «упаковщика» как минимум трех сигналов с шифратора приращений (A, B и строба), т.е. наличие контроллера. Как обойти эту проблему?
Список сокращений, использованных в статье:
PDF – датчик углового положения,
EEPROM – перепрограммируемая ПЗУ,
ПЛИС – перепрограммируемые логические матрицы с сохранением памяти CPLD и без сохранения FPGA (работа схемы ограничивается наличием питающего напряжения),
ТИ – тактовые импульсы,
LVDS (Low-Voltage Differential Signaling) – интерфейс передачи информации дифференциальными сигналами малых напряжений,
Шифратор приращений – преобразователь, на выходе которого в цифровой форме представляются воспринимаемые ими перемещения. Различают* поворотные и абсолютные шифраторы.
Краткий экскурс…
Вспомним про формат LVDS. LVDS используется в таких компьютерных шинах как FireWire, USB 3.0, PCI Express, DVI, Serial ATA. Но среди прочего, данный интерфейс получил распространение и для передачи сигналов на больших скоростях на расстояния до сотни метров. Да, именно так, уже существуют и такие LVDS драйверы. Кроме того, сигналы с шифратора приращений необходимо декодировать и привести в удобоваримый вид. А значит, возникает необходимость создания аппаратного энкодера для определения таких параметров как: положение ротора, направление вращения, обрыв в канале и т.п.
Рис. 1
Для реализации алгоритма энкодера видится два пути:
- Использование микроконтроллера
- Использование ПЛИС
Хороши оба варианта. Но для меня как разработчика более удобен вариант представления в виде схемы. Достоинства программируемых логических интегральных схем (ПЛИС) хорошо известны, это и наличие множества готовых библиотек от простейших логических элементов до микропроцессоров и возможность многократного перепрограммирования для изменения схемы, без внесения изменений в печать, и наличие си- подобного языка VHDL и возможность просто нарисовать поведение схемы. Хотя последние вряд-ли можно назвать преимуществами, так эти свойства присущи и микроконтроллерам…
Таким образом, задачу разработки энкодера для шифраторов приращений можно разбить на следующие этапы:
- Разработка модуля связи (передачи и приема) для передачи импульсных сигналов на большие расстояния в условиях промышленных помех
- Аппаратная реализация алгоритма энкодера на существующих ПЛИС
- Создание тестовой программы визуализации состояния датчиков приращений
Практика. Реализация модуля передачи и приема сигналов с шифратора приращений
Дифференциальный метод передачи используется в LVDS, поскольку обладает меньшей чувствительностью к общим помехам, чем простая однопроводная схема. Применение источников сигнала с дифференциальным токовым выходом и приемников с низкоомным дифференциальным входом (см. рисунок 2) обеспечивает минимальные индуктивные наводки, поскольку информация передается в форме тока, а емкостная наводка мала, так как при хорошей симметрии линии передачи она является синфазной и подавляется входным дифференциальным приемником. Дополнительной защитой линии является ее экранирование.
Рис. 2. Канал передачи сигнала с помощью тока нечувствителен к индуктивным наводкам
Поскольку дифференциальные технологии, в том числе и LVDS, менее чувствительны к шумам, то в них возможно использование меньших перепадов напряжения, до 350 мВ. что позволяет по сравнению с другими способами передачи сигналов значительно снизить потребляемую мощность. Например, статическая мощность, рассеиваемая на нагрузочном резисторе LVDS, составляет всего 1.2 мВт, по сравнению с 90 мВт, рассеиваемыми на нагрузочном резисторе интерфейса RS-422. На рисунке 3 представлена схема организации канала связи между шифратором приращений и контроллером энкодера с использованием дифференциальных линий передачи:
* Комментарий автора.
Поворотные шифраторы – генерируют выходные импульсы, которые подсчитываются реверсивным счетчиком, поэтому их показания соответствуют тому, как далеко диск продвинулся с начала отсчета. Здесь в основном применяются два чувствительных элемента, расположенных в преобразователях таким образом, что их выходы сдвинуты относительно друг друга на 90° по фазе.
Абсолютные шифраторы – реализуют кодированный выход, который индицирует абсолютное положение контролируемого объекта, причем кодирование производится в двоичном коде, а его длина соответствует длине кода измерительной системы. Как правило, снабжены интерфейсами: SSI (Synchronous Serial Interface), СAN, PROFIBUS, RS-485.
** Комментарий редакции.
Следует упомянуть про параллельно-последовательные преобразователи со встроенным антидребезгом и нормализацией сигналов цифровых входов и преобразования их в единый поток данных, передаваемый по SPI интерфейсу. К примеру, ИМС SN65HVS88x от Texas Instruments. Однако это потребует минимум еще трех корпусов со стороны передатчика и приемника, что приведет к удорожанию модуля связи. Да и сам интерфейс SPI не предназначен для таких расстояний. Кроме того, существуют кодеры на основе сдвигающих регистров (НТ12Е/НТ12D или MC145026/28). Но их применение оправдано в случае использования радиоканала.
Рис. 3. Схема организации канала передачи сигналов энкодера
Заданным условиям удовлетворяют нижеприведенные схемы (см. рисунок 4 и 5) на основе дифференциальных приемо-передатчиков сигнала LVDS формата SN65LVDS31 и SN65LVDS32 фирмы Texas Instruments [1].
Модуль связи энкодера конструктивно состоит из двух модулей: передачи и приема, разнесенных в пространстве. Модуль передачи размещается рядом с энкодером, а модуль приема непосредственно около контроллера энкодера.
Плата модуля передачи имеет в своем составе:
- узлы согласования входного уровня для типов датчиков приращений с открытым коллектором или потенциальным выходом
- узел формирования питающего напряжения 3.3В для ИМС дифференциального передатчика – U1
- дифференциальный передатчик с согласующими сопротивлениями – U2
- клеммник для подключения входных сигналов с датчика приращений – X1
- клеммник выходных сигналов – X2
Плата модуля приема включает:
- дифференциальный приемник с согласующими сопротивлениями – U1
- узел формирования питающего напряжения 3.3В для ИМС дифференциального приемника с гальванической развязкой – U2
- узлы согласования выходного уровня по типу СК или открытый коллектор
- клеммник для подключения входных сигналов с линии связи – X1
- клеммник выходных сигналов для энкодера – X2
Конструктив модуля связи
Платы модулей [3], габаритами 100х85 мм, выполнены из стеклотекстолита и разведены в пакете OrCad (см. рисунки 6 и 7). На плате передатчика перемычки X1…X4 (PLS-2) предназначены для конфигурации платы под датчики с открытым коллектором и потенциальным выходом. Суппрессоры D7…D10 служат для ограничения входных уровней и дополнительной защиты входных цепей микросхемы дифференциального передатчика U9. R21…R24 обеспечивают согласование длинной линии на основе витых пар***.
Рис. 4. Схема электрическая принципиальная модуля передачи сигналов датчика приращений
На плате приемника предусмотрен вариант, как потенциальных выходов, так и с открытым коллектором. Для питания цепей приемника использован DC-DC преобразователь PUS-0505 (U5). Допустимо использование любого 5-вольтового в корпусе SIP мощностью не менее полуватта. Гальваническую развязку сигналов обеспечивают оптроны TLP621 (U2, U3, U4, U6). Предусмотрено питание схемы как от 5В, так и 24В источника. Элементы R1…R4 обеспечивают согласование длинной линии на основе витых пар. При необходимости инверсии выходных сигналов предусмотрена схема НЕ на ИМС SN74F04 (U10).
Рис. 5. Схема электрическая принципиальная модуля приема сигналов датчика приращений
* Комментарий автора.
В качестве кабеля связи рекомендуется использовать следующие марки кабеля:
— FTP 4x2xAWG 24/1,
— S- FTP 4x2xAWG 24/1,
— S- STP 4x2xAWG 24/1.
Рис. 6. Печатная плата “вид снизу” модуля передачи и приема (сверху-вниз)
Все резисторы, для упрощения разводки платы, корпусные. Конденсаторы типоразмера 0805. Используемые входные и выходные клеммники – WAGO 236-401 c защелками под отвертку. Платы установлены в корпуса из поликарбоната PHOENIX CONTACT с креплением на DIN рейку. Непосредственно габариты и вся конструкция в сборе представлена на рисунке 8.
Аппаратная часть. Краткое описание контроллера энкодера
Аппаратной основой энкодера датчика приращений служит модуль DIC110 (UNIOxx-5) фирмы Fastwell [2, 3], выполненный в формате MicroPC и установленный в 8-ми слотовое промышленное шасси на базе 486 процессора под управлением DOS. Шасси позволяет установку как ISA, так и PCI плат периферийного ввода-вывода.
Модули UNIOxx-5 имеют 5 разделяемых линий прерываний, канал прямого доступа к памяти (DMA) и светодиод обращения к плате. Внутренняя структура представлена на рисунке 9. Платы UNIO, в зависимости от загруженной прошивки, могут выполнять цифровой/частотный ввод-вывод, аналоговый ввод-вывод (через модули Grayhill), измерение частоты и многие другое. Прошивка изменяется программно, благодаря чему разработчики получают уникальную возможность решать с помощью одной платы множество задач. Если взглянуть на структуру, то сразу видно, что подобные возможности реализуются в основном благодаря наличию ПЛИС. Каждая матрица обслуживает 24 канала ввода-вывода. Загрузка схем матриц производится при включении питания или аппаратном сбросе (RESET) из электрически перепрограммируемого постоянного запоминающего устройства (EEPROM). Изменение варианта загружаемой схемы и, следовательно, способа обработки сигналов осуществляется перепрограммирова- нием EEPROM непосредственно в системе.
Рис. 7. Расположение элементов “вид сверху и снизу” модуля передачи и приема (сверху-вниз)
Рис. 8. Конструктив модуля передачи и приема импульсных сигналов
Рис. 9. Структура модуля UNIOxx
Разработка ПО. Алгоритм энкодера
Итак, приступим к основной задаче. Для работы нам понадобится следующее:
- Turbo C++ IDE ver.3.0 от Borland
- IDE среда Xilinx Foundation Series 3.1i / 6.2i для ПЛИС [4]
- Модуль передачи-приема импульсных сигналов датчика приращений
- Промышленная плата UNIOxx-5 от Fastwell
- JTAG.XILINX программатор из материала [5] или утилита внутреннего загрузчика ISP от FastWell [6]
Энкодер предназначен для декодирования сигналов угловых датчиков положения и передачи информации об угловом положении, скорости, направления вращения, количества оборо- тов, а также допол- ните- льных сигна- лов (в виде приз- наков отказа кана- лов, на- личия строба) в виде 8-ми разрядной цифровой последовательности для дальнейшей расшифровки программным путем.
Входные сигналы контроллера
Сигналы с каждого датчика шифратора приращений представляют последовательности импульсов, смещенных на 90 градусов по периоду следования. Частота следования импульсов определяет скорость вращения. Максимальная частота – 200 кГц. Максимальное количество импульсов за 1- оборот – 6000. Каждый оборот идентифицируется стробирующим импульсом. На рисунке 10 представлена последовательность импульсов от датчика, поступающих на вход контроллера:
A – прямой и инверсный канал A,
B – прямой и инверсный канал B,
O – прямой и инверсный строб O (длительность равна четверти периодаимпульса по каналу А или В ±10%)
Рис. 10. Входные сигналы энкодера
Управляющие сигналы:
- сигнал чтения READ по шине ISA платы UNIOxx-5
- адресация (А0…А2) для организации чтения
- (коммутации) 6-ти внутренних регистров тактовые импульсы (меандр) частотой 50 МГц от внешнего генератора платы UNIOxx-5
Выходные сигналы контроллера
Выходные сигналы для каждой микросхемы FPGA передаются по шине ISA в последовательности, описанной в таблице. Дальнейшая работа с шиной ISA определяется принципиальной схемой и протоколом обмена с микросхемами FPGA. Cформируем основные требования к энкодеру:
- работоспособность при входных частотах канальных импульсов от 0.0 до 200 кГц
- выставление бита направления вращения
- запись данных в буферные регистры по поступлению: сигнала READ и опросе нулевого адреса из шины ISA, и хранение данных до поступления следующего сигнала READ
- измерение количества импульсов, соответствующих угловому положению датчика и реверсом счетчика количества импульсов по направлению вращения
- антидребезговый прием дискретных сигналов каналов (прямого и инверсного А, прямого и инверсного В)
- динамическое изменение ширины защитного интервала для каждого из каналов в пределах длительности канального импульса;
- хранение результата по предыдущему сигналу READ и выдачу текущего значения относительного углового положения, признаков канальных отказов, наличия строба, количества оборотов, относительной скорости
- выдача должна осуществляться путем последовательного выбора (адресации по шине адреса А0…А3) внутренних регистров
- хранения и записи в виде битовой последовательности DO0…DO7 по портам платы модуля UNIOxx-5
Теперь перейдем к программной части…
Скажем пару слов о среде САПР Xilinx****. Программные средства Xilinx Foundation представляют собой систему сквозного проектирования, которая реализует полный цикл разработки цифровых устройств на базе ПЛИС, включая программирование кристалла. Оболочка Project Navigator предоставляет пользователю интерфейс для работы с проектом и управления всеми процессами проектирования и программирования ПЛИС. Исходные описания проектируемых устройств могут быть представлены в текстовой форме с использованием языков HDL (Hardware Description Language), в виде диаграмм состояний или принципиальных схем. В состав пакета включен схемотехнический редактор и комплект библиотек.
Согласно спецификации на модуль UNIOxx-5 [2, 3], используются ПЛИС FPGA – XC5204. Теперь, запустив IDE Xilinx, создадим новый проект и выберем соответствующую матрицу (см. рисунок 11):
Рис. 11. Создание проекта и выбор параметров в среде Xilinx
Заключение
Следует обратить ваше внимание, что при необходимости передачи импульсных сигналов с датчика приращений на расстояния более чем несколько сот метров (но менее километра), нужно использовать дифференциальные приемо- передатчики с драйверами предкоррекции сигналов и компенсацией потерь. В качестве таких приемо-передатчиков можно рекомендовать микросхемы LVDS CLC001 и CLC012 фирмы National Semiconductor [8, 9].
* Комментарий автора.
Если вы впервые столкнулись с данной средой, то сперва рекомендуется ознакомиться с кратким руководством [7] по работе с пакетом.
Ресурсы
- Спецификация на ИМС SN65LVDS31 (SO-16) http://www.alldatasheet.com/datasheet-pdf/pdf/28186/TI/SN65LVDS31D.html и спецификация на ИМС SN65LVDS32 http://www.alldatasheet.com/datasheet-pdf/pdf/28217/TI/SN65LVDS32A.html
- Fastwel Micro PC compatible UNIOxx-5. Программируемые модули ввода-вывода. Руководство пользователя. – Doc. UNIOxx-5 ver.02.02
- Спецификация на модуль ввода-вывода UNIOXX-5 http://www.fastwel.ru/content/ecmsfiles/239170.pdf
- Сайт производителя Xilinx http://www.xilinx.com
- С. Бадло. JTAG.XILINX программатор. – Радиолюбитель, Минск, 2008, №7, с.38 http://raxp.radioliga.com/cnt/s.php?p=jtag.pdf
- Печатные платы модуля связи GERBER RS-274X http://programmersclub.ru/pro/pro4.zip
- Руководство по работе с Xilinx Foundation Series 3.1 http://raxp.radioliga.com/cnt/s.php?p=x3.zip
- Спецификация на драйвер CLC001 http://national.com/pf/CL/CLC001.html
- Спецификация на драйвер CLC012 http://national.com/pf/CL/CLC012.html
14th
Вывести набор случайных строк из бд? php
Johnatan
$amount = 10; // сколько строк выбирать из базы
$rows = mysql_result(mysql_query(’SELECT COUNT(*) FROM `sb_eng`’), 0);
$fquery = array();
while (count($fquery) < $amount) {
$fquery[] = '(SELECT * FROM `sb_eng` LIMIT '.rand(, $rows).', 1)';
}
$query = implode(' UNION ', $fquery);
$res = mysql_query($query)У тебя будет чистый набор рандомных строк из таблицы. Быстро и эффективно. Плюс не забываем про замечательную функцию mysql_fetch_assoc
Облако меток
css реестр ассемблер timer SaveToFile ShellExecute программы массив советы word MySQL SQL ListView pos random компоненты дата LoadFromFile form база данных сеть html php RichEdit indy строки Win Api tstringlist Image мысли макросы Edit ListBox office C/C++ memo графика StringGrid canvas поиск файл Pascal форма Файлы интернет Microsoft Office Excel excel winapi журнал ПРОграммист DelphiКупить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)