|
||||||
|
||||||
|
Всех заинтересованных лиц сразу хочу успокоить - во всём том, что я выкладываю на своём сайте,
никаких вирусов нет и быть не может. "Троянов" здесь тоже нет, можете даже не пытаться их найти.
Выложены, конечно же, далеко не все проекты, а только наиболее интересные из них. Список будет
дополнится.
Всё проекты, которые Вы здесь найдёте, выполнены с использованием компилятора Microsoft Visual C
разных версий. Некоторые из них требуют наличия библиотеки MFC. Если что-то из бинарников у Вас
не запустится, то Вам необходимо будет установить Microsoft
Visual C Redistributable. Любые находящиеся здесь бинарники вы можете использовать как угодно
on your own risk. Часть проектов сопровождаются исходными кодами, они здесь
встречаются трёх видов:
Редактор с подсветкой синтаксиса для генератора Coco/R.
Задачи синтаксического разбора чрезвычайно распространены. Для их решения существует огромное количество инструментов: ANTLR, Yacc, Bizon, Bizon++ и другие. Мне, однако же, больше всего нравится COCO/R. Однако, у него есть небольшие недостатки:
Эмулятор контроллера станции управления РУМБ КСУ-06.
Для отладки и проверки некоторых идей очень удобно иметь эмулятор. Поэтому мной и был разработан эмулятор для контроллера станции управления РУМБ КСУ-06. Фактически, это - эмулятор Microchip PIC 18F8720 вместе с эмулятором индикатора FUTABA NA204SD02AA/BA-#0#. Система команд реализована полностью, в нём неплохо работает штатная прошивка, сделанная для контроллера. Данный эмулятор применяется для создания новых меню КСУ. Можно, конечно, отлаживаться на реальном "железе", но прошивка занимает время, а с эмулятором это происходит быстрее и удобнее. Опять же, это мои исходники и при необходимости я их всегда смогу изменить. Эмулятор позволяет загружать и выполнять (с эмуляцией прерываний):
Программный комплекс верхнего уровня РУМБ-8 для КСУ-06.
Контроллера РУМБ КСУ-06 - это просто железка, работать с ним можно только "в поле". Для разбора журналов, анализа эффективности настроек, поиска неисправностей нужен удобный инструмент, с помощью которого можно неспешно разбирать считанные ранее данные в тиши кабинета. Таким инструментом и является РУМБ-8. Он позволяет:
Эмулятор modbus-slave устройства (для serial-порта).
Modbus - очень распространённый протокол для получения данных из "железа". Эмуляторов для master и slave в Интернет можно найти очень много, вот только хороших среди них не так уж много. Для наших внутренних целей я разработал свой эмулятор, отличающийся следующими особенностями:
Анализатор протоколов (для serial-порта).
Мне часто приходится ковыряться в различных полевых протоколах. Иногда они более-менее стандартные, но некоторые экземпляры скорее стоит назвать извращёнными. Контроллер станции управления РУМБ КСУ-06 поддерживает многие из них. Для того, чтобы отладка не превращалась в кошмар и к вечеру ни у кого голова бы "не пухла" от 16-ричных чисел, мной был создан анализатор для нескольких протоколов. Анализатор позволяет просматривать "на лету" следующие протоколы:
Программный эмулятор slave-устройства УПИ (для serial-порта).
Для работы с контроллерами
РУМБ семейства КСУ-06. используется устройство, называемое УПИ. По назначению, это - та же
"флешка", но предназначенная для работы при низких температурах. Иногда этого самого УПИ под
рукой не оказывается, вот для таких случаев и была создана данная программа.
Скачать программу можно по этой ссылке.
Утилита для рекурсивного удаления временных файлов в MSVC.
Те, кто программируют на C++ в Microsoft Visual Studio, знают, что сей замечательный компилятор,
да и сама среда, используют временные файлы для своих разнообразных нужд. При архивации
проекта эти файлы не нужны - они создадутся заново. Так зачем же тратить на них свободное место
и засорять свои архивы? Для избавления от таких файлов очень давно я написал для себя очень
простую утилиту, которой предлагаю пользоваться и Вам.
Скачать программу можно по этой ссылке.
Исходный текст на C++ лежит здесь.
Утилита для отправки по почте большого количества файлов (MAPI).
Иногда приходится отправлять по почте большое количество файлов с вложениями. Например, если кто-то
попросил "нарезать" большой архив на части и высылать по частям, не более 500 кб. Обычно, такие
проблемы вызваны бесплатными почтовыми серверами, но... заказчиков не выбирают. Если у Вас бывают
такие случаи, то данная программа Вам поможет. В отличие от всего остального, она написана не на
C++, а на C#. Это не был эксперимент - я вполне неплохо владею C#, просто данную задачу на C# было
сделать проще, а на C++ - просто лень ;-).
Исходный текст на C# лежит здесь.
Функциональный аналог Realflex SCADA на платформе win32.
В начале 2002 года возникла задача написать небольшую однопользовательскую систему под win32 для
работы одним из RTU, выпускаемых компанией DATAC. Задача
была поручена мне, постановку задачи никто SCADA-системой ещё не называл - требования были достаточно
простые.
Работа была начата с реализации сервера протокола между Realflex
и клиентами Flex.Win, чтобы не
пришлось разрабатывать ещё и клиентскую часть. Работа шла быстро и через некоторое время был реализован
необходимый минимум, позволявший показывать на штатной панели Flex.View данные реального времени
и посылать управляющие воздействия. Через некоторое время стало понятно, что никаких препятствий для
реализации практически ВСЕГО протокола нет и "аппетит пришёл во время еды". В результате, через
некоторое время стали поддерживаться еще и:
Компонент для экспорта данных Realflex SCADA в реляционные СУБД.
У любой SCADA-системы есть свой собственный формат хранения исторических данных и тревог.
Так делают иногда из коммерческих соображений, чтобы потом продать ещё и инструмент для
выборки данных. Но чаще "авторский" формат объясняется тем, что он работает в разы быстрее.
В Realflex тоже существует собственная модель хранения
данных, оптимизированная для высокой скорости. Однако иногда у заказчика бывают потребности
интегрировать SCADA с какими-то системами, одним из решений такой задачи может быть непрерывный
экспорт истории в одну из реляционных баз данных. Мой продукт Flex.Base был создан именно
для решения таких задач.
Я разработал несколько версий Flex.Base для экспорта в MySQL, Microsoft SQL Server и
Oracle 8i. Наиболее быстро работала версия для MySQL за счёт отсутствия транзакций. Одна из
версий работала (возможно, работает до сих пор) на нефтяной платформе BP ULA в Норвежском
секторе Северного моря, где мне довелось побывать. Она используется для интеграции с ABB
Operator Station.
Продукт является коммерческим и продаётся как опция пакета Flex.Win.
GUI telnet-клиент с эмуляцией консоли QNX.
Этот telnet-клиент имеет был создан для проекта
Flex.Win. В компании
DATAC тогда шли работы по создании "выносного" рабочего места оператора для популярной
SCADA-системы Realflex. Однако в первых версиях не все необходимые операции с QNX могли
быть выполнены через среду. "Родной" telnet-клиент от Windows не вполне соответствовал
потребностям из-за того, что у QNX версии 4 описание терминала (TERM=qnxt) сильно
отличалось, что для полноэкранных сред (типичным представителем полноэкранных сред
являются среды компилятора и отладчика Watcom). Поэтому мой проект и был реализован.
Однако, он не так прост, как может показаться. В нём был реализован встроенный FTP-explorer
(в виде отдельной OCX) и реализован язык скриптов, позволявший автоматизировать из
командной строки часто встречающиеся функции. Скрипты были похожи на скрипты для установки
связи по модему с конструкциями WaitFor и Transmit и имели необходимые
логические конструкции вроде if и while. Пример скрипта Вы можете
скачать здесь.
Продукт является коммерческим и продаётся в составе пакета
Flex.Win
Шлюз интерфейса SPPI в технологическую почту.
На железной дороге широко использовался шлюз из протокола АП-70 в электронную почту,
который разработал Андрей Чесноков, с которым мы раньше сидели за одной партой, строили
ракеты и хулиганили. Этот устаревший протокол был нужен для обмена данными с ЕС ЭВМ, на
которой работала ЕК ИОДВ. Одним из клиентов этой системы был АРМ ТВК, разработанный ЦИТТРАНС.
ТВК - продукт по-своему уникальный, в нём была реализована мультизадачность в DOS на основе
весьма нестандартных решений. К середине же 90-х годов все приличные разработчики этой системы
перебрались в США и иные отдалённые места, фактически его развитие остановилось. Поэтому в
ТВК остался крайне убогий протокол АП-70 и с интерфейсом файлового обмена SPPI.
Вот для этого экзотического продукта я и написал свой некогда популярный шлюз SPPI в
электронную почту. Программа стартовала, ждала нотификаций файловой системы и обрабатывала
очередь исходящих сообщений. Исходящие сообщения уходили по протоколу SMTP для передачи в
ЕК ИОДВ. Ответы забирались из почтового ящика по POP3 и "скармливались" ТВК по тому же
интерфейсу SPPI. Не думаю, что кому-то сейчас интересен протокол АП-70 или SPPI, но для
любителей посмотреть на старинные поделки исходный текст
прилагается.
Некоторые полезные примеры по работе с сокетами и перехвату API.
Это даже не проекты, а просто небольшие фрагменты кода, которые могут быть полезны начинающим.
Они были написаны давно и их можно использовать только для примера. Использовать их
в собственных проектах без серьёзной переработки и отладки я бы не советовал.
Я в своё время много экспериментировал и хочу поделиться следующим:
Порт библиотеки mysql++ для MySQL версии 3.x.
Я много работал с различными базами данных, в том числе и MySQL. Этот сервер баз
данных мне всегда нравился больше других своей многоплатформенностью и потрясающим
быстродействием. Для него создано много полезных API и инструментов, одним из которых
является библиотека mysql++. Этот интерфейс очень удобен для программирования на C++ и
я широко использовал его в своих проектах.
Тучи сгустились с выходом в свет компилятора Microsoft Visual C версии 7 (2003). После
того, как они "привели свою STL в соответствие со стандартами", mysql++ больше не желала
собираться, выдавая тонны каких-то космических ошибок на сложных template-ах.
Пришлось "засучить рукава" и почти месяц приводить STL-ный код в рабочее состояние.
В конце концов мне удалось добиться, что все мои проекты, использовавшие mysql++, стали
нормально собираться и работать и в VS2003. Возможно, всё будет хорошо и c VS2005/2008, но
я этого не проверял. Если Вы будете собирать исходники этой библиотеки, то обновите файлы
header-файлы и библиотеки от MySQL API для поддержки более новых версий.
Прежде, чем начинать эту работу, я перерыл весь Интернет в поисках FAQ и даже переписывался
с авторами этой библиотеки. Но результата не было, готового решения я не нашёл.
Можете мне поверить на слово - в тот момент, когда я это делал, mysql++ на VS2003 не
собиралась ни у кого. Возможно, и сейчас эта сборка существует в единственном экземпляре
на этом сайте.
Исходный текст на C++ лежит здесь.
ISAPI-фильтр к IIS для перевода cp1251 в koi-8r "на лету".
Когда я работал в ИВЦ Приволжской железной дороги, полыхали "религиозные войны" по любым
вопросам противостояния Windows и различных версий UNIX. Одним из проявлений такого
"фундаментализма" была война кодировок koi-8r и cp1251. Проблема сторонников Windows
в то заключалась в том, что держать и поддерживать страницы в koi-8r было не очень удобно.
Особенно крупные неудобства были, когда приходилось в ASP-скриптах выдавать данные, взятые
из Microsoft SQL сервера. Для таких задач требовался инструмент для перекодировки "на лету".
До меня в Новосибирске подобный фильтр сделал Антон Лобастов, который назывался rusauto.dll.
Он определял кодировку в зависимости от "Accept-Language:" и "User-Agent:". Но у его программы
один крупный недостаток: она не работала при включенном локальном кеше у IIS 3.0, что делало
невозможным ее использование вместе с MS Index Server. Это сильно замедляло работу сервера,
но с этим можно как-то было как-то мириться. Однако, в IIS 4.0 и последующих возможность
отключения локального кеша убрали вовсе.
Это и заставило меня создать свой ISAPI-фильтр. При его создании я стремился к максимальной
простоте и у меня это получилось - фильтр не имеет настроек и автоматически меняет кодировку
всего потока между сервером и браузером на требуемую. При работе на стороне Windows можно ни о
чём не задумываться, а на стороне клиента автоматически получится koi-8r. При этом, ни с ASP, ни
c SQL никаких проблем нет и производительность сервера не страдает.
Скачать программу можно по этой ссылке.
Исходный текст на C++ лежит здесь.
Комплекс по приёму телеграмм (для модема "Альфа-Телекс")
Эта программа была создана для приёма телеграмм из МПС. В те давние времена все директивные
материалы на железных дорогах передавались по телеграфным каналам. Программный продукт был
предназначен для приёма и телеграфных сообщений по выделенным и коммутируемым линиям со
скоростями 50, 75, 100, 134.5 и 150 бод. Сейчас она имеет скорее археологическую ценность,
но вдруг у кого-нибудь до сих пор используются телеграфные каналы?
Скачать программу можно по этой ссылке.
Исходный текст на C++ лежит здесь.
Программа для проведения тестирования (для учебных заведений).
Моя жена работает учителем информатики в средней школе. И как-то, то есть уже весьма давно,
я решил сделать ей инструмент для автоматического тестирования. Задумка была проста - создать
некий формальный язык, в котором за каждый ответ начислялись бы баллы. Затем сумма набранных
баллов выводилась бы в конце теста. Идея несколько похожа на тесты Prometric, которую
используют авторизованные центры сертификации Microsoft. В архиве лежит пример теста.
Скачать программу можно по этой ссылке.
Исходный текст на C++ лежит здесь.
Консольный telnet-клиент с эмуляцией терминала SCO ANSI.
На Приволжской железной дороге активно развивали терминальные системы, построенные на
основе SCO и FreeBSD. Штатный telnet-клиент Windows в то время был очень убог, а нам нужен
был такой, чтобы приложения со SCO на нём выглядели нормально. В Интернет найти такого
не удалось и пришлось написать свой собственный на win32, тогда как раз появилась Windows 95 и
Windows NT 4.0. Пришлось, конечно, разбираться со всевозможными RFC, разбираться с особенностями
работы socket-ов под win32, с компилятором Microsoft Visual C 2.2, но сравнительно быстро я создал
telnet-клиент с полной эмуляцией консоли SCO UNIX и даже возможностью локальной печати.
Эта программа была растиражирована по всей Приволжской дороге, а потом была выложена в Интернет.
Ей пользовались во многих местах, например в "Мост-Банке" в
Красноярске, откуда мне прислали записанный протокол сессии. На основе моих исходных
текстов мой коллега Антон Давидович чуть позднее написал GUI-версию, которая называлась
CombineTelnet.
Исходный текст на C++ лежит здесь.
Автоматизированная система по работе с ценными бумагами.
Когда я работал в СП "Прагма Электроника", мне поручили разработать и автоматизированный
реестр акционеров для ОАО "Саратовэнерго". Я тогда очень серьёзно подошёл к делу, очень много
времени провёл у заказчика и на тот момент разобрался в ценных бумагах весьма неплохо.
Значительная часть законов только принималась и ПО приходилось постоянно переделывать,
порой очень серьёзно. В конце концов, удалось создать логичную, гибкую, не перегруженную
модель хранения данных, отличавшуюся высокой производительностью.
Для 386-й машины 25 MHz расчёт по 18 тысячам акционеров и 14 филиалам был весьма трудоёмкой
задачей, если вспомнить, что расчёт ведётся всегда задним числом с откатом по истории операций
на дату начисления. Никаких SQL-серверов ещё не было и все "транзакции" надо было придумывать
самостоятельно. Из-за нехватки разрядной сетки для ходивших тогда "неденоминированных" рублей
приходилось расчёт дивидендов вести с плавающей точкой.
Позднее неоднократно сталкивался
с этой своей программой у бандитов. Естественно, у СП "Прагма Электроника" они её никогда и
не покупали.
Скачать программу можно по этой ссылке. После распаковки архива
запускайте start.bat т.к. в нём устанавливается переменная окружения, необходимая для
работы Clipper5. Исходные тексты у меня сохранились, если будут нужны - обращайтесь.
© Пчелинцев А.В. 2009-2011. Использование материалов допускается только с разрешения автора.