Выдержка из текста работы
Компьютерный комплекс и разрабатываемое для него программное обеспечение, предназначен для повышения достоверности и оперативности информации о работе устройств АЛСН и рельсовых цепей, получаемой из вагона-лаборатории; сокращения затрат труда на обработку и анализ этой информации.
Дипломный проект состоит из пяти глав. В первой главе рассматриваются измерительные информационные системы, их обобщенные алгоритмы функционирования и принципы построения. Производится анализ информационно-измерительных комплексов. Особое внимание уделяется применению персональных компьютеров как основного средства построения измерительных комплексов.
Во второй главе дипломного проекта рассматриваются принципы функционирования автоматической локомотивной сигнализации, анализируется существующая измерительная аппаратура вагона-лаборатории, рассматриваются функциональные характеристики системы “Контроль”, принципы взаимодействия этой системы с персональным компьютером.
В третьей главе дипломного проекта производится разработка программного обеспечения измерительного комплекса вагона-лаборатории автоматики, телемеханики и связи.
В четвёртой главе освещаются экономические аспекты реализации разрабатываемой системы.
В пятой главе рассматриваются вопросы, связанные с обеспечением пожарной безопасности вагона-лаборатории.
Дипломный проект содержит пояснительную записку на 126 листах и включает в себя 15 иллюстраций, 6 таблиц, список литературы из 12 источников, 3 приложения и графический материал на 7 плакатах.
Содержание
Введение
1. Принципы построения измерительных информационных систем
1.1 Общая характеристика ИИС
1.2 Интерфейсы измерительных информационных систем
1.3 Алгоритмы функционирования ИИС
1.4 Измерительно-вычислительные комплексы (ИВК)
1.5 Применение ЭВМ в измерительной технике
1.6 Выводы
2. Измерительный комплекс вагона-лаборатории железнодорожной автоматики, телемеханики и связи
2.1 Система автоматической локомотивной сигнализации
2.2 Аппаратура вагона-лаборатории
2.3 Анализ функционирования системы «Контроль»
2.3.1 Технические характеристики
2.3.2 Функциональные связи
2.3.3 Интерфейс с ЭВМ
2.4 Анализ возможностей модернизации
2.5 Выводы
3. Разработка программного обеспечения
3.1 Обоснование выбора методов и среды программирования
3.2 Основные функции программного обеспечения вычислительного комплекса
3.3 Разработка алгоритмов работы ПО
3.4 Получение измерительной информации из аппаратуры “Контроль”
3.5 Структура используемой базы данных
3.6 Разработка интерфейса пользователя
3.7 Описание структуры программного обеспечения и его настройка
3.8 Выводы
4. Экономические аспекты разработки
4.1 Общие положения
4.2 Оценка стоимости разработки программного обеспечения компьютерного измерительного комплекса вагона-лаборатории
4.3 Выводы
5. Обеспечение пожарной безопасности вагона-лаборатории
5.1 Основные причины возникновения пожаров в вагонах
5.2 Требования пожарной безопасности при эксплуатации вагона-лаборатории
5.3 Конструктивные противопожарные меры в вагоне
5.4 Выводы
Заключение и выводы
Литература
Приложения
Измерительная техника — один из важнейших факторов ускорения научно-технического прогресса практически во всех отраслях народного хозяйства.
Получение и обработка измерительной информации предназначены не только для достижения требуемого качества продукции, но и организации производства, учета и составления баланса количества вещества и энергии. В настоящее время важной областью применения измерительной техники является автоматизация научно-технических экспериментов. Для повышения экономичности проектируемых объектов, механизмов и машин большое значение имеют экспериментальные исследования, проводимые на их физических моделях. При этом задача получения и обработки измерительной информации усложняется настолько, что ее эффективное решение становится возможным лишь на основе применения специализированных измерительно-вычислительных средств.
Измерительная техника начала свое развитие с 40-х годов XVIII в. и характеризуется последовательным переходом от показывающих (середина и вторая половина XIX в.), аналоговых самопишущих (конец XIX — начало XX в.), автоматических и цифровых приборов (середина XX в. — 50-е годы) к информационно-измерительным системам.
Одним из современных направлений развития измерительной техники, базирующейся на достижениях радиоэлектроники, являются цифровые приборы с дискретной формой представления информации. Такая форма представления результатов оказалась удобной для преобразования, передачи, обработки и хранения информации.
Широкие возможности открылись перед измерительной техникой в связи с появлением микропроцессоров (МП) и микроЭВМ. Благодаря им значительно расширились области применения средств измерительной техники, улучшились их технические характеристики, повысились надежность и быстродействие, открылись пути реализации задач, которые ранее не могли быть решены.
Трудно переоценить значение МП и микроЭВМ при создании автоматизированных средств измерений, предназначенных для управления, исследования, контроля и испытаний сложных объектов.
Целью данного дипломного проекта является создание на базе аппаратуры, по проверке состояния рельсовых цепей и путевых устройств автоматической локомотивной сигнализации (АЛСН), находящейся в вагон лаборатории железнодорожной автоматики и телемеханики Белорусской железной дороги принципиально нового компьютерного измерительного информационно-вычислительного комплекса, обеспечивающего автоматическую проверку работы рельсовых цепей и АЛСН, с возможностью автоматизированной обработки результатов измерения и сбора статистической информации.
1.1 Общая характеристика ИИС
Измерительная информационная система (ИИС) представляет собой совокупность функционально объединенных измерительных, вычислительных и других вспомогательных технических средств для получения измерительной информации, ее преобразования, обработки с целью представления потребителю в требуемом виде, либо автоматического осуществления логических функций контроля, диагностики, идентификации.
В зависимости от выполняемых функций ИИС реализуются в виде измерительных систем (ИС), систем автоматического контроля (САК), технической диагностики (СТД), распознавания (идентификации) образов (СРО). В СТД, САК и СРО измерительная система входит как подсистема [1].
Информация, характеризующая объект измерения, воспринимается ИИС, обрабатывается по некоторому алгоритму, в результате чего на выходе системы получается количественная информация (и только информация), отражающая состояние данного объекта. Измерительные информационные системы существенно отличаются от других типов информационных систем и систем автоматического управления (САУ). Так, ИИС, входящая в структуры более сложных систем (вычислительных систем связи и управления), может быть источником информации для этих систем. Использование информации для управления не входит в функции ИИС, хотя информация, получаемая на выходе ИИС, может использоваться для принятия каких-либо решений, например для управления конкретным экспериментом.
Каждому конкретному виду ИИС присущи многочисленные особенности, определяемые узким назначением систем и их технологически-конструктивным исполнением. Ввиду многообразия видов ИИС до настоящего времени не существует общепринятой классификации ИИС.
По характеру взаимодействия системы с объектом исследования и обмена информацией между ними ИИС могут быть разделены на активные и пассивные.
Пассивные системы только воспринимают информацию от объекта, а активные, действуя на объект через устройство внешних воздействий, позволяют автоматически и наиболее полно за короткое время изучить его поведение. Такие структуры широко применяются при автоматизации научных исследований различных объектов.
В зависимости от характера обмена информацией между объектами и активными ИИС различают ИС без обратной связи и с обратной связью по воздействию. Воздействие на объект может осуществляться по заранее установленной жесткой программе либо по программе, учитывающей реакцию объекта. В первом случае реакция объекта не влияет на характер воздействия, а следовательно, и на ход эксперимента. Его результаты могут быть выданы оператору после окончания. Во втором случае результаты реакции отражаются на характере воздействия, поэтому обработка ведется в реальном времени. Такие системы должны иметь развитую вычислительную сеть. Кроме того, необходимо оперативное представление информации оператору в форме, удобной для восприятия, с тем чтобы он мог вмешиваться в ход процесса.
Эффективность научных исследований, испытательных, поверочных работ, организации управления технологическими процессами с применением ИИС в значительной мере определяется методами обработки измерительной информации.
Операции обработки измерительной информации выполняются в устройствах, в качестве которых используются специализированные либо универсальные ЭВМ. В некоторых случаях функции обработки результатов измерения могут осуществляться непосредственно в измерительном тракте, т. е. измерительными устройствами в реальном масштабе времени.
В системах, которые содержат вычислительные устройства, обработка информации может производиться как в реальном масштабе времени, так и с предварительным накоплением информации в памяти ЭВМ, т. е. со сдвигом по времени.
При исследовании сложных объектов или выполнении многофакторных экспериментов применяются измерительные системы, сочетающие высокое быстродействие с точностью. Такие ИИС характеризуются большими потоками информации на их выходе.
Значительно повысить эффективность ИИС при недостаточной априорной информации об объекте исследования можно за счет сокращения избыточности информации, т. е. сокращения интенсивности потоков измерительной информации. Исключение избыточной информации, несущественной с точки зрения ее потребителя, позволяет уменьшить емкость устройств памяти, загрузку устройств обработки данных, а следовательно, и время обработки информации, снижает требования к пропускной способности каналов связи.
При проектировании и создании ИИС большое внимание уделяется проблеме повышения достоверности выходной информации и снижения вероятностей возникновения (или даже исключения) нежелательных ситуаций. Этого можно достичь, если на ИИС возложить функции самоконтроля, в результате чего ИИС способна осуществлять тестовые проверки работоспособности средств системы и тем самым сохранять метрологические характеристики тракта прохождения входных сигналов, проверять достоверность результатов обработки информации, получаемой посредством измерительных преобразований, и ее представления.
Все более широкое развитие получают системы, предусматривающие автоматическую коррекцию своих характеристик — самонастраивающиеся (самокорректирующиеся) системы.
Введение в такие системы свойств автоматического использования результатов самоконтроля — активного изучения состояния ИИС — и приспосабливаемое к изменению характеристик измеряемых сигналов или к изменению условий эксплуатации делает возможным обеспечение заданных параметров системы.
В зависимости от функционального назначения структуры ИИС подразделяют по принципу построения.
Собственно измерительные системы используются для различного рода комплексных исследований научного характера. Они предназначены для работы с объектами, характеризующимися до начала эксперимента минимумом априорной информации. Цель создания таких систем заключается в получении максимального количества достоверной измерительной информации об объекте для составления алгоритмического описания его поведения.
Обратная связь системы с объектом отсутствует или носит вспомогательный характер. Как отмечалось, информация, полученная на выходе ИИС, может использоваться для принятия каких-либо решений, создания возмущающих воздействий, но не для управления объектом. ИИС предназначена для создания дополнительных условий проведения эксперимента, для изучения реакции объекта на эти воздействия. Следовательно, использование информации не входит в функции ИИС. Эта информация предоставляется человеку-оператору или поступает в средства автоматической обработки информации.
Для измерительных систем характерны [1]:
q более высокие по отношению к системам другого вида требования к метрологическим характеристикам;
q более широкий спектр измеряемых физических величин и в особенности их количество (число измерительных каналов);
q необходимость в средствах представления информации; это связано с тем, что основной массив информации с выхода систем передается человеку для принятия им решения об изменении условий проведения эксперимента, его продолжении или прекращении. Поэтому определяющим требованием является неискаженное, наглядное и оперативное представление текущей информации с учетом динамики ее обновления и быстродействия системы, обеспечивающее удобство восприятия и анализа человеком;
q большой объем внешней памяти для систем, в которых обработка и анализ результатов измерений выполняются после завершения процесса эксперимента с помощью набора различных средств обработки и представления информации.
1.2 Интерфейсы измерительных информационных систем
В настоящее время ИИС находят все более широкое применение в различных областях науки и техники. Они применяются в качестве компонентов сложных информационно-вычислительных комплексов и систем автоматизации. Особенно важную роль играют автоматические ИИС, использующие ЭВМ для программного управления работой системы.
Возросшие объемы проводимых измерений привели к широкому использованию программно-управляемых СИ. При этом возросшие требования к характеристикам СИ оказали существенное влияние на методы сопряжения устройств, образующих ИИС.
Информационно-измерительные системы содержат ряд подсистем: измерительную, сбора, преобразования, предварительной обработки данных и подсистемы управления СИ в целом. Все подсистемы в ИИС соединены между собой в единую систему. Кроме того, ИИС в настоящее время проектируют на основе агрегатного (модульного) принципа, по которому устройства, образующие систему, выполняются в виде отдельных, самостоятельных изделий (приборов, блоков). В составе ИИС эти устройства выполняют определенные операции и взаимодействуют друг с другом, передавая информационные и управляющие сигналы через систему сопряжения.
Для унифицированных систем сопряжения между устройствами, участвующими в обмене информации, стал общепринятым термин интерфейс (interface). Под интерфейсом (или сопряжением) понимают совокупность схемотехнических средств, обеспечивающих непосредственное взаимодействие составных элементов ИИС (ГОСТ 15971-74). Устройства подсоединяются к системе сопряжения и объединяются в ИИС по определенным правилам, относящимся к физической реализации сопряжении. Конструктивное исполнение этих устройств, характеристики вырабатываемых и принимаемых блоками сигналов и последовательности выдаваемых сигналов во времени позволяют упорядочить обмен информацией между отдельными функциональными блоками (ФБ).
Под интерфейсной системой понимают совокупность логических устройств, объединенных унифицированным набором связей и предназначенных для обеспечения информационной, электрической и конструктивной совместимости. Интерфейсная система также реализует алгоритмы взаимодействия функциональных модулей в соответствии с установленными нормами и правилами.
Возможны два подхода к организации взаимодействия элементов системы и построению материальных связей между ними:
q жесткая унификация и стандартизация входных и выходных параметров элементов системы;
q использование функциональных блоков с адаптивными характеристиками по входам-выходам.
На практике часто сочетают оба подхода. Стандартизация интерфейсов позволяет:
ь проектировать ИИС различных конфигураций;
ь значительно сократить число типов СИ и их устройств сопряжения;
ь ускорить и упростить разработку отдельных СИ и ИИС в целом;
ь упростить техническое обслуживание и модернизацию ИИС;
ь повысить надежность ИИС.
Применение развитых стандартных интерфейсов при организации ИИС позволяет обеспечить быструю компоновку системы и разработку программ управления СИ.
Структурная схема одноуровневой ИИС с интерфейсными узлами показана на рисунке 1.1.
Рисунок 1.1 — Структурная схема одноуровневой ИИС с интерфейсными узлами
Основной структурной единицей ИИС является функциональный блок ФБ, который представляет собой один или несколько объединенных и взаимодействующих между собой измерительных преобразователей. Взаимодействие ФБ осуществляется через интерфейсные блоки ИБ по командам, организующим обмен данными. Команды управления формируются в управляющем блоке УБ и воздействуют на интерфейсные блоки через контроллер (К).
Между ФБ ИИС осуществляется обмен информационными и управляющими сообщениями. Информационное сообщение содержит сведения значении измеряемого параметра, диапазоне измерения, времени измерения, результатах контроля состояния измерительных каналов и др. Управляющее сообщение содержит сведения о режиме работы ФБ, порядке выполнения ими последовательности операций во времени, команде контроля состояния измерительных каналов.
Интерфейс может быть общим для устройств разных типов, наиболее распространенные интерфейсы определены международными, государственными и отраслевыми стандартами. Стандарт (ГОСТ 26016-81 «Единая система стандартов приборостроения. Интерфейсы, признаки классификации и общие требования») включает четыре признака классификации: способ соединения комплектов системы (магистральный, радиальный, цепочечный, комбинированный); способ передачи информации (параллельный, последовательный, параллельно-последовательный); принцип обмена информацией (асинхронный, синхронный); режим передачи информации (двусторонняя одновременная передача, двусторонняя поочередная передача, односторонняя передача).
Указанные признаки позволяют характеризовать только определенные аспекты организации интерфейсов.
Более полная характеристика и систематизация интерфейсов могут быть выполнены при условии классификации по нескольким совокупностям признаков: функциональному назначению, логической функциональной организации и физической реализации.
К основным характеристикам интерфейса относятся следующие: функциональное назначение; структура или тип организации связей; принцип обмена информацией; способ обмена данными; режим обмена данными; номенклатура шин и сигналов; количество линий; количество линий для передачи данных; количество адресов; количество команд; быстродействие; длина линий связи; число подключаемых устройств; тип линии связи.
Соединение отдельных приборов и блоков между собой осуществляется линиями связи или линиями интерфейса. Линии интерфейса могут объединяться в группы для выполнения одной из операций в программно-управляемом процессе передачи данных. Эти группы линий называются шинами интерфейса. Назначение отдельных линий и шин, их номенклатура и взаимное расположение в системе (топологии) являются базовыми при рассмотрении функционирования любого интерфейса.
1.3 Алгоритмы функционирования ИИС
Измерительные системы предназначены для получения и выдачи измерительной информации о состоянии объекта, которое представляется физическими величинами.
В общем виде физическую величину можно описывать непрерывной функцией x(t), изменяющейся по времени t, или непрерывной функцией x(t,), изменяющейся по времени и распределенной в пространстве .
Измерение непрерывной функции x(t)|x(t,)| сводится к измерению множества значений физической величины:
x(t) = {(x(ti)], i=1,2,…,n
или x(t, ) = {x(ti, j)}, i=1,2,…,n; j=1,2,3…
Если состояние объекта представляют множеством физических величин, то результаты измерения объединяются в виде информационного блока, содержащего код состояния объекта в момент времени, при котором производится измерение. Таким образом, состояние объекта представляется в виде кода позиционного номера физической величины и кодов цифрового измерения значений физических величин.
Рисунок 1.2 — Упрощенная структура измерительных систем
Для реализации процедур получения и выдачи измерительной информации, как показано на рисунке 1.2, в общем случае ИС содержит измерительные каналы, устройство обработки информации и устройство выдачи информации. Измерительный канал для восприятия и измерения физических величин х и представления результатов измерения в виде множества импульсных или кодовых сигналов. После обработки измерительных сигналов в устройство обработки информации по заданному алгоритму осуществляется формирование измерительной информации. При этом устройство выдачи информации осуществляет вывод полученной информации из системы в графической или машинописной форме или осуществляет накопление данных в накопителях информации.
Измерительный канал фактически представляет собой аналого-цифровую часть системы в виде совокупности датчиков, аналоговых преобразователей и аналого-цифровых преобразователей.
Использование МП в составе измерительных каналов позволяет оптимизировать решение задач передачи, фильтрации и улучшения характеристик датчиков и др. К таким измерительным каналам через машинный интерфейс может подключаться микроЭВМ, предназначенная для первичной обработки результатов измерения, представляемых в виде кодовых сигналов.
В зависимости от специфики восприятия состояния объекта и представления результатов измерений на выходе измерительного канала в задачу цифровой обработки может быть включено:
ь получение цифрового кода результатов измерений физических величин путем обработки выходных импульсных сигналов измерительного канала;
ь формирование измерительной информации путем обработки и объединения кодовых сигналов, получаемых на выходе измерительного канала;
ь цифровая обработка результатов косвенных измерений и др. В качестве устройства цифровой обработки результатов измерения могут быть использованы специализированные цифровые устройства, микропроцессорные системы, микроЭВМ и др.
Потребителем измерительной информации может быть человек-оператор, исполнительный механизм, ЭВМ, сеть ЭВМ и др.
Вывод информации из измерительной системы производится в виде графика или алфавитно-цифрового текста (для человека-оператора), либо в виде последовательности байтов (для исполнительного механизма).
1.4 Измерительно-вычислительные комплексы (ИВК)
Сложность задач контроля, автоматизации эксперимента, обработки информации и управления привела к появлению новой разновидности средств измерения — измерительно-вычислительных комплексов (ИВК).
В последнее время широкое развитие получили ИВК, выполненные на базе микропроцессоров.
В соответствии с ГОСТ 26.203-81 ИВК представляет собой автоматизированное средство измерения электрических величин, на основе которого возможно создание ИИС путем присоединения ко входу измерительных сигналов датчиков измеряемых величин с унифицированным электрическим выходным сигналом и генерация на основе программных компонентов ИВК программ обработки информации и управления экспериментом, ориентированных на решение конкретных задач.
На ИВК возлагаются следующие функции [1]:
q измерение параметров производственного процесса или экспериментальной установки; регистрация информации в реальном масштабе времени, хранение и последующая ее обработка согласно заданным программам как в процессе эксперимента (испытаний), так и после его окончания;
q управление процессом или экспериментальной установкой по результатам обработки информации; передача информации для сложной обработки и накопления в ЭВМ верхнего уровня; обеспечение работы эксперимента с символьной и графической информацией в интерактивном режиме с ЭВМ.
Для реализации этих функций ИВК осуществляет следующие операции: восприятие, преобразование и обработку электрических сигналов от первичных преобразователей или от объекта измерений; управление средствами измерений; выработку электрических сигналов для воздействия на объект исследования; оценку погрешности измерений и представление ее в установленной форме.
Характерными признаками ИВК являются: блочно-модульная агрегатная структура построения; наличие в их составе ЭВМ; программное управление от ЭВМ техническими средствами, входящими в ИВК; использование типовых интерфейсов для обеспечения взаимодействия между входящими в ИВК устройствами.
В ИВК (в зависимости от используемой ЭВМ, структуры комплекса и решаемых с его помощью задач) могут использоваться различные машинные, системные, приборные и другие интерфейсы, а также согласованные системы интерфейсов.
По назначению ИВК подразделяют на типовые широкого назначения, проблемно-ориентированные и специализированные. Типовые ИВК служат для решения широкого круга задач автоматизации исследований и испытаний независимо от области использования. Проблемно-ориентированные ИВК служат для решения широко распространенной, но специфичной задачи автоматизации измерений, исследований или испытаний посредством специально разрабатываемых для этих комплексов агрегатных средств и проблемно-ориентированного материального обеспечения (например, определенного набора технических средств сопряжения с объектом и пакетов прикладных программ).
Специализированные ИВК применяются для решения уникальных задач автоматизации измерений, испытаний или исследований, для которых применение типовых и проблемных ИВК экономически нецелесообразно. При этом в случае отсутствия необходимых серийных агрегатных средств измерений и автоматизации (СИА), в состав специализированных ИВК могут быть включены специально разработанные внесистемные СИА и средства ВТ.
В состав ИВК входят технические и программные компоненты. К техническим компонентам относятся средства вычислительной техники, средства измерения электрических величин, времязадающие средства, средства вывода управляющих электрических сигналов, средства ввода-вывода цифровых и аналоговых сигналов, блоки электрического сопряжения измерительных компонентов между собой или измерительных компонентов с вычислительными компонентами, коммутационные устройства, расширители интерфейса, унифицированные типовые конструктивные элементы, источники питания и другие вспомогательные узлы.
Системное программное обеспечение ИВК — совокупность программного обеспечения ЭВМ, используемой в ИВК, и дополнительных программных средств, дающих возможность работы в диалоговом режиме с ИВК, а при необходимости — в режиме обмена измерительной информацией с измерительными компонентами и управления ими.
Прикладные программы ИВК обеспечивают обработку измерительной информации, проверку работоспособности компонентов ИВК в отдельности и комплекса в целом, метрологическое обслуживание ИВК (определение метрологических характеристик и поверку измерительных каналов ИВК, а также его метрологическую аттестацию). Модули прикладного программного обеспечения функционируют в соответствии с назначением и задачами исследований, проводимых с помощью ИВК.
Рисунок 1.3 — Структура ИИС с ЭВМ
Объединение в ИВК современных средств измерительной и вычислительной техники, стандартных интерфейсов дает возможность изменять по мере надобности их состав, применять алгоритмы, позволяющие реализовать сложные задачи измерения, производить коррекцию результата измерения, выполнять поверочные операции и др.
В составе ИВК, как было показано выше, используется свободно программируемая ЭВМ, что позволяет обеспечить автоматизированную обработку измерительной информации, изменение программным путем алгоритмов обработки информации, гибкую перестройку самой структуры системы и взаимодействие с объектом исследования в реальном масштабе времени.
Из рисунка 1.3 видно, что информация, характеризующая количественное значение параметров объекта, посредством датчиков, блоков преобразования (измерения) сигналов, представляется оператору или ЭВМ в виде, удобном для использования. Измерительная информация сообщается оператору, например, в числовом виде на цифровых табло и вводится в ЭВМ для вычисления различных характеристик. Путем воздействия на объект имеется возможность получения различных параметров, характеризующих состояние объекта исследования.
Рассмотренное каскадное соединение ЭВМ с ИИС не реализует в полном объеме те преимущества ИВК, о которых говорилось выше. Более полно возможности ИВК реализуются при включении ЭВМ в замкнутый контур (рисунок 1.4). В этом случае вся система объединена программой функционирования и обработки измерительной информации, включающей в себя как воздействие на объект исследования, так и алгоритм взаимодействия с оператором. Эта схема является обобщенной структурой, по которой создается архитектура большинства современных ИВК. За основу при построении ИВК принимаются современные средства цифровой измерительной техники и малые цифровые ЭВМ.
Рисунок 1.4 — Обобщенная структура ИВК
Структуру ИВК во многом определяют используемые интерфейсы. Кроме информационной и конструктивной совместимости они должны обеспечивать и программную совместимость.
1.5 Применение ЭВМ в измерительной технике
Одним из перспективных направлений в последние годы является применение персональных компьютеров (ПК) в измерительной технике. Измерительные системы на базе ПК обладают многочисленными преимуществами по сравнению с традиционными системами. Они используются в составе многоцелевых автоматических измерительных установок, информационно-измерительных систем и систем автоматизации эксперимента. Благодаря ПК в этих системах значительно облегчены процедуры взаимодействия пользователей с измерительными модулями, путем использования графических интерфейсов с многооконными режимами, специализированных пакетов программ и т.д. В составе системы ПК обеспечивает сравнительно простую ее адаптацию при изменении алгоритма обработки информации, позволяет производить оптимизацию параметров системы программным методом. Кроме обработки измерительной информации ПК осуществляет функции контроллера, а также универсального индикатора табличной, мнемонической и графической информации.
Получили распространение различные структуры измерительных систем на базе ПК. Прежде всего это традиционные системы, в которых компьютер связан с существующими автоматическими измерительными приборами с помощью кабеля через стандартные разъемы по интерфейсам. При удаленных приборах используется последовательный интерфейс связи (ИРПС).
В более совершенных устройствах ПК подключается к шасси, где устанавливается ряд индивидуальных одноплатных модулей измерительных приборов. Использование отдельного шасси гарантирует малый уровень электрических помех при проведении измерений, а высокоскоростная параллельная шина обеспечивает тесную связь с компьютером. Клавиатура и дисплей ПК становятся панелью управления и представления данных для каждого измерительного прибора. При таком подходе в измерительных системах получили распространение стандартные интерфейсы общего назначения, применяемые в микроЭВМ, такие, как И41, VME и др. Это позволяет повысить пропускную способность системы и лучше использовать потенциальные возможности ПК. Так, высокоскоростная шина VME-bus позволяет осуществлять обмен параллельными 32-разрядными двоичными кодами с частотой 50 мГц.
Персональные компьютеры обычно оснащены самыми разнообразными программными средствами, в том числе набором инструментальных и сервисных программ. К ним добавляются также комплексы программ и драйверы управления измерительными платами, подключенными к ПК. Так как обычно приходится манипулировать с большими объемами кратковременно существующих данных, в системах с ПК важное значение придается вопросам сжатия информации и ее быстрой обработке. Часто используется принцип преобразования собираемых данных в стандартные форматы, что в дальнейшем позволяет их обрабатывать прикладными программами. В качестве языков управления чаще всего применяются ПАСКАЛЬ и СИ.
1.6 Выводы
В первой главе были рассмотрены измерительные информационные системы, их обобщенные алгоритмы функционирования и принципы построения, были выявлены требования, предъявляемые к интерфейсным системам ИИС. Был произведен анализ информационно-измерительных комплексов, позволяющий выявить их достоинства и недостатки. Особое внимание уделено одному из самых перспективных направлений в измерительной технике — применению персональных компьютеров как основного средства построения измерительных комплексов.
Исходя из всего вышесказанного, можно сделать вывод, что измерительные системы на базе ПК обладают многочисленными преимуществами по сравнению с традиционными системами. Поэтому создание компьютерного измерительного комплекса, способного автоматизировать рутинную работу обслуживающего персонала по обработке результатов измерений имеет очень важное значение.
2.1 Система автоматической локомотивной сигнализации
Автоматическая локомотивная сигнализация предназначена для безопасности движения поездов, увеличения пропускной способности железнодорожных линий и улучшения условий труда локомотивных бригад. Устройства АЛС осуществляют передачу сигнальных показаний путевых светофоров в кабину машиниста.
Автоматическая локомотивная сигнализация непрерывного действия числового кода представляет собой совокупность путевых и локомотивных устройств, обеспечивающих непрерывную передачу сигналов путевых светофоров в кабину локомотива, периодическую проверку бдительности машиниста при желтом, желтом с красным, красном и белом огнях локомотивного светофора и однократную проверку бдительности при любой смене сигналов, контроль скорости при желтом с красным и красном огнях с принудительной остановкой поезда соответствующими устройствами в случае потери бдительности машинистом или превышении скорости.
Формирование числового кода у каждого проходного светофора осуществляется кодирующей аппаратурой, состоящей из кодового путевого трансмиттера КПТ и трансмиттерного реле, управляемого сигнальными реле автоблокировки. Трансмиттерное реле коммутирует цепь обмотки кодирующего трансформатора. При этом в рельсовую линию поступают импульсы переменного тока, соответствующие передаваемой кодовой комбинации. Переменный ток, проходя по рельсовым нитям, создает вокруг них переменное магнитное поле, которое замыкается через сердечник приемных катушек локомотива и наводит в последних ЭДС. Локомотивный приемник усиливает ЭДС и преобразует ее в импульсы постоянного тока, от которых срабатывает импульсное реле, включенное на выходе приемника. Импульсное реле управляет работой блока дешифратора, состоящего из собственно дешифратора и контрольного органа. В зависимости от принятой кодовой комбинации дешифратор обеспечивает зажигание соответствующего огня локомотивного светофора, а также подачу на контрольный орган информации о допустимой скорости движения. Фактическая скорость поезда измеряется скоростемером. Машинист подтверждает свою бдительность в необходимых ситуациях нажатием рукоятки бдительности. Моменты, в которые возникает необходимость подтверждения бдительности, определяются машинистом по свистку электропневматического клапана.
Машинист управляет локомотивом, воздействуя на двигатель и тормозные устройства.
Локомотивный приемник предназначен для приема числовых кодовых сигналов на частоте сигнального тока 50 Гц при электрической тяге постоянного тока и автономной тяге, а на частоте 25 или 75 Гц — при электрической тяге переменного тока.
Сигнальный ток, протекая по рельсам, создает магнитное поле, в котором перемещаются локомотивные катушки. Стальной сердечник способствует концентрации магнитных силовых линий в зоне расположения катушек. Центры катушек смещены в сторону оси пути, благодаря чему стабилизируется суммарная ЭДС на двух тушках при их горизонтальных колебаниях во время движения локомотива. При таком колебании одна из катушек приближается к рельсу, и сигнал на ней возрастает, другая катушка удаляется, и сигнал на ней убывает. Вследствие встречного включения катушек ЭДС, наводимая тяговым током, компенсируется; помехи создаются асимметрией тягового тока в рельсах. Катушки имеют индуктивность (7,1 ± 0,3) Гн на электровозах и (6 ± 0,25) Гн на тепловозах.
Катушки подвешены над каждым рельсом впереди первой колесной пары на высоте 150 мм над головкой рельса. Ток в рельсах 10 А и частотой 50 Гц наводит в каждой из них ЭДС не менее 0,75 В на электровозе и 0,65 В на тепловозе. Индуцированные в приемных катушках кодовые сигналы усиливаются локомотивным приемником и преобразуются в импульсы постоянного тока, которые подаются в дешифратор для восприятия передаваемого сообщения.
Локомотивные приемники характеризуются чувствительностью, помехозащищенностью и временными параметрами, отражающими искажение длительности импульсов кодовых комбинаций на выходе приемника по сравнению с входом.
Чувствительность локомотивного приемника измеряется минимальным кодовым током в рельсах под приемными катушками, при котором срабатывает исполнительный орган, например электромеханическое или электронное реле. Отношение максимального тока в рельсах, при котором исполнительный орган не срабатывает, к току чувствительности называется коэффициентом возврата локомотивного приемника.
При электрической тяге переменного тока чувствительность локомотивного приемника для частот сигнального тока 25 и 75 Гц составляет (1,05 ± 0,1) А. Для частоты 50 Гц при электрической тяге постоянного тока чувствительность (1,45 ± 0,15) А, а при автономной тяге (0,75 ± 0,15) А. Надежная работа приемника обеспечивается при минимальном токе в рельсах на входном конце блок-участка 1,2 А при автономной тяге, 1,4 А при электрической тяге переменного тока и 2 А при электрической тяге постоянного тока.
2.2 Аппаратура вагона-лаборатории
Для контроля работы рельсовых цепей и путевых устройств автоматической локомотивной сигнализации (АЛСН) на сети железных дорог используются вагоны-лаборатории, оборудованные различными измерительными средствами. Многолетняя эксплуатация разнообразных измерительных средств показала их эффективность для выявления неисправностей в рельсовых цепях и причин сбоев в работе АЛСН.
Известно, что работоспособность рельсовой цепи определяется выполнением основных режимов работы: нормального, шунтового, контрольного и АЛСН. Основными параметрами рельсовой цепи во всех режимах являются напряжение на питающем и релейном концах и проводимость изоляции. В нормальном режиме и режиме АЛСН к ним добавляются еще и временные параметры числового кода. Если параметры рельсовой цепи находятся в пределах допусков, то выполняются основные режимы и, следовательно, рельсовая цепь работоспособна.
В настоящее время в соответствии с Инструкцией ЦШ/3820 линейный эксплуатационный штат должен проводить регулярные измерения некоторых параметров рельсовых цепей для выявления отклонений от норм, заданных в регулировочных таблицах. Однако в условиях обостряющейся кадровой проблемы выполнять такие регламентные работы становится все труднее.
Рационально было бы функции «поточной» проверки рельсовых цепей возложить на мобильные измерительные средства, размещаемые в подвижной единице. Производительность мобильных средств по выявлению параметров рельсовых цепей с отклонениями от норм в несколько десятков раз выше, чем при измерениях обычными переносными приборами. При этом «выходить» линейному штату нужно будет только на конкретную рельсовую цепь для устранения конкретной неисправности. Следовательно, эксплуатационный и экономический эффект достигается за счет снижения трудозатрат на обслуживание рельсовых цепей.
Таким мобильным средством измерения параметров рельсовых цепей и АЛСН для оценки технического состояния и выявления неисправностей этих устройств в настоящее время является система «Контроль». Однако элементная база существующей на Белорусской железной дороге системы в значительной степени устарела. Опыт эксплуатации системы показал, что существующая аппаратура работает нестабильно. Поэтому необходима модернизация аппаратуры вагона-лаборатории и дальнейшая автоматизация процесса измерений параметров рельсовых цепей.
2.3 Анализ функционирования системы «Контроль»
2.3.1 Технические характеристики
Система «Контроль» обеспечивает:
ь измерение уровня кодового тона частотой 25, 50 и 75Гц в диапазоне от 1 до 35А с пределом допускаемой относительной погрешности измерения ±10%;
ь измерение длительности импульсов, интервалов и цикла числового кода в рельсовых цепях с пределом допускаемой абсолютной погрешности измерения ±0,01с для кодовых сигналов частотой 50 и 75Гц и ±0,02с для кодовых сигналов частотой 25Гц;
ь измерение перерыва кодирования в диапазоне от 2,00 до 9,99с с пределом допускаемой абсолютной погрешности измерения ±0,01с для кодовых сигналов частотой 50 и 75Гц и ±0,02с для кодовых сигналов частотой 25Гц;
ь измерение координат рельсовой цепи с пределом допускаемой относительной погрешности измерения ±2%, при этом за начало отсчета принимаются изолирующие стыки рельсовой цепи;
ь фиксацию изолирующих стыков рельсовых цепей.
Параметры измеряются автоматически и фиксируются вручную по границам блок-участков на входных концах рельсовых цепей и далее автоматически в каждом кодовом цикле принимаемого кода АЛСН.
На цифровом табло пульта управления аппаратуры КОНТРОЛЬ обеспечивается индикация следующей информации:
q Номер сигнала, разрезной точки или трансляции рельсовой цепи, к которым производится движение (три разряда, соответственно десятки, единицы номера сигнала и единицы номера трансляции).
q Текущая координата рельсовой цепи (четыре разряда, соответственно тысячи, сотни, десятки и единицы м).
q Ток локомотивной сигнализации (три разряда, соответственно десятки, единицы, десятые доли А).
q Временные параметры кодового сигнала (по два разряда на каждый импульс и интервал, количество которых определено видом кода соответственно десятые и сотые доли с).
q Длительность цикла кодового сигнала (три разряда, соответственно единицы, десятые и сотые доли с).
q Перерыв кодирования (три разряда, соответственно единицы, десятые и сотые доли с).
q Скорость движения (три разряда, соответственно сотни, десятки и единицы км/ч).
В аппаратуре КОНТРОЛЬ предусмотрен набор номеров сигналов и трансляций оператором, а также их оперативная смена посредством воздействия на клавиатуру пульта управления. Смена номеров сигналов и трансляций производится также автоматически при проезде изолирующих стыков рельсовых цепей.
Аппаратура КОНТРОЛЬ обеспечивает проверку работоспособности в режиме самоконтроля.
Аппаратура КОНТРОЛЬ обеспечивает циклическую передачу измерительной информации в микроЭВМ, при этом информация передается в микроЭВМ в каждом цикле кодовых сигналов или при проезде изолирующих стыков в стандарте параллельного интерфейса ИРПР 16 шестнадцатибитовыми словами или в стандарте последовательного интерфейса ИРПС 32 байтами.
Питание аппаратуры КОНТРОЛЬ производится от аккумуляторных батарей вагона-лаборатории напряжением 54 В с допустимыми изменениями в пределах от 44 до 60 В (основной вариант) или при питании от сети переменного тока напряжением 220 В частотой 50 Гц с допустимыми изменениями по напряжению в пределах от 198 до 242 В и по частоте в пределах от 49 до 51 (резервный вариант).
Мощность, потребляемая аппаратурой КОНТРОЛЬ при питании по основному варианту (от аккумуляторных батарей не превышает 300 Вт, при питании по вспомогательному варианту (от сети переменного тока) — 300 ВА.
Аппаратура КОНТРОЛЬ обеспечивает время установление рабочего режима с момента включения — не более 30 мин.
Аппаратура КОНТРОЛЬ обеспечивает время непрерывной работы не менее 12 ч.
Установленная безотказная наработка не менее 200 ч.
Установленный срок службы не менее 8 лет.
Система «Контроль» содержит следующие узлы: первичный измерительный преобразователь тока кодовых сигналов, протекающего в рельсах; промежуточный измерительный преобразователь, предназначенный для отстройки от помех тягового тока, селекции рабочих частот кодовых сигналов, выделения и запоминания амплитудного значения кодового сигнала; измерения выходного напряжения промежуточного измерительного преобразователя; выделения и измерения длительности временных параметров всех элементов числового кода; измерения координат рельсовой цепи; фиксации изолирующих стыков; цифровой индикации значений измеряемых параметров; автоматического и ручного управления работой аппаратуры; контроля режимов работы; вывода информации для регистрации параметров; питания аппаратуры.
Аппаратура системы состоит из измерительного и силового шкафов, пульта управления, размещенных в салоне вагона, а также первичного измерительного преобразователя тока АЛСН, индукторов и датчиков изолирующих стыков и датчика оборотов колеса, расположенных вне салона.
Первичный измерительный преобразователь тока АЛСН выполнен в виде специальных измерительных катушек (индуктивных), допускающих их крепление на время измерения на сердечниках локомотивных катушек. Конструкция крепления измерительных катушек к сердечнику локомотивных катушек обеспечивает удобство, минимальные затраты времени на их установку и безопасность движения.
Индукторы и датчики изолирующих стыков узла фиксации изолирующих стыков имеют конструктивное исполнение, позволяющее крепить их на раме тележки вагона, что обеспечивает их удобную установку, взаимозаменяемость, учитывает габарит подвижного состава и безопасность движения.
Конструкция датчика оборотов колеса узла измерения координат рельсовой цепи позволяет крепить его на раме тележки вагона и обеспечивает безопасность движения.
Ток кодовых сигналов, протекающий в рельсах, преобразуется в выходное напряжение промежуточного измерительного преобразователя, которое измеряется типовым аналого-цифровым преобразователем (АЦП) типа Ф-7077/1.
2.3.2 Функциональные связи
Аппаратура КОНТРОЛЬ состоит из измерительного и силового шкафов, пульта управления размещенных в салоне вагона, а также первичного измерительного преобразователя тока АЛСН, исполненного в виде специальных измерительных катушек АЛС, индукторов и датчиков изолирующих стыков, датчика оборотов колеса, размещаемых вне салона вагона.
Функциональная схема системы «Контроль» представлена на рисунке 2.1.
Рисунок 2.1 — Функциональная схема измерительно-вычислительного комплекса выгона-лаборатории
Аппаратура работает следующим образом. Электромагнитное поле кодового тока, протекающего в рельсах, воспринимается измерительными катушками. Наводимая в них э.д.с. по соединительному кабелю передается на вход дифференциального усилителя. Измерительные катушки включены последовательно так, что э.д.с., наводимые от электромагнитных полей кодового тока в каждой катушке, на их выходе складываются, а э.д.с., наводимые от полей тягового тока, вычитаются. Дифференциальный усилитель подавляет э.д.с. от всех видов синфазных помех, вызванных тяговым током как в измерительных катушках, так и в соединительном кабеле.
Далее кодовый сигнал проходит через режекторные фильтры, настроенные на частоту основных гармонических составляющих тягового тока, и подавляет, их. Кроме того, режекторные фильтры подавляют помехи от э.д.с., вызванных колебаниями индуктивных катушек в поле тягового тока. Затем сигнал поступает на селективный усилитель, настроенный на частоту кодового сигнала. Кодовый сигнал с выхода селективного усилителя через фазовращатель поступает на нуль-орган.
Фазовращатель сдвигает фазу синусоидального сигнала на 90°, а нуль-орган формирует на выходе прямоугольный сигнал, фронты которого совпадают с моментами перехода через нуль входного синусоидального сигнала.
Формирователь импульсов выборки вырабатывает стробирующие импульсы, причем на одном выходе формирователя импульсов выборки эти импульсы соответствуют переднему фронту, а на втором выходе — заднему фронту прямоугольных импульсов нуль-органа, т. е. стробирующие импульсы формируются в моменты времени, соответствующие амплитудным значениям положительной и отрицательной полуволн синусоидального кодового сигнала, присутствующего на выходе селективного усилителя. Стробирующие импульсы, соответствующее амплитудному значению положительной полуволны кодового сигнала, поступают на схему запуска аналого-цифрового преобразователя (АЦП). Один из этих импульсов, сформированный схемой запуска, поступает на запуск АЦП. АЦП измеряет амплитудное значение положительной полуволны кодового сигнала, поступающего на его измерительный вход с выхода селективного усилителя.
Сигнал с выхода селективного усилителя поступает также на вход схемы автоматического выбора диапазона (автоматического снижения уровня кодового сигнала). Коэффициент передачи схемы автоматического выбора диапазона изменяется в зависимости от уровня кодового сигнала таким образом, что сигнал на выходе схемы имеет практически постоянный уровень во всем диапазоне изменения входного кодового сигнала. С выхода автоматического выбора диапазона сигнал поступает на входы схем выборки и запоминания напряжения. Схемы выборки и запоминания напряжения (фиксации амплитуды) выполнены на основе аналогового ключа и запоминающего конденсатора. Аналоговый ключ в этих схемах управляется стробирующими импульсами выборки, поступающими с формирователя импульсов выборки. В первой схеме выборки и запоминания напряжения запоминаются амплитудные значения положительных полуволн, а во второй — отрицательных полуволн синусоидального кодового сигнала.
Напряжения со схем выборки и запоминания напряжения подаются на входы буферного усилителя, выполненного по дифференциальной схеме. Поэтому напряжение на выходе этого усилителя пропорционально алгебраически разностному на его входах и имеет ступенчатую форму огибающей кодовых импульсов.
С выхода буферного усилителя сигнал поступает на входы дифференциатора фронта и дифференциатора среза. Дифференциатора фронта фиксирует возрастание, а дифференциатор среза — спад огибающей кодовых импульсов. Дифференциаторы воздействуют на триггер временного интервала, на выходе которого формируются прямоугольные импульсы, соответствующие импульсам кодового сигнала. Триггер временного интервала управляет работой схемы автоматического выбора диапазона таким образом, что ступени аттенюации переключаются в паузах кодового сигнала.
Импульсы с выхода триггера временного интервала поступают на вход распределителя. Распределитель имеет несколько выходов по числу элементов кода. На первом выходе распределителя формируется прямоугольный импульс, равный по длительности первому импульсу кодового цикла. Этот импульс поступает на схему запуска, которая из стробирующего импульса, пришедшего с формирователя импульсов выборки, формирует запускающий импульс АЦП примерно в середине кодового импульса. Импульсы элементов кода с выхода распределителя поступают в блок измерения временных параметров.
С первого генератора опорной частоты через делитель частоты в блок измерения временных параметров поступают калиброванные импульсы. В блоке измерения временных параметров имеются два счетчика этих калиброванных импульсов, которые управляются триггером временного интервала. В первый счетчик калиброванные импульсы записываются в импульсах кодового сигнала, в во второй — в интервалах. К счетчикам подключены ячейки памяти по количеству элементов кода. Информация со счетчиков переписывается в соответствующие ячейки памяти по управляющим импульсам элементов кода, приходящих с Р. Информация из ячеек памяти передается в блок динамической индикации, на цифровом табло которого высвечивается числовое значение измеренных временных параметров.
Координаты пути измеряются следующим образом. Датчик оборотов колеса преобразует перемещение колесной пары в дискретный сигнал. Формирователь импульсов преобразует этот сигнал в определенное число калиброванных импульсов, приходящих с делителя частоты за один оборот колеса. В зависимости от длины окружности колеса преобразователь частоты преобразует эти импульсы таким образом, чтобы обеспечивалась дискретность отсчета расстояния 1м. Импульсы, каждый из которых соответствует 1м пройденного пути, поступают с преобразователя частоты на счетчик расстояния и измеритель скорости. Информация о пройденном пути и скорости движения передается в блок динамической индикации.
Проезд изолирующих стыков фиксируется следующим образом. Индуктор, укрепленный на одной тележке вагона над рельсом и получающим питание от второго генератора опорной частоты, создает в замкнутом электрическом контуре, образованном колесными парами и рельсами, переменный ток. Поле этого тока наводит ЭДС в индуктивном датчике изолирующего стыка, установленном на другой тележке вагона. Напряжение с датчика изолирующего стыка отстраивается по частоте селективным усилителем и поступает на детектор, который выделяет огибающую этого напряжения.
Далее этот сигнал поступает на амплитудный дискриминатор. При проезде изолирующих стыков цепь тока в рельсовом контуре нарушается и э.д.с. в датчике изолирующего стыка уменьшается. В этот момент амплитудный дискриминатор вырабатывает прямоугольный импульс, длительность которого определяется временем уменьшения э. д. с. в датчике изолирующего стыка, т. е. временем проезда изолирующих стыков.
Этот импульс поступает на управляющий вход счетчика метровых импульсов, на счетный вход которого с выхода преобразователя частоты поступают импульсы с периодом, кратным 1 м пути. В качестве счётчика метровых импульсов применен десятичный счетчик, т. е. после заполнения этого счетчика десятью импульсами он формирует на выходе импульс, устанавливающий триггер регистрации изолирующего стыка. Счётчик метровых импульсов необходим для того, чтобы предотвратить срабатывание триггера регистрации изолирующего стыка при случайном уменьшении э. д. с. в датчике изолирующего стыка, например, при потере контакта колесо — рельс. Триггер регистрации изолирующего стыка, сработав, сбрасывает схему автоматического выбора диапазона в исходное состояние и запускает схему выдержки времени, которая по истечении времени (несколько десятков миллисекунд) возвращает в исходное состояние триггер регистрации изолирующего стыка и счетчик расстояния.
Измерительная информация формируется в блоке динамической индикации и передается в ЭВМ (микроЭВМ) через контроллер. Причем информация передается в каждом цикле кодового сигнала или при проезде изолирующих стыков. Управление передачей информации производится триггером инициации прерывания. Этот триггер устанавливается через схему ИЛИ либо импульсом, приходящим с АЦП, либо — с триггера регистрации изолирующего стыка. После передачи информации контроллер возвращает триггер инициации прерывания в исходное состояние.
Информация может передаваться как в параллельном виде 16 шестнадцатибитовыми словами, при этом контроллер К выполнен в виде интерфейса параллельного обмена (ИРПР), так и в последовательном виде 32 байтами, при этом контроллер К выполнен в виде интерфейса последовательного обмена (ИРПС).
Аппаратура “Контроль” совместно c микроЭВМ представляет собой измерительно-вычислительный комплекс. Работа такого комплекса производится под управлением специальных программ для микроЭВМ, объединенных в программное обеспечение.
2.3.3 Интерфейс с ЭВМ
Как уже было сказано выше, в существующей системе «Контроль» можно организовать передачу информации в ЭВМ по двум стандартным интерфейсам:
q параллельному (ИРПР);
q последовательному (ИРПС).
При параллельной передаче информация в компьютер поступает шестнадцатью шестнадцатибитовыми словами. В этом случае начало передачи информации происходит после срабатывания триггера инициализации прерывания. Шестнадцатибитовое слово информации условно разбито на четыре четырехбитовые группы (тетрады). В четвертой тетераде (биты 15, 14, 13 и 12) передается четырехбитовый номер слова. В трех остальных тетрадах передаются двоично-десятичные коды разрядов измерительной информации. В компьютер через разъем Х3 пульта управления передается следующая информация:
q контакт а1 — состояние триггера индикации прерывания;
q контакт а2 — сброс этого триггера из компьютера;
q контакт с4 — тактовые импульсы генератора адреса слова;
q контакт в0 — общий.
Остальная информация приведена в таблице 2.1.
Таблица 2.1 — Информация, передаваемая в ЭВМ
Информация по тетрадам |
4 |
3 |
2 |
1 |
|||||||||||||
Биты слова |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Контакты разъема Х3 |
в9 |
в8 |
в7 |
в6 |
в5 |
в4 |
в3 |
в2 |
в1 |
а0 |
а9 |
а8 |
а7 |
а6 |
а5 |
а4 |
|
Слово №0 |
0 |
0 |
0 |
0 |
1 импульс, 0.1с |
цикл, с |
координата, км |
||||||||||
Слово №1 |
0 |
0 |
0 |
1 |
то же, 0.01с |
то же, 0.1с |
то же, 0.1км |
||||||||||
Слово №2 |
0 |
0 |
1 |
0 |
— |
то же, 0.01с |
то же, 0.01км |
||||||||||
Слово №3 |
0 |
0 |
1 |
1 |
2 импульс, 0.1с |
— |
то же, 0.001км |
||||||||||
Слово №4 |
0 |
1 |
0 |
0 |
то же, 0.01с |
— |
частота |
||||||||||
Слово №5 |
0 |
1 |
0 |
1 |
проезд изостыков |
перерыв кодирования, с |
скорость, 100км/ч |
||||||||||
Слово №6 |
0 |
1 |
1 |
0 |
3 импульс, 0.1с |
то же, 0.1с |
то же, 10км/ч |
||||||||||
Слово №7 |
0 |
1 |
1 |
1 |
то же, 0.01с |
то же, 0.01с |
то же, км/ч |
||||||||||
Слово №8 |
1 |
0 |
0 |
0 |
1 интервал, 0.1с |
ток, 10А |
— |
||||||||||
Слово №9 |
1 |
0 |
0 |
1 |
то же, 0.01с |
то же, А |
— |
||||||||||
Слово №10 |
1 |
0 |
1 |
0 |
вид кода |
то же, 0.1А |
— |
||||||||||
Слово №11 |
1 |
0 |
1 |
1 |
2 интервал, 0.1с |
— |
— |
||||||||||
Слово №12 |
1 |
1 |
0 |
0 |
то же, 0.01с |
— |
— |
||||||||||
Слово №13 |
1 |
1 |
0 |
1 |
— |
— |
— |
||||||||||
Слово №14 |
1 |
1 |
1 |
0 |
длинный интервал, 0.1с |
— |
— |
||||||||||
Слово №15 |
1 |
1 |
1 |
1 |
то же, 0.01с |
— |
— |
Информация о частоте кодового сигнала передается в четвертом слове в первой тетраде двоично-десятичного кода, причем комбинации “0000” соответствует частота 50Гц, “0001” — 25Гц, “0010” — 75Гц. Информация о виде кода передается в десятом слове в третьей тетраде двоично-десятичного кода, причем комбинации “0000” соответствует код красно-желтого огня, “0001” — код желтого огня, “0011” — код зеленого огня. Информация о проезде изостыков передается в пятом слове в третьей тетраде в битах 10, 9, 8 двоично-десятичного кода, причем информация о фиксировании проезда изостыков передается в восьмом бите пятого слова, в девятом бите пятого слова передается информация о состоянии первого изостыка (“1” — исправен), в десятом бите — о состоянии второго изостыка (“1” — исправен).
Информация в компьютер может также передаваться по последовательному каналу. В этом случае шестнадцать шестнадцатибитовых слов со структурой информации описанной в таблице 2.1 преобразуются в последовательные посылки. Происходит это следующим образом. По окончании цикла измерения, информация в виде шестнадцати двухбайтовых слов записывается в ОЗУ. Т.к. последовательная передача осуществляется по 8 бит в посылке, то поступившее 16-ти битовое, слово (биты с 0 до 15) условно делится на два байта: младший (биты с 0 до 7) и старший (биты с 8 до 15), Передача начинается с младшего байта и заканчивается старшим байтом. При последовательной передаче информация записывается в ОЗУ (и в дальнейшем передается) с нулевой по пятнадцатую ячейку памяти, начиная с того слова, которое присутствует на входах ОЗУ при начале записи, поэтому номер слова (биты 15, 14, 13 и 12) не соответствует его порядковому номеру в последовательной посылке.
Одна кодовая посылка содержит 11 бит (рисунок 2.2), из которых первым формируется один стартовый (нулевой) бит, затем 8 бит информации и два стоповых (единичных) бита. Данные передаются со скоростью 9600 бит/с — стандартной для интерфейса ИРПС.
Старт -бит |
D |
D |
D |
D |
D |
D |
D |
D |
Стоп-бит |
Стоп-бит |
Рисунок 2.2 — Кодовая посылка информации при последовательной передаче
2.4 Анализ возможностей модернизации
Так как аппаратура существующего вагона-лаборатории в значительной степени физически и морально устарела, ее необходимо модернизировать. Существует несколько путей осуществления данной задачи. Первым и самым трудоемким является способ, при котором будет заменена вся существующая аппаратура на современную. Данный способ характеризуется множеством проблем, связанных с аттестацией нового комплекса. На тестирование и внедрение новой аппаратуры могут уйти годы, а это неприемлемо в ситуации, когда необходимо как можно скорее получить результаты модернизации.
Второй способ модернизации предполагает замену аппаратуры, находящейся в салоне вагона-лаборатории, а первичный измерительный преобразователь тока АЛСН, индукторы и датчики изолирующих стыков и датчик оборотов колеса оставить без модернизации. Данный способ более приемлем, чем предыдущий, однако имеет те же самые недостатки только в меньшей степени.
Наиболее оптимальным методом модернизации представляется поэтапная замена устаревшей аппаратуры. Причем устанавливаемая новая аппаратура должна быть уже аттестована, чтобы аттестация всего измерительно-вычислительного комплекса не вызывала особых трудностей. Данный способ также имеет преимущества по сравнению с предыдущими в том, что результаты модернизации будут очевидны на каждом этапе. Также этот способ более эффективен с экономической точки зрения, так как требует меньших первоначальных затрат.
Первым этапом является подключение к существующему комплексу «Контроль» персонального компьютера, с помощью которого возможна автоматизация процесса измерения параметров рельсовых цепей. Функциями программного обеспечения будет являться обработка измеренной информации и создание базы данных параметров рельсовых цепей для определенного участка дороги.
Второй этап подразумевает замену преобразующей аппаратуры на более современную. Необходимо произвести замену АЦП, фильтров и т.д.
Так как измерительная катушка должна находиться на локомотиве, для облегчения маневровых работ и устранения необходимости нахождения вагона-лаборатории непосредственно за локомотивом можно использовать радиомодем для передачи измеренной и оцифрованной информации с локомотива в ЭВМ, находящуюся в вагоне-лаборатории.
2.5 Выводы
Во второй главе были рассмотрены принципы функционирования автоматической локомотивной сигнализации, была детально проанализирована существующая измерительная аппаратура вагона-лаборатории, рассмотрены функциональные характеристики системы “Контроль”, принципы взаимодействия этой системы с персональным компьютером, были высказаны некоторые соображения по возможностям модернизации существующего комплекса.
На основании этого можно сделать вывод, что в рамках данной конкретной задачи автоматизации, применение персонального компьютера для обработки результатов измерения параметров рельсовых цепей является очень существенной задачей, так как это позволит переложить на машину наиболее ответственную часть работы. От ее надежности и стабильности зависит безопасность движения на железной дороге, а, следовательно, процесс автоматизации, позволяющий избежать случайных ошибок человека, имеет очень важное значение.
Основная задача подключения персонального компьютера к существующей измерительной системе сводится к созданию программного обеспечения, позволяющего: принимать информацию об измеренных характеристиках, производить ее раскодировку, должным образом обрабатывать полученные значения, осуществлять протоколирование измеряемой информации в базы данных.
3.1 Обоснование выбора методов и среды программирования
измерительный локомотивный сигнализация программный
Программное обеспечение для измерительного комплекса вагона-лаборатории железнодорожной автоматики, телемеханики и связи разработано с использованием принципов объектно-ориентированного программирования.
Объектно-ориентированное программирование (сокращенно ООП) и порожденное им объектно-ориентированное проектирование — это совершенно новый подход к построению сложных (и не очень сложных) программ и систем. Этот подход зародился в таких языках программирования, как Ада, Smalltalk, C++, Borland Pascal. До появления ООП господствовало процедурное программирование. Тогда основой программ были функции и процедуры, т.е. действия. Разработчик определял, какие действия, какие функции нужны ему для решения поставленной задачи, реализовывал эти функции и объединял их в программу. Программа обычно имела достаточно четкий алгоритм работы — последовательность операций, начинающуюся в какой-то точке и заканчивающуюся в одной или множестве других точек.
В объектно-ориентированном программировании и проектировании главной, отправной точкой является не процедура, не действие, а объект. Вообще говоря, такой подход представляется достаточно естественным, поскольку в реальном мире мы имеем дело именно с объектами (людьми, предметами, техническими устройствами), взаимодействующими друг с другом. Да и взаимодействие пользователя с компьютерной программой — это тоже взаимодействие двух объектов — программы и человека, которые обмениваются друг с другом определенными сообщениями.
Прикладная программа (приложение), построенная по принципам объектной ориентации — это не последовательность каких-то операторов, не некий жесткий алгоритм. Объектно-ориентрованная программа — это совокупность объектов и способов их взаимодействия. Отдельным (и главным) объектом при таком подходе во многих случаях можно считать пользователя программы. Обмен между объектами происходит посредством сообщений.
ООП — это совокупность принципов, правил и идей, позволяющих существенно уменьшить усилия, необходимые для создания сложных программных систем.
В объектно-ориентированном программировании используются следующие базовые правила:
определение классов, которые будут использоваться;
определение всех необходимых операций для каждого класса;
обеспечение расширяемости (открытости) классов с использованием принципа наследования.
Базовыми блоками объектно-ориентированной программы являются объекты и классы. Объект имеет состояние, поведение и может быть однозначно идентифицирован (другими словами, имеет уникальное имя). Класс — это множество объектов, имеющих общую структуру и общее поведение. Класс — описание (абстракция), которое показывает, как построить существующую во времени и пространстве переменную этого класса, называемую объектом.
Состояние объекта объединяет все его поля данных (статический компонент) и текущие значения каждого из этих полей (динамический компонент). Поведение объекта определяет, как объект изменяет свои состояния и взаимодействует с другими объектами. Идентификация (распознавание) объекта — это свойство, которое позволяет отличить объект от других объектов того же или других классов.
К базовым принципам ООП относятся [2]:
q пакетирование (encapsulation);
q наследование (inheritance);
q полиморфизм (polymorphism);
q передача сообщений.
Пакетирование предполагает соединение в одном объекте данных и функций, которые манипулируют этими данными. Доступ к некоторым данным внутри пакета может быть либо запрещен, либо ограничен.
Наследование позволяет использовать библиотеки классов и развивать их (совершенствовать и модифицировать библиотечные классы) в конкретной программе.
Полиморфизм позволяет использовать одни и те же функции для решения разных задач. Виртуальные (модифицируемые) функции являются примером реализации этого принципа.
Каждый типовой элемент исследуемой схемы описывается как отдельный объект, в котором, кроме других функций, содержится и функция обработки сигналов, поступающих на входы элемента.
Принципы ООП реализованы в языке высокого уровня C++. Язык C++ поддерживает абстрактные типы данных, обработку исключительных ситуаций, преобразование типов для абстрактных данных.
Благодаря визуальному объектно-ориентированному программированию была создана технология, получившая название быстрая разработка приложений, по-английски HAD — Rapid Application Development. Эта технология характерна для нового поколения систем программирования, к которому относится и С++ Builder.
Первой ласточкой в этом новом мире более простого и наглядного интерфейса была среда Visual Basic. Она сформировала новый стиль взаимодействия разработчика программы с компьютером, позволяя наглядно конструировать пользовательский интерфейс с помощью мыши, а не обычным для прежних времен путем: написанием кодов, их трансляцией и выполнением программы, после чего только и можно было посмотреть, как же это выглядит на экране.
Хотя Visual Basic нашел широкий спрос и помог открыть мир программирования для людей, не слишком в нем искушенных, он не свободен от многих проблем. Главные из них — низкая производительность разрабатываемых приложений при их выполнении, недостаточная строгость и объектная ориентированность языка, способствующая скорее быстрой разработке поделок, а не созданию мощных эффективных приложений, а также ряд других недостатков.
Системы Delphi и C++Builder — это следующий шаг в развитии среды быстрой разработки приложений. Они исправляют многие дефекты, обнаруженные в Visual Basic. Разработчики этих систем создали инструменты, которые на первый взгляд выглядят похожими на среду Visual Basic, хотя в действительности они заметно лучше.
Интегрированная среда разработки в Delphi и C++Builder выглядит одинаково. Весь пользовательский интерфейс, все библиотеки, все приемы работы с этими системами практически одинаковы. Если быть более точным, то они различаются только в силу разного времени выпуска соответствующих версий. Версии C++Builder выпускаются на полгода позже версий Delphi с аналогичными номерами. Поэтому каждая версия C++Builder совершеннее аналогичной версии Delphi, но слабее последующей версии Delphi.
Но основное различие Delphi и C++Builder не в этом, а в языках программирования, которые лежат в их основе. Delphi базируется на языке Object Pascal, a C++Builder — на языке C++. Эти языки, сначала существенно различные по своим возможностям, со временем все более сближаются. Сейчас оба они представляют прекрасные инструменты объектно-ориентированного программирования, различающиеся, в основном, синтаксисом. Впрочем, C++ все-таки богаче и опережает аналогичные версии Object Pascal. С этой точки зрения, возможно, он предпочтительнее. Но эти различия невелики, так что выбор того или иного языка и соответственно Delphi или C++Builder — дело личных пристрастий программиста и определяется тем, к какому языку он более привык.
Причем, фирма Borland позаботилась о том, чтобы приложения, разработанные и на Delphi и на C++Builder можно было достаточно просто конвертировать друг в друга. Таким образом, в одной из этих систем вы можете использовать свои наработки, сделанные в другой системе.
Отдельно надо сказать об одной из главных задач Delphi и C++Builder — разработке приложений для работы с базами данных. В этой области Delphi и С++ Builder занимают самые передовые позиции, работая с любыми системами управления базами данных.
Borland C++ Builder 4 — выпущенное компанией Borland (Inprise) средство быстрой разработки приложений, позволяющее создавать приложения на языке C++, используя при этом среду разработки и библиотеку компонентов Delphi.
C++Builder — мощная система визуального объектно-ориентированного проектирования, позволяющая решать множество задач, в частности:
q Создавать законченные приложения для Windows самой различной направленности, от чисто вычислительных и логических, до графических и мультимедиа.
q Быстро создавать (даже начинающим программистам) профессионально выглядящий оконный интерфейс для любых приложений, написанных на любом языке; интерфейс удовлетворяет всем требованиям Windows и автоматически настраивается на ту систему, которая установлена на компьютере пользователя, поскольку использует многие функции, процедуры, библиотеки Windows.
q Создавать свои динамически присоединяемые библиотеки (DLL) компонентов, форм, функций, которые затем можно использовать из других языков программирования.
q Создавать мощные системы работы с локальными и удаленными базами данных любых типов; при этом имеются средства автономной отладки приложений с последующим выходом в сеть.
q Формировать и печатать сложные отчеты, включающие таблицы, графики и т.п.
q Создавать справочные системы (файлы.hip), как для своих приложений, так и для любых других, с которыми можно работать не только из приложений, но и просто через Windows.
q Создавать профессиональные программы инсталляции для приложений Windows, учитывающие всю специфику и все требования Windows.
C++ Builder 4 предоставляет быстродействующий компилятор с языка C++, эффективный инкрементальный линкер и усовершенствованные средства отладки, как на уровне исходных инструкций, так и на уровне ассемблерных команд — в расчете удовлетворить высокие требования программистов-профессионалов [3].
Оптимизирующий 32-разрядный компилятор построен по оригинальной и проверенной адаптивной технологии, обеспечивающей исключительно надежную и быструю оптимизацию как длины выходного исполняемого кода, так и требуемой памяти. Проход предкомпиляции заголовков также значительно ускорен благодаря снижению объема оперативной памяти для хранения таблицы символов и эффективному доступу к ней. Это достигается кэшированием памяти взамен кэширования обменов с дисковыми накопителями, а также за счет использования таблицы модификации заголовков.
Инкрементальный линкер осуществляет быструю и надежную компоновку эффективной выполняемой программы с минимальными потерями времени. Данные объектных файлов сохраняются вместе с информацией отладчика. Автоматически исключается перекомпоновка не изменившихся объектных файлов и не используемых функций. Таким образом, при развитии и усложнении проекта продуктивность разработки сохраняется на высоком уровне.
Borland C++ Builder располагает рядом инструментов и средств обслуживания, благодаря которым значительно облегчена разработка приложений Windows для баз данных. На рисунке 3.1 представлена типичная архитектура высокого уровня программы C++ Builder для баз данных.
Рисунок 3.1 — Схема связи приложения C++ Builder с базами данных
Общая архитектура состоит из нескольких слоев:
Наверху находится приложение C++ Builder, которое управляет данными. Самый легкий способ дать приложению возможность получить доступ и управлять базами данных состоит в использовании стандартных компонентов для баз данных, поставляемых с C++ Builder.
Компоненты баз данных приложения, в свою очередь, используют “машину” баз данных Borland Database Engine (BDE), которая показана как промежуточный слой на рисунке 3.1. Компоненты взаимодействуют с BDE через коллекцию программ и услуг, которые доступны в Интерфейсе программирования приложений API BDE (Application Programming Interface, ранее называвшейся IDAPI).
Нижние слои на рисунке 3.1 обеспечивает доступ к фактическим физическим данным, хранящихся в таблицах базы данных, и составлен из фактических систем управления базами данных, как локальных, типа таблиц Paradox или dBase, так и удаленных, типа данных, находящихся в базе данных, управляемой сервером Oracle, Sybase, Informix или Interbase.
Идея слоистой архитектуры состоит в том, чтобы изолировать программиста C++ Builder от сложностей и подробностей поддержки различных форматов таблиц данных и различных соглашений при взаимодействии с ними. Она также обеспечивает возможность доступа к различным базам данных в гетерогенной окружающей среде, в которой некоторые части данных могут находиться в локальной таблице, а к другим можно обращаться дистанционно.
При разработке программного обеспечения в качестве среды разработки применяется C++ Builder 4.
Полный листинг программы приведен в приложении В.
3.2 Основные функции программного обеспечения вычислительного комплекса
Программное обеспечение разрабатываемого вычислительного комплекса производит ввод в ПЭВМ из аппаратуры “Контроль” измерительной информации о параметрах кодов автоматической локомотивной сигнализации и рельсовых цепей, обработку этой информации, оценку измеренных параметров, привязку обработанной измерительной информации к конкретной рельсовой цепи конкретного перегона участка железной дороги, где производились измерения, протоколирование результатов измерений в базу данных, документирование полученных данных, а также поддержку дружественного интерфейса взаимодействия оператора с измерительно-вычислительным комплексом.
Входной информацией для программного обеспечения является:
q данные, вводимые оператором с устройств ввода информации (клавиатура, мышь);
q измерительная информация из аппаратуры “контроль”;
q данные из баз данных по рельсовым цепям.
Программное обеспечение обеспечивает выполнение следующих функций:
1) прием, дешифрирование и предварительную обработку измерительной информации из аппаратуры “контроль”
2) вывод на экран следующей информации:
Ё название и условный номер железнодорожного участка, на котором производятся измерения;
Ё название и условный номер перегона на этом участке;
Ё номер светофора и, если есть — трансляции, к которым производится движение;
Ё текущую координату рельсовой цепи и скорость движения;
Ё частоту и величину тока локомотивной сигнализации;
Ё длительность импульсов, интервалов и цикла принимаемого кода и название вида кода;
Ё индикацию проезда изолирующих стыков;
Ё дополнительную служебную информацию о функциях программы;
3) по каждой рельсовой цепи протоколирование в базу данных следующей информации:
Ё дату произведения измерений;
Ё название и условный номер железнодорожного участка, название и условный номер перегона на этом участке;
Ё номер светофора и, если была — трансляции, к которым относится данная рельсовая цепь;
Ё длину рельсовой цепи
Ё скорость и время проезда изолирующих стыков;
Ё массив величин токов локомотивной сигнализации и соответствующих им координат рельсовой цепи;
Ё статистические данные о длительностях импульсов, интервалов и цикле кодовых сигналов, измеренных на данной рельсовой цепи;
Ё вид кода и частоту тока кодовых сигналов;
4) вывод на печатающее устройство по каждой перегонной рельсовой цепи полного протокола измерений со следующей информацией:
Ё дату проведения измерений
Ё название и условный номер железнодорожного участка, название и условный номер перегона на этом участке, индекс дистанции сигнализации и связи;
Ё номер вагона-лаборатории, номер и тип локомотива, вид тяги;
Ё номер светофора и, если была — трансляции, к которым относится данная рельсовая цепь;
Ё длину рельсовой цепи
Ё ток локомотивной сигнализации на входном и выходном концах рельсовой цепи;
Ё длительность импульсов, интервалов и цикла кодовых сигналов, измеренных на данной рельсовой цепи;
Ё отметку об отклонении параметров от норм;
Ё скорость и время проезда изолирующих стыков данной рельсовой цепи;
5) предоставление оператору возможности самостоятельно вести базы данных железнодорожных участков, перегонов, рельсовых цепей и используемого оборудования.
3.3 Разработка алгоритмов работы ПО
Разрабатываемое программное обеспечение имеет два основных программных модуля:
Модуль SerialLink — выполняет действия, связанные с приёмом и декодированием измерительной информации из аппаратуры “Контроль”;
Модуль RC — отвечает за взаимодействие с пользователем, отображение необходимой информации на экране, ведение протокола в базу данных.
Алгоритмы работы этих двух программных модулей приведены в приложениях А и Б соответственно.
3.4 Получение измерительной информации из аппаратуры “Контроль”
Для ввода измерительной информации из аппаратуры контроль применяется последовательный способ передачи данных.
Большое число периферийных устройств персонального компьютера подключается к адаптеру последовательной асинхронной связи. Перенос информации между адаптером и внешним устройством организуется по правилам последовательного асинхронного интерфейса RS-232. Стандарт RS-232 регламентирует передачу последовательных двоичных потоков информации между интерфейсами или терминалами и связным оборудованием.
Информация по линиям интерфейса RS-232 передается асинхронно последовательным кодом. Это означает, что передатчик посылает байт данных бит за битом. Для такой последовательной передачи требуется только две линии (два провода). При передаче слов информации реализуется так называемый старт-стопный метод. Его суть в том, что каждое передаваемое слово начинается старт-битом, позволяющим приемнику определить начало передачи слова. Затем передается бит за битом байт информации. Завершение передачи слова отмечается специальными стоп-битами. Электрически логическому нулю в интерфейсе соответствует высокий потенциал +12В, а логической единице — 0В. Старт-бит — это всегда единица, стоп-бит (биты) — всегда нуль (нули). Таким образом, переключение напряжения на линии данных с +12В на 0В рассматривается приемной стороной как сигнал начала слова. По этому сигналу на приемной стороне запускается в работу специальный аппаратный узел — сдвиговый регистр, который “собирает” в параллельный код принятое бит за битом слово информации. Биты передаются с известной приемнику и передатчику частотой, измеряемой в битах в секунду (BPS — Bits Per Second). Передатчик и приемник используют разные источники синхронизации, которые работают с близкой, но все-таки различающейся частотой. Сильное расхождение частот приемника и передатчика вызывает возникновение специфической для асинхронной связи ошибки, называемой ошибкой кадрирования (framing error).
Сводная характеристика передаваемого в интерфейс слова называется форматом слова. Передача информации между источником и приемником возможна тогда, когда они используют одинаковый формат слова. Только в этом случае приемник может обнаружить конец слова. Если приемник полагает, что наступило время принимать стоп-биты (высокий потенциал), но из интерфейса поступает логическая единица, приемник фиксирует ошибку кадрирования.
Формат слова определяет следующие особенности переноса информации через интерфейс:
q число битов, используемых для кодирования самого переносимого символа;
q наличие или отсутствие контроля по четности;
q способ формирования контрольного бита;
q число стоп-битов.
Согласно [5], значения напряжений, кодирующих логические состояния линий для интерфейсов, ИРПС и RS-232 одинаковы, отсюда следует, что систему “Контроль” можно подключать к компьютеру через COM-порт без введения какой-либо дополнительной преобразующей аппаратуры.
Схема подключения компьютера к системе “Контроль” по последовательному интерфейсу изображена на рисунке 2.
Рисунок 3.2 — Схема подключения компьютера к системе “Контроль” по последовательному интерфейсу
Существуют две стратегии организации обмена данными по интерфейсу RS-232:
q управляемый прерываниями обмен данными;
q последовательный опрос.
В первом случае адаптер последовательной связи инициализируется так, что те или иные события в адаптере и линиях интерфейса генерируют аппаратные прерывания. Эти прерывания обслуживает программа-обработчик, которая принимает символы из интерфейса и помещает их в приемный буфер либо передает очередной байт в интерфейс. Другие программы читают информацию уже из буфера в памяти или записывают ее в буфер при необходимости передать блок информации другому компьютеру. Операция записи информации в буфер активизирует асинхронную передачу.
Во втором случае компьютер выполняет бесконечный цикл опроса внутренних регистров адаптера. При передаче он ожидает момента возникновения сигнала СTS (Clear To Send), а при приеме — момента наступления события «Готовность байта данных». Программное обеспечение для обмена в этом случае намного проще, но отсутствует возможность выполнения других программ. Дело в том, что момент «Готовность байта данных» нельзя оставить в ожидании обслуживания (чтения регистра данных), так как принятый байт может быть переопределен следующим байтом.
В разрабатываемом программном обеспечении используется второй способ — последовательный опрос. При этом проблема отсутствия при этом возможности выполнения других программ решается элементарно при помощи многозадачной концепции операционной системы Windows. За получение последовательности байт информации из аппаратуры “Контроль” отвечает дополнительная запускаемая нить (процесс), которая работает с не очень высоким приоритетом и осуществляет постоянный последовательный опрос COM-порта. В случае обнаружения события «Готовность байта данных», эта нить записывает принятый байт во внутренний буфер и по окончании приема всей последовательности, состоящей, как было сказано ранее, из 32 байт, осуществляет вызов функции раскодирования принятой последовательности.
Для создания дополнительной нити используется абстрактный класс Tthread, который позволяет создавать отдельные нити выполнения в приложении. В разрабатываемом программном обеспечении создается класс, производный от Tthread — SerialLink:
class SerialLink : public Tthread
private:
protected:
void __fastcall Execute();
public:
__fastcall SerialLink(bool CreateSuspended);
void __fastcall DecodePacket(void);
В конструкторе полученного класса производится установление приоритета дополнительной нити:
__fastcall SerialLink::SerialLink(bool CreateSuspended)
: Tthread(CreateSuspended)
FreeOnTerminate = true;
Priority = tpIdle;
В методе класса SerialLink — унаследованной от Tthread функции Execute() происходит открытие, начальная инициализация и установка таймаутов последовательного порта COM1. Для открытия используется функция CreateFile:
HANDLE hCom; BOOL fSuccess; hCom = CreateFile(«COM1», // порт COM1 GENERIC_READ, // на чтение 0, /* устройства связи должны быть открыты с эксклюзивным доступом */ NULL, /* без атрибутов безопасности */ OPEN_EXISTING, /* устройства связи должны использовать OPEN_EXISTING */ 0, /* без пересеченного ввода-вывода */ NULL /* параметр hTemplate должен быть NULL для устройств связи */);
Начальная инициализация COM-порта происходит в соответствии с параметрами выходных сигналов аппаратуры “Контроль”. Для инициализации используются функции GetCommState и SetCommState:
fSuccess = GetCommState(hCom, &dcb); /* Заполняем структуру DCB:
скорость = 9600,
8 битов данных,
без контроля четности,
2 стоп-бита. */ dcb.BaudRate = 9600; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = TWOSTOPBITS; fSuccess = SetCommState(hCom, &dcb);
Установка таймаутов производится при помощи функций GetCommTimeouts и SetCommTimeouts:
GetCommTimeouts(hCom, &TimeOuts);
TimeOuts.ReadIntervalTimeout = 100;
TimeOuts.ReadTotalTimeoutMultiplier = 1;
TimeOuts.ReadTotalTimeoutConstant = 100;
SetCommTimeouts(hCom, &TimeOuts);
Параметр ReadIntervalTimeout определяет максимальное время, в миллисекундах, между поступлением двух символов в линии связи. В течение действия ReadFile, период времени начинается тогда, когда получен первый символ. Если интервал между поступлением любых двух символов превышает это количество, действие ReadFile завершается.
Далее, в основном цикле работы функции Execute() происходит чтение последовательности байт через порт COM1:
unsigned long g=1;
char work1[2], work2[2];
while(!Terminated)
fSuccess = ReadFile(hCom,work1,g,&g,0);
if((fSuccess)&&(g>0))
fSuccess = ReadFile(hCom,work2,g,&g,0);
if((fSuccess)&&(g>0))
Buffer[index] = work1[0]|(work2[0]<<8);
index++;
if(index==16)
DecodePacket();
index=0;
} while ((fSuccess)&&(g>0));
Чтение производится функцией ReadFile. В соответствии с работой аппаратуры “Контроль”, сначала считывается младший байт информационного слова, затем — старший. По пришествии 16 информационных двухбайтовых слов происходит вызов функции-члена класса DecodePacket, осуществляющей раскодирование принятой информации в соответствии с таблицей 2.1.
3.5 Структура используемой базы данных
Разработанная структура базы данных будет приведена в виде таблиц, каждая из которых представляет собой отдельный файл. В каждой таблице будет представлено четыре столбца:
описание поля базы данных;
наименование поля;
тип данных;
размерность (если требуется).
Перед каждой таблицей будет приведено краткое описание того, для чего будет использоваться данная таблица в разрабатываемой системе.
1. Рельсовые цепи (RCs)
Эта таблица содержит в себе информацию о рельсовых цепях. По коду участка, коду перегона и коду кодового путевого трансмиттера осуществляется связь данной таблицы, с таблицами содержащими вспомогательные данные:
Таблица 3.1 — Структура таблицы рельсовых цепей
Описание |
Наименование поля |
Тип данных |
Размерность |
|
Код участка |
NumSite |
Short |
|
|
Код перегона |
NumFrictSite |
Short |
||
Номер стыка |
NumJunction |
Short |
||
Номер светофора |
NameSignal |
Alpha |
20 |
|
Номер трансляции, к которой относится данная рельсовая цепь |
NumTranslation |
Short |
||
Код кодового путевого трансмиттера |
NumKPT |
Short |
2. Участки (Sites)
Таблица, связанная по коду участка с таблицами RCs и FrictSites. Cодержит в себе информацию о железнодорожных участках.
Таблица 3.2 — Структура таблицы железнодорожных участков
Описание |
Наименование поля |
Тип данных |
Размерность |
|
Код участка |
NumSite |
Short |
||
Название участка |
NameSite |
Alpha |
30 |
3. Перегоны (FrictSites)
Таблица, связанная по коду участка с таблицей участков Sites и по коду перегона — с таблицей рельсовых цепей RCs. Эта таблица содержит в себе информацию о железнодорожных перегонах, принадлежащих конкретным участкам.
Таблица 3.3 — Структура таблицы перегонов
Описание |
Наименование поля |
Тип данных |
Размерность |
|
Код участка |
NumSite |
Short |
||
Код перегона |
NumFrictSite |
Short |
||
Название перегона |
NameSite |
Alpha |
30 |
4. Используемое оборудование (KPT)
Таблица, связанная по коду кодового путевого трансмиттера, характерного для конкретной рельсовой цепи с таблицей рельсовых цепей RCs. Эта таблица содержит информацию о типе используемого оборудования и его характеристиках.
Таблица 3.4 — Структура таблицы используемого оборудования
Описание |
Наименование поля |
Тип данных |
Размерность |
|
Код оборудования |
NumKPT |
Short |
|
|
Название оборудования |
NameKPT |
Alpha |
15 |
|
Минимальное значение длительности импульса при коде КЖ |
MinRY |
Number |
||
Максимальное значение длительности импульса при коде КЖ |
MaxRY |
Number |
||
Минимальное значение длительности импульса при коде Ж |
MinY |
Number |
||
Максимальное значение длительности импульса при коде Ж |
MaxY |
Number |
||
Минимальное значение длительности импульса при коде З |
MinG |
Number |
||
Максимальное значение длительности импульса при коде З |
MaxG |
Number |
||
Минимальное значение интервала при коде Ж |
MinIntY |
Number |
||
Максимальное значение интервала при коде Ж |
MaxIntY |
Number |
||
Минимальное значение интервала при коде З |
MinIntY |
Number |
||
Максимальное значение интервала при коде З |
MaxIntY |
Number |
5. Протокол измерений (Report)
Таблица протокола измерений содержит обширный отчет об измеренных параметрах рельсовых цепей. В эту таблицу информация записывается автоматически при следовании вагона-лаборатории по перегону.
Таблица 3.5 — Структура таблицы протокола измерений
Описание |
Наименование поля |
Тип данных |
Размерность |
|
Дата проведения измерений |
Date |
Date |
||
Время проезда изолирующего стыка |
Time |
Time |
||
Название железнодорожного участка |
NameSite |
Alpha |
20 |
|
Название перегона |
NameFrictSite |
Alpha |
20 |
|
Номер изолирующего стыка |
NumJunction |
Short |
||
Номер светофора |
NameSignal |
Alpha |
20 |
|
Номер трансляции, к которой относится данная рельсовая цепь |
NumTranslation |
Short |
||
Длина рельсовой цепи |
RCLength |
Short |
||
Ток локомотивной сигнализации на входном конце рельсовой цепи |
Ibeg |
Number |
||
Ток локомотивной сигнализации на выходном конце рельсовой цепи |
Iend |
Number |
||
Вид кода |
Code |
Alpha |
2 |
|
Длительность первого импульса |
Imp1 |
Number |
||
Длительность первого интервала |
Int1 |
Number |
||
Длительность второго импульса |
Imp2 |
Number |
||
Длительность второго интервала |
Int2 |
Number |
||
Длительность третьего импульса |
Imp3 |
Number |
||
Длительность длинного интервала |
Int3 |
Number |
||
Длительность цикла |
Cycle |
Number |
||
Скорость проезда изолирующего стыка |
Velocity |
Short |
||
Тип используемого оборудования |
NamKPT |
Alpha |
15 |
|
Комментарии |
Comments |
Alpha |
255 |
3.6 Разработка интерфейса пользователя
Для данной программы был разработан дружественный, интуитивно понятный, графический интерфейс пользователя (GUI). Он состоит из меню, программных форм, связанных с ними баз данных и т.д., предназначенных для облегчения действий пользователя.
При запуске программы перед пользователем появляется основная форма с меню (рисунок 3.3), содержащей отображаемые характеристики кодов АЛСН и рельсовых цепей. С помощью этой формы и происходит работа с системой измерительного комплекса.
Рисунок 3.3 — Внешний вид основной формы программы
В верхней части окна находится основное меню программы. Чуть ниже расположена группа элементов, характеризующих текущее местонахождение вагона-лаборатории на перегоне. Это — условный номер и названия железнодорожного участка, условный номер и название перегона, номер изолирующего стыка, номер светофора и трансляции, к которым принадлежит данная рельсовая цепь, а также тип используемого оборудования.
В нижней части окна расположена группа параметров, получаемых из измерительной системы “Контроль”. Сюда включаются:
q Длительность импульсов и интервалов, измеренных в данной рельсовой цепи;
q Частота кодового сигнала;
q Скорость движения подвижного состава;
q Текущая координата;
q Вид кода;
q Ток локомотивной сигнализации;
q Длительность цикла;
q Длительность перерыва кодирования;
q Индикатор проезда изолирующих стыков.
С запуском программы, сразу же начинается последовательное считывание измерительной информации с аппаратуры “Контроль” и постоянное отображение ее в главном окне программы.
Первый пункт меню — “Отчёт” позволяет просматривать, корректировать и выводить на печать статистическую информацию о измеренных параметрах рельсовых цепей (Рис. 3.4).
Рисунок 3.4 — Внешний вид диалогового окна статистики измерений
В левой верхней части появляющегося диалогового окна оператору предлагается ввести дату проведения измерений. После нажатия кнопки “Вывести”, будет отображена статистическая информация о результатах измерений.
Кнопка “Печать” служит для вывода статистической информации на печатающее устройство.
В нижней части окна расположено поле “Комментарий”. Это поле генерируется автоматически при выполнении программы, и содержит отметку о соответствии измеренных параметров допускаемым нормам.
Пункт меню “Настройки” позволяет включить/выключить режим ведения расширенного протокола. При включенном значении этого параметра, помимо статистики измерений, записываемой в базу данных, будет происходить также и запись расширенной статистики параметров кодов АЛСН и рельсовых цепей в дополнительные файлы данных. Форма имени этих файлов следующий: RCUUPP.SST, где первые два символа RC означают “рельсовая цепь”, следующие два цифровых символа UU обозначают номер железнодорожного участка, на котором производятся измерения, следующие два цифровых символа PP обозначают номер перегона на этом участке. После точки в названии файла рельсовой цепи два цифровых символа SS обозначают номер светофора, к которому принадлежит данная рельсовая цепь. Последний цифровой символ T обозначает номер трансляции. Таким образом, если, например, имеется файл со следующим именем: RC405.121, то это записаны данные по рельсовой цепи 4-го участка, 5-го перегона этого участка, номер светофора — 12 и номер трансляции — 1.
Третий пункт главного меню — “Справочники”. Данный пункт служит для ввода и корректировки данных в справочниках.
При выборе пункта меню “Справочники — Участки” на экране будет представлена форма, позволяющая добавлять, редактировать и удалять железнодорожные участки (рис. 3.5).
Рисунок 3.5 — Справочник ”Участки”
В левой верхней части экрана расположено окно со списком железнодорожных участков. Для работы с определенным участком (если он есть в списке) достаточно выбрать его с помощью манипулятора «мышь».
В нижней части экрана находятся поля ввода, в которых предоставляется возможность добавления нового участка или редактирования существующего.
В правой части формы расположены следующие кнопки управления:
q Добавить — позволяет добавить новый участок. Номер и название участка должно быть предварительно напечатано в полях ввода, расположенных внизу;
q Удалить — удаляет текущий участок из списка;
q Изменить — позволяет изменить номер и название участка. Для этого нужно предварительно выбрать требуемый участок, изменить его название, а уж потом нажимать данную кнопку. Она зафиксирует изменения в базе данных железнодорожных участков;
q OK — позволяет корректно выйти из формы.
При выборе пункта меню «Справочники — Перегоны» на экране будет представлена форма, позволяющая добавлять, редактировать и удалять перегоны, принадлежащие конкретным железнодорожным участкам (рисунок 3.6).
Рисунок 3.6 — Справочник ”Перегоны”
В верхней части формы находится выпадающее меню, позволяющее работать с каждым участком в отдельности. Ниже расположены:
q список устройств, производимых выбранным заводом;
q кнопки управления;
q вводимые поля добавления новых перегонов и редактирования названий существующих.
Управление справочником перегонов абсолютно идентично справочнику железнодорожных участков.
При выборе пункта меню «Справочники — Рельсовые цепи» на экране будет представлена форма, позволяющая добавлять, редактировать и удалять рельсовые цепи, принадлежащие конкретным перегонам конкретных железнодорожных участков (рисунок 3.7).
Рисунок 3.7 — Справочник ”Рельсовые цепи”
В верхней части формы находится два выпадающих меню, позволяющих выбирать участки и соответствующие им перегоны. Ниже расположены:
q список рельсовых цепей и соответствующие им параметры, такие как номер стыка, номер светофора и трансляции, к которым относится данная рельсовая цепь, и тип оборудования;
q кнопки управления;
q кнопка “Текущее место”, позволяющая привязать текущее местоположение вагона-лаборатории к конкретной рельсовой цепи (рис. 3.8)
q вводимые поля добавления новых рельсовых цепей и редактирования существующих.
Рисунок 3.8 — Установка текущего местонахождения вагона-лаборатории
Управление справочником рельсовых цепей идентично справочнику железнодорожных участков.
При выборе пункта меню «Справочники — Кодовые путевые трансмиттеры» на экране будет представлена форма, позволяющая добавлять, редактировать и удалять типы оборудования, используемого на конкретных рельсовых цепях (рисунок 3.9).
Рисунок 3.9 — Справочник ”Кодовые путевые трансмиттеры”
На форме расположены:
q перечень кодовых путевых трансмиттеров и соответствующие им параметры, такие как минимальные и максимальные значения длительности импульсов и интервалов при различных типах кода;
q кнопки управления;
q вводимые поля добавления новых КПТ и редактирования параметров существующих.
Управление справочником кодовых путевых трансмиттеров идентично справочнику железнодорожных участков.
В четвёртом пункте меню — «Выход» — предоставляется возможность корректного выхода из программы.
3.7 Описание структуры программного обеспечения и его настройка
Разработанная программа представляет собой набор процедур, находящихся в *.cpp файлах. Заголовочные файлы для соответствующих *.cpp файлов расположены в файлах вида *.h. С помощью пакета визуального программирования C++ Builder эти процедуры скомпилированы в единый исполняемый.exe модуль.
Для нормальной работы программы необходимо настроить операционную систему следующим образом:
ь установить на компьютер, на котором будет работать программа, утилиту Borland Database Engine (BDE) версии не ниже 4.0. Эта утилита входит в инсталляционный пакет C++ Builder 4.0;
ь после инсталляции запустить BDE Administrator и создать в нем новый alias (псевдоним) с именем MyRC. Имя псевдонима регистрозависимо. Тип псевдонима оставить STANDART;
ь путь (PATH) в псевдониме указать на каталог, где находятся базы данных;
ь в пункте Default Driver выбрать PARADOX.
Теперь нужно создать новый каталог, в котором будет находиться программа, и скопировать туда следующий файл:
ь MyRC.EXE;
После этого программа не требует больше никаких настроек и готова для запуска.
3.8 Выводы
В главе 3 производилась разработка программного обеспечения измерительного комплекса вагона-лаборатории автоматики, телемеханики и связи. В процессе создания ПО был решен ряд задач:
q ввод в ПЭВМ из аппаратуры “Контроль” измерительной информации о параметрах кодов автоматической локомотивной сигнализации и рельсовых цепей;
q обработка этой информации ее раскодирование, оценка измеренных параметров;
q привязка обработанной измерительной информации к конкретной рельсовой цепи конкретного перегона участка железной дороги, где производились измерения путем ведения базы данных рельсовых цепей;
q протоколирование результатов измерений в базу данных.
Разработанная программа поддерживает дружественный интерфейса взаимодействия оператора с измерительно-вычислительным комплексом.
4.1 Общие положения
Хозяйство автоматики, телемеханики и связи играет большую роль в обеспечении безопасного и четкого движения поездов, повышения скорости и пропускной способности дорог, бесперебойной связи между всеми подразделениями железнодорожного транспорта, своевременной передачи информации, указаний и распоряжений. От развития устройств автоматики, телемеханики и связи во многом зависит культура перевозок и эффективное использование подвижного состава и постоянных устройств ряда других отраслей транспортного хозяйства [6].
Расчеты экономической эффективности любого мероприятия основаны на соизмерении затрат с полученными результатами от их внедрения. Экономическая эффективность базируется на параметрах техники, технико-экономических показателях и является обобщающей. Поэтому обоснование вариантов называют технико-экономическими, определяют технико-экономическую эффективность.
Технико-экономическая эффективность характеризуется отношением технического эффекта в виде улучшения технического параметра или качественного показателя к трудовым или стоимостным затратам.
Реализация компьютерного измерительного комплекса вагона-лаборатории железнодорожной автоматики, телемеханики и связи потребует затраты определенных средств на покупку компьютерного и периферийного оборудования, монтаж розеток и т.д., срок окупания которых напрямую зависит от эффективности взаимодействия комплекса с использующим его персоналом. Естественно, что эффективность взаимодействия является следствием широты диапазона охватываемых проблем предлагаемого в системе программного обеспечения. Иначе говоря, при достаточной степени универсальности всего программного комплекса система смогла бы окупить затраты на себя в течении достаточно небольшого срока (несколько лет). Но на создание такого программного обеспечения требуется гораздо больше времени, нежели времени, отведенное на дипломное проектирование, и средств. Но уже на данном (начальном) этапе реализация компьютерного измерительного комплекса вагона-лаборатории позволяет оптимизировать работу вагона-лаборатории в вопросах, касающихся обработки измерительной информации о параметрах кодов автоматической локомотивной сигнализации и рельсовых цепей, оценки измеренных параметров, привязки обработанной измерительной информации к конкретной рельсовой цепи конкретного перегона участка железной дороги, где производились измерения, протоколирования результатов измерений в базу данных, документирования полученных данных и т.д.
Следует еще раз отметить, что использование средств компьютерной техники позволит избавиться от накапливания и хранения информации на бумажных носителях, что уменьшит затраты на покупку расходных материалов. А также даст возможность мгновенно предоставить информацию по интересующему инженера вопросу, как на мониторе компьютера, так и на распечатанном отчете.
4.2 Оценка стоимости разработки программного обеспечения компьютерного измерительного комплекса вагона-лаборатории
Для расчета конечной отпускной цены разработанного программного продукта необходимо выяснить количество рабочих часов, затраченных программистом непосредственно на выполнение разработки.
Количество дней, потраченных на работу составляет: n = 92.
В среднем, количество рабочих часов в день равно: t = 8 ч.
Тогда, общее количество часов, затраченных на разработку:
N = n t = 92 8 = 736 ч.
Для определения фонда оплаты труда (ФОТ), необходимо выяснить такие параметры как оклад инженера-программиста и норму работы в месяц. Оклад инженера-программиста составляет, в месяц: Y = 50000 рублей
Количество рабочих часов в месяц: norma = 168,3 ч.
Следовательно, величина фонда оплаты труда составляет:
FOT = (Y N) / norma = (50000 736) / 168,3 = 218657 рублей.
Хозяйственные расходы (материальные затраты) составляют примерно 15% от ФОТ:
M_Zatr = FOT 0,15 = 218657 0,15 = 32798 рублей.
Отчисления на социальные нужды составляют: соц. Страхование — 35%, фонд занятости — 1%, чрезвычайный налог — 4% от фонда оплаты труда. Тогда, значения отчислений на социальные нужды:
Soc_str = FOT 0,35 = 218657 0,35 = 76530 рублей.
F_Zan = FOT 0,01 = 218657 0,01 = 2186 рублей.
Ch_nal = FOT 0,04 = 218657 0,04 = 8746 рублей.
Тогда себестоимость программного продукта равна сумме фонда оплаты труда и отчислений на социальные нужды:
S_S = FOT + M_Zatr + Soc_str + F_Zan + Ch_nal = 218657 + 32798 + 76530 + 2186 + 8746 = 338917 рублей.
Произведенный продукт реализуется по себестоимости, то есть величина прибыли равна нулю (Pr = 0).
Отпускная цена без налога на добавленную стоимость (НДС) включает следующие налоги: отчисления в дорожный фонд — 1%, целевой сбор — 2,5%, отчисления в республиканский фонд поддержки с/х производителей — 1,5%. Найдем численные значения отчислений:
Dor = (S_S + Pr) 0,01 = (338917 + 0) 0,01 = 3389 рублей.
Sbor = (S_S + Pr) 0,025 = (338917 + 0) 0,025 = 8473 рублей.
S_h = (S_S + Pr) 0,015 = (338917 + 0) 0,015 = 5084 рублей.
Следовательно, отпускная цена без учета НДС:
Cost = S_S + Dor + Sbor + S_h = 338917 + 3389 + 8473 + 5084 = = 355863 рублей.
Налог на добавленную стоимость (НДС) составляет 20%:
NDS = Cost 0,2 = 355863 0,2 = 71173 рублей.
Тогда, с учетом всех отчислений и налогов, конечная отпускная цена разработанного программного продукта составит:
Result = Cost + NDS = 355863 + 71173 = 427036 рублей.
4.3 Выводы
В данной главе были рассмотрены показатели, определяющие экономическую эффективность модернизации системы “Контроль”. Также была произведена оценка стоимости разработки программного обеспечения компьютерного измерительного комплекса вагона-лаборатории.
Пожар считается социальным бедствием, которое приносит не только материальный ущерб, но и человеческие жертвы. Особенно опасен пожар в движущемся поезде, так как возникающие по ходу движения поезда избыточное давление и разрежение приводит к увеличению скорости воздушных потоков в вагоне, способствующему активизации процесса горения. Для противопожарной защиты в конструкцию вагона заложены огнестойкие элементы, установки пожарной сигнализации и автоматического тушения огня. В случае возникновения пожара предусмотрены пути скорейшей эвакуации обслуживающего персонала.
Решение проблемы предотвращения пожара в вагоне осуществляется одновременно по нескольким направлениям [7]. Одним их наиболее эффективных направлений является применение для внутренней отделки, термоизоляции и гидроизоляции вновь строящихся и модернизируемых при капитальном ремонте вагонов материалов негорючих и не выделяющих при высокой температуре токсичных газов. Другим направлением может быть поиск конструктивных решений, исключающих возможность возникновения и распространения открытого огня, а также проникновения дыма и токсичных газов в помещения, где находится обслуживающий персонал.
Третьим направлением является внедрение устройств световой, звуковой или комбинированной сигнализации о возникновении в вагоне очага пожара в сочетании с автоматически или полуавтоматически действующей системой пожаротушения.
5.1 Основные причины возникновения пожаров в вагонах
Пожары в вагонах могут возникнуть вследствие:
1) отступления от требований стандартов на пожарную разделку вытяжных труб, котлов отопления печей, кипятильников, пультов управления электрооборудованием, светильников и другого оборудования;
2) нарушения правил прокладки проводов, особенно при выходе из труб или металлорукавов, а также соединении проводов пайкой или скруткой в непредусмотренных местах;
3) выпуска из ремонта без испытания на правильность функционировании электрических аппаратов, определения выходных параметров систем электроснабжения (первичных и вторичных) и устройств защиты от перенапряжения непосредственно на вагоне;
4) установки аппаратов токовой защиты без проверки на соответствие номинальным данным плавких вставок предохранителей и без испытания автоматических выключателей и магнитных пускателей.
5) отказов в электрической цепи или потребителе электроэнергии с перегрузкой проводов при завышенных номиналах или нетиповых плавких вставках предохранителей, а также неисправном состоянии автоматических выключателей или магнитных пускателей;
6) наличия в защищаемой цепи предохранителей с подгоревшими фибровыми корпусами или без наполнителя;
7) неисправности дугогасящих устройств коммутационных аппаратов, приводящих к выбросу пламени;
8) нарушения и пониженного сопротивления изоляции электрических цепей потребителей и систем электроснабжения, в том числе и источников питания;
9) перенапряжения, возникающего при отказах регуляторов и неисправной защите;
10) подключения к системе электроснабжения бытовых приборов, радиоприемников, магнитофонов и других устройств, не предусмотренных для подключения конструкцией вагона;
11) слабой затяжки контактных соединений, приводящих к чрезмерному их нагреву;
12) неквалифицированного вмешательства в работу электрооборудования вагонов (ремонтные работы, регулировка и др.);
13) нарушения правил пользования отопительными установками, растопки котлов и кипятильников с применением легковоспламеняющихся и горючих жидкостей, без воды или с водой ниже допустимого уровня;
14) хранения около котла, кипятильника, кухонных плит, на электропечах и под ними обтирочных и других горючих материалов;
15) курения в неустановленных местах, провоза легковоспламеняющихся жидкостей, применение открытого огня;
16) удаления шлака и золы при движении поезда;
17) использования для приготовления пищи приборов, не предусмотренных конструкцией вагона;
Причинами пожаров в подвагонном оборудовании могут быть:
1) короткозамкнутые аккумуляторы в аккумуляторной батарее:
2) пониженный уровень электролита в аккумуляторах;
3) пониженное сопротивление изоляции аккумуляторной батареи;
4) повышенный зарядный ток аккумуляторной батареи по причине неисправности блока управления зарядом или ограничителя тока батареи или генератора;
5) неудовлетворительное состояние контактных соединений выводов батарея;
6) несоответствие плавких вставок и предохранителей, установленных в подвагонном высоковольтном ящике;
7) плохое состояние высоковольтных и низковольтных проводов и их изоляции;
8) плохое (неплотное) соединение проводов с аппаратами, приборами;
9) плохое состояние контакторов, реле и других контактных аппаратов;
10) отсутствие дугогасительных камер или неправильная их установка.
5.2 Требования пожарной безопасности при эксплуатации вагона-лаборатории
Так как вагон-лаборатория построен на основе обычного купейного вагона, то к нему применимы требования по пожарной безопасности предъявляемые к обычным пассажирским вагонам. Однако в связи с тем, что в нем находится дополнительная электроаппаратура, то вероятность возникновения пожара возрастает, поэтому обслуживающий персонал должен быть особенно бдительным.
Предупреждение пожаров в вагонах — это общая обязанность всех работников железнодорожного транспорта и в первую очередь работников бригады, обслуживающей поезд. Никакие усилия вагоностроителей и никакие нормативные документы не дадут положительных результатов, если каждый член бригады не будет принимать участия в общей работе по предупреждению пожаров в вагонах.
Вагон должен быть обеспечены комплектом исправных средств пожаротушения. Например, вагон с электроотоплением должен быть оборудован двумя углекислотными огнетушителями, расположенными на специальных кронштейнах и одним пенным в нерабочем тамбуре. Вагон с водяным отоплением должен иметь один углекислотный огнетушитель и один пенный в нерабочем тамбуре.
Огнетушители являются надежными первичными средствами тушения загорания до прибытия пожарных подразделений загорании на подвижном составе. Углекислотные огнетушители предназначены для тушения загорания твердых предметов, а также изоляции проводов электродвигателей, генераторов и других аппаратов, находящихся под напряжением и обесточенных. На железнодорожном транспорте наиболее распространены углекислотные огнетушители типов ОУ-2, ОУ-5, ОУ-6, которые представляют собой стальной баллон с жидкой углекислотой, снабженным специальным вентилем с раструбом. Углекислотный огнетушитель эффективно работает всего в течение 30-50с. Углекислотные огнетушители должны периодически проверяться: весовая — не реже 1 раза в три месяца, а освидетельствование баллонов с гидравлическим испытанием — через пять лет. Запорное и предохранительное устройства углекислотных огнетушителей должны быть опломбированы.
Пенные огнетушители предназначены для тушения всех видов горючих материалов, жидкостей и конструктивных элементов вагонов, кроме электрооборудования, находящегося под напряжением. Пенный огнетушитель типа ОП-5 состоит из металлического корпуса цилиндрической формы, стеклянного стакана с кислотой, крышки с рукояткой и клапанного предохранительного устройства.
Периодическая проверка пенных огнетушителей должна производиться 1 раз в год на качество щелочного и кислотного зарядов. Через каждые три года корпус огнетушителя подвергают гидравлическому испытанию.
Огнетушители без пломб или раструба, с неисправным раструбом или вентилем (маховичком), просроченные проверкой или испытанием, с неисправными ручками и другими деталями подлежат замене.
На членов поездной бригады возлагается ответственность за поддержание противопожарного оборудования в постоянной готовности. Все должны знать места расположения средств борьбы с огнем, порядок своих действий в случае возникновения пожара.
Особое внимание обращается на техническое состояние систем электрооборудования и внутреннего оборудования. Утечек тока на корпус вагона не должно быть, потому что замыкание — одна из распространенных причин пожара в вагонах.
Проверяют соответствие номинала электрических предохранителей току, указанному на распределительном щите или электрической схеме. Применять нетиповые предохранители категорически запрещается. При отключенных автоматических выключателях необходимо выяснить причину их срабатывания.
Степень зарядки аккумуляторной батареи определяется по показаниям вольтметра при нагрузке, подключенной к батарее, не менее 15А, после чего в течение 3 мин нужно следить за показаниями вольтметра. Признаком заряженности аккумулятора является постоянство напряжения на его выводах после включения нагрузки.
Неисправности электрооборудования, выявленные при осмотрах вагона, должны быть устранены до отправления поезда в рейс.
Курить обслуживающему персоналу в вагоне-лаборатории можно только в нерабочем тамбуре. Там должна находиться пепельница для окурков, а на стене вывешена табличка «Место для курения».
Следует помнить, что хранение и сушка дров, тряпок и других предметов около отопительных приборов или приборов электроотопления, и пользование электронагревательными приборами (утюгами, чайниками, электрическими плитками и пр.), так же как хранение, перевозка и применение легковоспламеняющихся жидкостей (керосин, бензин, спирт, краски и т. д.) категорически запрещается. Нельзя применять для освещения служебных помещений свечи и другие источники открытого огня. Кроме того, запрещается использовать временную электропроводку, которая может сорваться с места крепления и вызвать короткое замыкание. Запрещается выбрасывать на перегонах и на станциях в неустановленных местах горячий шлак или золу (при работе котла отопления на твердом топливе).
В пути следования начальнику вагона-лаборатории, электромеханикам, электромонтерам, а также лицам, допущенным к обслуживанию вагона-лаборатории запрещается:
1) включать под нагрузку силовую и осветительную сеть при наличии неисправного электрооборудования, при нагреве аппаратов или отдельных мест на пульте управления, а также оставлять работающее электрооборудование без присмотра;
2) заменять электрические лампы лампами, мощность которых выше установленной Инструкцией завода-изготовителя;
3) заменять сработавшие предохранители, не соответствующие установленному номиналу для данной цепи;
4) включать электроплитки и другие нагревательные приборы и злектропотребители, не предусмотренные электрической схемой вагона;
5) хранить посторонние предметы в нишах с электроаппаратурой, складывать горючие материалы вблизи приборов отопления, электросветильников, газовых горелок и других бытовых приборов, предусмотренных конструкцией вагона;
6) вскрывать кожух, ремонтировать или регулировать электромеханический регулятор на ходу поезда. При обнаружении сработавшего предохранителя в цепи обмотки возбуждения генератора постоянного тока, электромеханик имеет право на остановках вагона снять пломбу, вскрыть кожух и заменить предохранитель типовым, о чем должен быть составлен акт за подписью начальника и электромеханика поезда;
7) эксплуатировать вагон с утечкой тока на корпус вагона;
8) включать потребители электроэнергии вагона без соответствующего контроля за показаниями на приборах (вольтметре, амперметре). Электрообогреватели водоналивных и сливных труб, не имеющие устройств автоматического отключения, включать более, чем на 15-20 мин. Электрообогрев вагона с электроотоплением напряжением 3000 В при ручном режиме включается не более чем на 30-40 мин. (в зависимости от температуры в купе вагона);
9) включать электрокалориферы при неработающей вентиляции и допускать их нагрев выше 28°С по показанию дистанционного термометра;
10) оставлять межвагонные электрические соединения (штепсели, годовки) не убранные в холостые розетки и защитные коробки;
11) эксплуатировать неисправные аккумуляторные батареи и производить их зарядку неустановленным способом;
12) сушить одежду и другие вещи в котельных помещениях, на электрических печах, кухонных плитах, кипятильниках, дизель-генераторных установках и выпускных трубах;
13) оставлять без надзора вагоны.
Запрещается:
1) применять для приготовления пищи и других надобностей керосинки, примусы, спиртовые горелки, газовые приборы, а также утюги, электрические чайники, плитки и другие электробытовые приборы, не предусмотренные конструкцией или модернизацией вагона;
2) отогревать открытым огнем (факелом, раскаленными углями, нагретым в топке металлическим предметом) замороженные трубы водоснабжения, отопления и фановой трубы;
3) применять для освещения открытый огонь (свечи без фонарей, керосиновые, карбидовые лампы и п.т.);
4) курить в неустановленных для этих целей местах. Курить разрешается только в нерабочем тамбуре, оборудованном пепельницами (не менее двух);
5) закрывать переходные тамбурные двери на внутренний замок «секретку” в пути следования поезда;
6) загромождать вещами пути эвакуации (большой коридор, малый коридор, косой коридор, рабочий и нерабочий тамбуры):
7) промывать бензином, керосином и другими легковоспламеняющимися и горючими жидкостями кузова и агрегаты вагонов-дизель-электростанции;
8) ремонтировать электрооборудование при движении вагона, работающих дизель-генераторах и необесточенных цепях.
5.3 Конструктивные противопожарные меры в вагоне
Создать вагон абсолютно негорючим практически невозможно. Поэтому при конструировании вагонов необходимо предусматривать дополнительные меры, которые бы увеличили их огнестойкость (материал пола и перегородки в кузове вагона должны обладать высокой огнестойкостью).
Вентиляционные воздуховоды вагона при пожаре способствуют быстрому распространению пламени по всему вагону, особенно быстро возгорается пыль на внутренней поверхности воздуховода. Процессу горения способствует обильный приток воздуха от работающих вентиляторов. Каналы, по которым проходят системы водяного отопления, водоснабжения и электропроводка, также способствует быстрому распространению пламени. Поэтому конструкция перегородок вагона должна обладать такими свойствами, чтобы пламя не могло быстро распространяться вдоль кузова вагона.
Вентиляция помещений осуществляется принудительно, поэтому систему управления ее работой целесообразно оборудовать автоматическими (действующими от специальных датчиков) и параллельно ручными выключателями, обеспечивающими при необходимости быстрое выключение системы.
Предотвращение пожара в вагоне-лаборатории обеспечивается выполнением требований к конструкции, техническому обслуживанию в эксплуатации и правилам обслуживания систем отопления, вентиляции и электрооборудования.
Например, в местах установки отопительного котла, кипятильника и электрораспределительного щита (шкафа) деревянные детали пропитывают антипиреном и покрывают металлическим листом по асбесту толщиной не менее 5 мм.
На дымовытяжную трубу котла водяного отопления с отдельным расширителем на всем протяжении выше водяной рубашки устанавливают металлический экран с отверстиями для циркуляции воздуха. Расстояние между дымовытяжной трубой и экраном должно быть не менее 25 мм. В крыше вагона дымовытяжная труба проходит через металлический кожух с двойными стенками. Расстояние между экраном и изолированным кожухом должно составлять не менее 50 мм. Конструкции крыши, подверженные горению, вокруг разделки защищают негорючими материалами толщиной 10 мм. Между разделкой и негорючим материалом должен быть зазор 20-25 мм.
Дымовытяжные трубы котлов водяного отопления с совмещенным расширителем должны выводиться через люк в крыше вагона. Размеры люка определяют из условий монтажа котла.
Противопожарные разделки дымовытяжных труб котла, кипятильника и плитки конструктивно должны быть выполнены таким образом, чтобы в условиях эксплуатации нетрудно было проверить их техническое состояние и правильность установки на вагоне. Кроме того, должно быть исключено попадание искр внутрь вагона.
Вентиляционный воздуховод необходимо изготовлять из негорючих материалов. Непосредственно на стенках и внутри воздуховодов монтировать электропровода не допускается, за исключением подводки к аппаратам и приборам, установленным непосредственно внутри воздуховода с соблюдением мероприятий пожарной безопасности, обусловленных в соответствующих стандартах. Для предотвращения перегрева электрокалориферов, их оборудуют специальными устройствами.
Конструкция дефлекторов естественной вентиляции не должна допускать попадание искр внутрь помещения на стоянках и при движении.
Важное место в обеспечении пожарной безопасности имеет состояние ниш для всех распределительных щитов и пускорегулирующей аппаратуры. Поэтому они должны быть изолированы от сгораемых конструкций негорючими материалами. Конструкция ниши распределительных щитов и пускорегулирующей аппаратуры должна предотвращать и позволять легко выполнять осмотр, проверку и ремонт электрооборудования.
Сгораемые конструкции, на которых располагаются электронагревательные приборы (например электропечи), должны быть изолированы металлическим листом толщиной не менее 0,5 мм по негорючему изоляционному материалу толщиной 5 мм. Для светильников с лампами накаливания толщина изоляции должна быть не менее 2,8 мм (допускается без металлического листа).
Провода и кабели не должны распространять горение. Кроме того, места прохода труб и металлорукавов через перегородки, установки штепсельных розеток, выключателей, светильников с лампами накаливания и другой аппаратуры в зависимости от конструкции, изолируют от контакта со сгораемыми конструкциями вагона негорючими материалами толщиной 2,8-3 мм.
Прокладка проводов электрических цепей напряжением до 1000 В и свыше 1000 В в одних и тех же трубах и коробах не допускается. Соединение проводов разрешено выполнять только на зажимах соединительных планок и аппаратов, а пайкой — только при наличии паяных соединений к аппаратам. Наращивание проводов пайкой не допускается.
Большое внимание уделяется качеству заземления кузова вагона. Площадь сечения заземляющих перемычек между кузовом и рамой тележки и между рамой тележки и корпусом буксы должно быть не менее 16мм2 каждое, а сопротивление каждого переходного контакта защитного заземления должно быть не более 0,01Ом.
Температура на поверхности защитных наружных кожухов электрических аппаратов и приборов не должна превышать 60°С.
Большое значение в обеспечении пожарной безопасности имеет техническое состояние изоляции вагонного электрического оборудования и проводов. Об этом судят по сопротивлению проводов относительно металлических частей кузова. Требованиями пожарной безопасности введены нормативы для всех электрических цепей вагонов, работающих под напряжением ниже 1000В. Нормы сопротивления изоляции установлены дифференцированными в зависимости от напряжения в цепи и относительной влажности воздуха и его температуры в зоне измерений.
Сопротивление изоляции измеряют при всех видах технического обслуживания, ремонта вагонов и в пунктах формирования составов. Для постоянного контроля за состоянием изоляции электрооборудования все служебные отделения вагонов оборудованы световой сигнализацией о замыкании на корпус вагона плюсовых и минусовых низковольтных цепей в процессе эксплуатации. Контрольные лампы этой сигнализации расположены на передней панели электрораспределительного шкафа. Одна лампа сигнализирует о состоянии изоляции плюсовых цепей вагона, а другая минусовых цепей.
При отсутствии замыкания на корпус вагона обе лампы горят одинаково — в полнакала. В случае замыкания на корпус вагона плюсовой или минусовой цепи, соответствующая лампа цепи загорается полным накалом, а другая лампа гаснет. Тогда необходимо срочно выявить причину срабатывания сигнализации «замыкания на корпус» и устранить ее. При замыкании на корпус вагона плюсовых цепей и невозможности немедленного устранения неисправности следует отключить источники электроэнергии путем снятия предохранителей на электрораспределительном щите и в подвагонном аккумуляторном ящике.
Отправление поезда при наличии в вагоне-лаборатории замыкания на корпус или при наличии утечки тока в любой цепи вагона запрещено.
Для ограничения распространения горения по вагону, локализации очага загорания и принятия своевременных мер по его тушению в вагоне установлены огнезадерживающие перегородки между служебным отделением и первым купе.
К конструкции этой перегородки предъявляются строго регламентированные технические требования: при испытании на огнестойкость перегородки должны препятствовать прохождению пламени в соседнее помещение в течение не менее 30 мин; в течение 15 мин средняя температура необогреваемой стороны перегородки не должна превышать первоначальную более чем на 139°С, а наибольшая температура в отдельных точках не должна превышать 225°С. Исключение составляют металлические детали (болты, втулки, трубы и т. д.).
Конструкция дверей и дверных рам в перегородке должна быть также огнестойкой и не проницаемой для пламени, как и сама перегородка. В местах прохода через огнезадерживающие перегородки труб, отопления, вентиляционного канала, кабельных коробов закрытия отверстий также должны удовлетворять требованиям пожаробезопасности. Огнезадерживающие перегородки могут быть выполнены из негорючих материалов и комбинированные, но они должны отвечать указанным выше требованиям.
В комплексе мероприятий противопожарной защиты вагона-лаборатории основное внимание уделяется вопросам обеспечения быстрой эвакуации людей из загоревшейся части вагона в безопасную зону или наружу. Для этого вагоны оборудуют окнами с аварийными выходами. Количество аварийных выходов должно обеспечивать безопасную эвакуацию людей за время до блокировки аварийных выходов опасными факторами пожара, но не менее двух. На перегородках, напротив третьего и шестого купе установлены стоп-краны для экстренной остановки поезда в случае возникновения пожара в вагоне.
Большое значение в предотвращении пожаров и борьбе с ними имеет четко поставленная информация и обучение с помощью наглядных средств персонала, обслуживающего вагон-лабораторию. Для этого на видных местах должны быть вывешены инструкции по обеспечению противопожарной безопасности в вагоне с указанием мест расположения средств тушения пожара и схем эвакуации людей.
Следует помнить, что эвакуация людей должна всегда готовиться заранее до возникновения экстремальных ситуаций. Успех эвакуации людей определяется четкой организацией людских потоков и координацией действий отдельных лиц со стороны персонала, обслуживающего поезд. Для этого в случае возникновения пожара необходимо: быстро установить место расположения очага пожара и оценить масштаб загорания. При этом следует помнить, что эта задача усложняется в ночное время; подать звуковой сигнал, чтобы люди немедленно покинули опасную часть вагона; принять меры к экстренной остановке поезда.
Эвакуацию людей необходимо осуществлять в возможно короткие сроки, так как максимальное время безопасного пребывания человека в атмосфере дыма и горячих газов составляет не более 90с.
5.4 Выводы
В пятой главе были рассмотрены причины возникновения пожаров, требования пожарной безопасности в вагоне-лаборатории, конструктивные меры, предотвращающие возникновение и распространения пожаров. Была составлен план эвакуации людей при пожаре.
На основании этого можно сделать вывод, что пожар в движущемся составе — это бедствие, которое может повлечь за собой человеческие жертвы и материальные убытки, поэтому к вагону-лаборатории должны быть применены еще более жесткие меры пожарной безопасности, так как в нем находится дополнительная электроаппаратура, являющаяся основным из источников пожаров.
В ходе выполнения дипломного проекта была разработано программное обеспечение компьютерного измерительного комплекса вагона-лаборатории железнодорожной автоматики, телемеханики и связи.
Достигнута основная цель, поставленная в задании — разработана система позволяющая повысить достоверность и оперативность информации о некорректной работе устройств АЛСН и рельсовых цепей, получаемой из вагона-лаборатории, сократить затраты труда на обработку и анализ этой информации. Программа позволяет:
q вводить в ПЭВМ из аппаратуры “Контроль” измерительной информации о параметрах кодов автоматической локомотивной сигнализации и рельсовых цепей;
q обрабатывать эту информацию, осуществлять ее раскодирование, оценку измеренных параметров;
q привязывать обработанную измерительной информации к конкретной рельсовой цепи конкретного перегона участка железной дороги, где производились измерения, путем ведения базы данных рельсовых цепей;
q протоколировать результаты измерений в базу данных.
В первой части дипломного проекта были рассмотрены измерительные информационные системы, их обобщенные алгоритмы функционирования и принципы построения. Был произведен анализ информационно-измерительных комплексов. Особое внимание уделено применению персональных компьютеров как основного средства построения измерительных комплексов.
Во второй части дипломного проекта были рассмотрены принципы функционирования автоматической локомотивной сигнализации, детально проанализирована существующая измерительная аппаратура вагона-лаборатории, рассмотрены функциональные характеристики системы “Контроль”, принципы взаимодействия этой системы с персональным компьютером.
В третьей части дипломного проекта была произведена разработка программного обеспечения измерительного комплекса вагона-лаборатории автоматики, телемеханики и связи.
В дипломном проекте были освещены экономические аспекты реализации системы, а также рассмотрены вопросы, связанные с обеспечением пожарной безопасности вагона-лаборатории.
Алиев Т.М., Тер-Хачатуров А.А. Измерительная техника. — Москва: “Высшая школа”, 1991. — 384 с.
Скляров В.А. Язык C++ и объектно-ориентированное программирование. — Минск: Вышэйшая школа, 1997. — 478 с.
Шамис В.А. C++ Builder 3. Техника визуального программирования. — М.: Нолидж, 1998. — 512 с.
Создание оригинальных компонент в среде Delphi: Пер. с англ. / Рэй Конопка. — К.: НИИПФ — «ДиаСофт Лтд.», 1996. — 512 с.
Щелкунов Н.Н., Дианов А.П. Микропроцессорные средства и системы. М.: Радио и связь, 1989. 287с.
Беленький М.Н., Дмитриев В.А. Экономика железнодорожного транспорта — М.: издательство «Транспорт», 1975. -314 с.: ил.
Александров Ю.С. Пожарная безопасность вагонов. М.: Транспорт, 1988. 52с.
Архангельский А.Я. Программирование в C++ Builder 4. M.:Бином, 2000. 1082с.
Шилдт Г. Теория и практика C++: пер. с англ. — СПб: BHV — Санкт-Петербург, 1996. — 416 с.
Касаткин А.И. Системное программирование. Минск: Высшая школа, 1993. 300с.
«ЕСКД. Общие требования к текстовым документам» (ГОСТ 2.105-9
Шатило С.Н., Рудницкий А.М. Методические указания к выполнению раздела “Охрана труда” в дипломных проектах. — Гомель: БелИИЖТ, 1990. — 41с.
Алгоритм функционирования программного модуля SerialLink
Алгоритм функционирования программного модуля RC
Листинг программы
Файл : GlobalVariables.h
//—————————————————————————
#ifndef GlobalVariablesH
#define GlobalVariablesH
extern int CurNumSite, CurNumFrictSite, CurNumJunction;
extern int Buffer[16];
extern float Imp1, Imp2, Imp3;
extern float Int1, Int2, Int3;
extern float Cycle;
extern float InterraptCode;
extern int Coordinate;
extern int Frequency;
extern int Velocity;
extern float Current;
extern AnsiString IsolJunction;
extern AnsiString CodeType;
extern bool ExtendedProtocol;
//—————————————————————————
#endif
Файл : GlobalVariables.cpp
//—————————————————————————
#include <vcl.h>
#pragma hdrstop
#include «GlobalVariables.h»
int CurNumSite = 2, CurNumFrictSite = 1, CurNumJunction = 1;
int Buffer[16];
float Imp1 = 0.14, Imp2 = 0.13, Imp3 = 0.16;
float Int1 = 0.18, Int2 = 0.15, Int3 = 0.78;
float Cycle = 1.59;
float InterraptCode = 1.46;
int Coordinate = 123;
int Frequency = 25;
int Velocity = 45;
float Current = 4.6;
AnsiString IsolJunction = «нет»;
AnsiString CodeType = «З»;
bool ExtendedProtocol = true;
//—————————————————————————
#pragma package(smart_init)
Файл :Sites.h
//—————————————————————————
#ifndef SitesH
#define SitesH
//—————————————————————————
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Db.hpp>
#include <DBGrids.hpp>
#include <DBTables.hpp>
#include <Grids.hpp>
#include <DBCtrls.hpp>
#include <ExtCtrls.hpp>
#include <Mask.hpp>
//—————————————————————————
class TSitesForm : public TForm
__published: // IDE-managed Components
TDBGrid *DBGrid1;
TButton *Button1;
TEdit *NumSite;
TEdit *NameSite;
TGroupBox *GroupBox1;
TButton *Button2;
TButton *Button3;
TGroupBox *GroupBox2;
TButton *Button4;
void __fastcall DBGrid1CellClick(TColumn *Column);
void __fastcall DBGrid1Enter(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TSitesForm(TComponent* Owner);
//—————————————————————————
extern PACKAGE TSitesForm *SitesForm;
//—————————————————————————
#endif
Файл :Sites.cpp
//—————————————————————————
#include <vcl.h>
#pragma hdrstop
#include «Sites.h»
#include «DataModule.h»
//—————————————————————————
#pragma package(smart_init)
#pragma resource «*.dfm»
TSitesForm *SitesForm;
//—————————————————————————
__fastcall TSitesForm::TSitesForm(TComponent* Owner)
: TForm(Owner)
//—————————————————————————
void __fastcall TSitesForm::DBGrid1CellClick(TColumn *Column)
NumSite->Text = DM->SitesTable->FieldByName(«NumSite»)->AsString;
NameSite->Text = DM->SitesTable->FieldByName(«NameSite»)->Value;
//—————————————————————————
void __fastcall TSitesForm::DBGrid1Enter(TObject *Sender)
NumSite->Text = DM->SitesTable->FieldByName(«NumSite»)->AsString;
NameSite->Text = DM->SitesTable->FieldByName(«NameSite»)->Value;
//—————————————————————————
void __fastcall TSitesForm::Button1Click(TObject *Sender)
DM->SitesTable->Append();
DM->SitesTable->FieldByName(«NumSite»)->AsString = NumSite->Text;
DM->SitesTable->FieldByName(«NameSite»)->AsString = NameSite->Text;
//—————————————————————————
void __fastcall TSitesForm::Button2Click(TObject *Sender)
DM->SitesTable->Delete();
DBGrid1Enter(this);
//—————————————————————————
void __fastcall TSitesForm::Button3Click(TObject *Sender)
DM->SitesTable->Edit();
DM->SitesTable->FieldByName(«NumSite»)->AsString = NumSite->Text;
DM->SitesTable->FieldByName(«NameSite»)->AsString = NameSite->Text;
//—————————————————————————
Файл :FrictSites.h
//—————————————————————————
#ifndef FrictSitesH
#define FrictSitesH
//—————————————————————————
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Db.hpp>
#include <DBGrids.hpp>
#include <DBTables.hpp>
#include <Grids.hpp>
#include <DBCtrls.hpp>
//—————————————————————————
class TFrictSitesForm : public TForm
__published: // IDE-managed Components
TGroupBox *GroupBox1;
TButton *Button1;
TEdit *NumFrictSite;
TEdit *NameFrictSite;
TButton *Button2;
TButton *Button3;
TGroupBox *GroupBox2;
TStaticText *StaticText1;
TDBGrid *DBGrid1;
TDBLookupComboBox *DBLookupComboBox1;
TButton *Button4;
void __fastcall DBGrid1CellClick(TColumn *Column);
void __fastcall DBGrid1Enter(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall DBLookupComboBox1CloseUp(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TFrictSitesForm(TComponent* Owner);
//—————————————————————————
extern PACKAGE TFrictSitesForm *FrictSitesForm;
//—————————————————————————
#endif
Файл :FrictSites.cpp
//—————————————————————————
#include <vcl.h>
#pragma hdrstop
#include «FrictSites.h»
#include «Sites.h»
#include «DataModule.h»
//—————————————————————————
#pragma package(smart_init)
#pragma resource «*.dfm»
TFrictSitesForm *FrictSitesForm;
//—————————————————————————
__fastcall TFrictSitesForm::TFrictSitesForm(TComponent* Owner)
: TForm(Owner)
//—————————————————————————
void __fastcall TFrictSitesForm::DBGrid1CellClick(TColumn *Column)
NumFrictSite->Text = DM->FrictSitesTable->FieldByName («NumFrictSite»)->AsString;
NameFrictSite->Text = DM->FrictSitesTable->FieldByName («NameFrictSite»)->Value;
//—————————————————————————
void __fastcall TFrictSitesForm::DBGrid1Enter(TObject *Sender)
NumFrictSite->Text = DM->FrictSitesTable->FieldByName («NumFrictSite»)->AsString;
NameFrictSite->Text = DM->FrictSitesTable->FieldByName («NameFrictSite»)->Value;
//—————————————————————————
void __fastcall TFrictSitesForm::FormCreate(TObject *Sender)
DM->SitesTable->Active = true;
DM->SitesTable->First();
// ListSites->Clear();
while(!DM->SitesTable->Eof)
// ListSites->Items->Add(DM->SitesTable->FieldByName(«NameSite»)->AsString);
DM->SitesTable->Next();
// ListSites->ItemIndex = 0;
DM->SitesTable->First();
//—————————————————————————
void __fastcall TFrictSitesForm::DBLookupComboBox1CloseUp(TObject *Sender)
DBGrid1->Visible = true;
DBGrid1->SetFocus();
//—————————————————————————
void __fastcall TFrictSitesForm::Button1Click(TObject *Sender)
DM->SitesTable->Edit();
DM->FrictSitesTable->Append();
DM->FrictSitesTable->FieldByName(«NumSite»)->Value = DM-> SitesTable->FieldByName(«NumSite»)->Value;
DM->FrictSitesTable->FieldByName(«NumFrictSite»)->AsString = NumFrictSite->Text;
DM->FrictSitesTable->FieldByName(«NameFrictSite»)->AsString = NameFrictSite->Text;
//—————————————————————————
void __fastcall TFrictSitesForm::Button2Click(TObject *Sender)
DM->FrictSitesTable->Delete();
DBGrid1Enter(this);
//—————————————————————————
void __fastcall TFrictSitesForm::Button3Click(TObject *Sender)
DM->FrictSitesTable->Edit();
DM->FrictSitesTable->FieldByName(«NumFrictSite»)->AsString = NumFrictSite->Text;
DM->FrictSitesTable->FieldByName(«NameFrictSite»)->AsString = NameFrictSite->Text;
//—————————————————————————
Файл :RCs.h
//—————————————————————————
#ifndef RCH
#define RCH
//—————————————————————————
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Db.hpp>
#include <DBGrids.hpp>
#include <DBTables.hpp>
#include <Grids.hpp>
#include <Menus.hpp>
#include <ExtCtrls.hpp>
//—————————————————————————
class TMainForm : public TForm
__published: // IDE-managed Components
TMainMenu *MainMenu1;
TMenuItem *N1;
TMenuItem *N2;
TMenuItem *N3;
TMenuItem *N4;
TMenuItem *N5;
TBevel *Bevel1;
TMenuItem *N6;
TStaticText *StaticText2;
TStaticText *TSite;
TStaticText *StaticText4;
TStaticText *TFrictSite;
TGroupBox *GroupBox1;
TStaticText *StaticText1;
TStaticText *TRC;
TGroupBox *GroupBox2;
TStaticText *StaticText3;
TStaticText *StaticText5;
TStaticText *StaticText6;
TStaticText *TImp1;
TStaticText *TImp2;
TStaticText *TImp3;
TStaticText *StaticText7;
TStaticText *StaticText8;
TStaticText *StaticText9;
TStaticText *StaticText10;
TStaticText *StaticText11;
TStaticText *StaticText12;
TStaticText *TInt1;
TStaticText *TInt2;
TStaticText *TInt3;
TStaticText *StaticText13;
TStaticText *StaticText14;
TStaticText *StaticText15;
TStaticText *StaticText16;
TStaticText *TCycle;
TStaticText *StaticText18;
TStaticText *StaticText17;
TStaticText *StaticText19;
TStaticText *TInterraptCode;
TStaticText *StaticText20;
TStaticText *TFrequency;
TStaticText *StaticText22;
TStaticText *StaticText21;
TStaticText *StaticText23;
TStaticText *TVelocity;
TStaticText *StaticText24;
TStaticText *StaticText25;
TStaticText *TCoordinate;
TStaticText *StaticText27;
TStaticText *TCodeType;
TStaticText *StaticText28;
TStaticText *TCurrent;
TStaticText *StaticText30;
TStaticText *StaticText29;
TStaticText *TIsolJunction;
TTimer *MyTimer;
TMenuItem *N7;
TMenuItem *N8;
TMenuItem *N9;
void __fastcall N5Click(TObject *Sender);
void __fastcall N2Click(TObject *Sender);
void __fastcall N3Click(TObject *Sender);
void __fastcall N4Click(TObject *Sender);
void __fastcall N6Click(TObject *Sender);
void __fastcall FormActivate(TObject *Sender);
void __fastcall MyTimerTimer(TObject *Sender);
void __fastcall N8Click(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall N9Click(TObject *Sender);
private: // User declarations
public: // User declarations
void __fastcall ShowSite(void);
__fastcall TMainForm(TComponent* Owner);
//—————————————————————————
extern PACKAGE TMainForm *MainForm;
//—————————————————————————
#endif
Файл :RCs.cpp
//—————————————————————————
#include <vcl.h>
#pragma hdrstop
#include «RC.h»
#include «Sites.h»
#include «FrictSites.h»
#include «RCs.h»
#include «KPT.h»
#include «GlobalVariables.h»
#include «DataModule.h»
#include «SerialLink.h»
#include «Report.h»
SerialLink *MyLink;
//—————————————————————————
#pragma package(smart_init)
#pragma resource «*.dfm»
TMainForm *MainForm;
//—————————————————————————
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
MyLink = new SerialLink(false);
//—————————————————————————
void __fastcall TMainForm::N5Click(TObject *Sender)
MainForm->Close();
//—————————————————————————
void __fastcall TMainForm::N2Click(TObject *Sender)
SitesForm->ShowModal();
//—————————————————————————
void __fastcall TMainForm::N3Click(TObject *Sender)
FrictSitesForm->ShowModal();
//—————————————————————————
void __fastcall TMainForm::N4Click(TObject *Sender)
RCForm->ShowModal();
//—————————————————————————
void __fastcall TMainForm::N6Click(TObject *Sender)
KPTForm->ShowModal();
//—————————————————————————
void __fastcall TMainForm::ShowSite(void)
DM->SitesTable->Active = true;
DM->SitesTable->First();
while(DM->SitesTable->FieldByName(«NumSite»)->Value!=CurNumSite)
DM->SitesTable->Next();
MainForm->TSite->Caption = AnsiString(«(«)+IntToStr(CurNumSite)+ AnsiString(«) «)+DM->SitesTable->FieldByName(«NameSite»)->AsString;
DM->FrictSitesTable->Active = true;
DM->FrictSitesTable->First();
while((DM->FrictSitesTable->FieldByName(«NumSite»)->Value!=CurNumSite)||(DM->FrictSitesTable->FieldByName(«NumFrictSite»)->Value!=CurNumFrictSite))
DM->FrictSitesTable->Next();
MainForm->TFrictSite->Caption = AnsiString(«(«)+IntToStr (CurNumFrictSite)+AnsiString(«) «)+DM->FrictSitesTable->FieldByName («NameFrictSite»)->AsString;
DM->RCTable->Active = true;
/* DM->RCTable->First();
while((DM->RCTable->FieldByName(«NumSite»)->Value!=CurNumSite)||(DM->RCTable->FieldByName(«NumFrictSite»)->Value!=CurNumFrictSite)||(DM->RCTable->FieldByName(«NumJunction»)->Value!=CurNumJunction))
DM->RCTable->Next();
DM->RCTable->IndexFieldNames = «NumSite;NumFrictSite; NumJunction»;
DM->RCTable->FindNearest(OPENARRAY(TVarRec,(CurNumSite, CurNumFrictSite, CurNumJunction)));
DM->KPTTable->Active = true;
DM->KPTTable->First();
while(DM->KPTTable->FieldByName(«NumKPT»)->Value!=DM->RCTable->FieldByName(«NumKPT»)->Value)
DM->KPTTable->Next();
MainForm->TRC->Caption = AnsiString(» Стык №»)+IntToStr (CurNumJunction)+AnsiString(» Светофор «)+DM->RCTable->FieldByName («NameSignal»)->Value+AnsiString(«/»)+DM->RCTable->FieldByName(«NumTranslation»)->AsString + AnsiString(» Тип оборудования: «) + DM->KPTTable->FieldByName(«NameKPT»)->Value;
DM->KPTTable->First();
DM->RCTable->First();
void __fastcall TMainForm::FormActivate(TObject *Sender)
ShowSite();
//—————————————————————————
void __fastcall TMainForm::MyTimerTimer(TObject *Sender)
TImp1->Caption = FloatToStrF(Imp1,ffGeneral,2,0);
TImp2->Caption = FloatToStrF(Imp2,ffGeneral,2,0);
TImp3->Caption = FloatToStrF(Imp3,ffGeneral,2,0);
TInt1->Caption = FloatToStrF(Int1,ffGeneral,2,0);
TInt2->Caption = FloatToStrF(Int2,ffGeneral,2,0);
TInt3->Caption = FloatToStrF(Int3,ffGeneral,2,0);
TFrequency->Caption = IntToStr(Frequency);
TVelocity->Caption = IntToStr(Velocity);
TCoordinate->Caption = IntToStr(Coordinate);
TCodeType->Caption = CodeType;
TCurrent->Caption = FloatToStrF(Current,ffGeneral,1,0);
TCycle->Caption = FloatToStrF(Cycle,ffGeneral,2,0);
TInterraptCode->Caption = FloatToStrF(InterraptCode,ffGeneral,2,0);
TIsolJunction->Caption = IsolJunction;
//—————————————————————————
void __fastcall TMainForm::N8Click(TObject *Sender)
if(N8->Checked)
ExtendedProtocol = false;
N8->Checked = false;
else
ExtendedProtocol = true;
N8->Checked = true;
//—————————————————————————
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
MyLink->Terminate();
MyLink->WaitFor();
// delete MyLink;
//—————————————————————————
void __fastcall TMainForm::N9Click(TObject *Sender)
ReportForm->ShowModal();
//—————————————————————————
Файл :KPT.h
//—————————————————————————
#ifndef KPTH
#define KPTH
//—————————————————————————
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <DBGrids.hpp>
#include <Grids.hpp>
#include <ExtCtrls.hpp>
//—————————————————————————
class TKPTForm : public TForm
__published: // IDE-managed Components
TGroupBox *GroupBox2;
TGroupBox *GroupBox1;
TDBGrid *DBGrid1;
TButton *Button1;
TEdit *NumKPT;
TEdit *NameKPT;
TButton *Button2;
TButton *Button3;
TButton *Button4;
TPanel *Panel1;
TPanel *Panel2;
TEdit *MinRY;
TEdit *MaxRY;
TEdit *MinY;
TEdit *MaxY;
TEdit *MinG;
TEdit *MaxG;
TEdit *MinIntY;
TEdit *MaxIntY;
TEdit *MinIntG;
TEdit *MaxIntG;
void __fastcall DBGrid1CellClick(TColumn *Column);
void __fastcall DBGrid1Enter(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TKPTForm(TComponent* Owner);
//—————————————————————————
extern PACKAGE TKPTForm *KPTForm;
//—————————————————————————
#endif
Файл :KPT.cpp
//—————————————————————————
#include <vcl.h>
#pragma hdrstop
#include «KPT.h»
#include «DataModule.h»
//—————————————————————————
#pragma package(smart_init)
#pragma resource «*.dfm»
TKPTForm *KPTForm;
//—————————————————————————
__fastcall TKPTForm::TKPTForm(TComponent* Owner)
: TForm(Owner)
//—————————————————————————
void __fastcall TKPTForm::DBGrid1CellClick(TColumn *Column)
NumKPT->Text = DM->KPTTable->FieldByName(«NumKPT»)->AsString;
NameKPT->Text = DM->KPTTable->FieldByName(«NameKPT»)->Value;
MinRY->Text = DM->KPTTable->FieldByName(«MinRY»)->Value;
MaxRY->Text = DM->KPTTable->FieldByName(«MaxRY»)->Value;
MinY->Text = DM->KPTTable->FieldByName(«MinY»)->Value;
MaxY->Text = DM->KPTTable->FieldByName(«MaxY»)->Value;
MinG->Text = DM->KPTTable->FieldByName(«MinG»)->Value;
MaxG->Text = DM->KPTTable->FieldByName(«MaxG»)->Value;
MinIntY->Text = DM->KPTTable->FieldByName(«MinIntY»)->Value;
MaxIntY->Text = DM->KPTTable->FieldByName(«MaxIntY»)->Value;
MinIntG->Text = DM->KPTTable->FieldByName(«MinIntG»)->Value;
MaxIntG->Text = DM->KPTTable->FieldByName(«MaxIntG»)->Value;
//—————————————————————————
void __fastcall TKPTForm::DBGrid1Enter(TObject *Sender)
NumKPT->Text = DM->KPTTable->FieldByName(«NumKPT»)->AsString;
NameKPT->Text = DM->KPTTable->FieldByName(«NameKPT»)->Value;
MinRY->Text = DM->KPTTable->FieldByName(«MinRY»)->Value;
MaxRY->Text = DM->KPTTable->FieldByName(«MaxRY»)->Value;
MinY->Text = DM->KPTTable->FieldByName(«MinY»)->Value;
MaxY->Text = DM->KPTTable->FieldByName(«MaxY»)->Value;
MinG->Text = DM->KPTTable->FieldByName(«MinG»)->Value;
MaxG->Text = DM->KPTTable->FieldByName(«MaxG»)->Value;
MinIntY->Text = DM->KPTTable->FieldByName(«MinIntY»)->Value;
MaxIntY->Text = DM->KPTTable->FieldByName(«MaxIntY»)->Value;
MinIntG->Text = DM->KPTTable->FieldByName(«MinIntG»)->Value;
MaxIntG->Text = DM->KPTTable->FieldByName(«MaxIntG»)->Value;
//—————————————————————————
void __fastcall TKPTForm::Button1Click(TObject *Sender)
DM->KPTTable->Edit();
DM->KPTTable->Append();
DM->KPTTable->FieldByName(«NumKPT»)->Value = NumKPT->Text;
DM->KPTTable->FieldByName(«NameKPT»)->Value = NameKPT->Text;
DM->KPTTable->FieldByName(«MinRY»)->Value = MinRY->Text;
DM->KPTTable->FieldByName(«MaxRY»)->Value = MaxRY->Text;
DM->KPTTable->FieldByName(«MinY»)->Value = MinY->Text;
DM->KPTTable->FieldByName(«MaxY»)->Value = MaxY->Text;
DM->KPTTable->FieldByName(«MinG»)->Value = MinG->Text;
DM->KPTTable->FieldByName(«MaxG»)->Value = MaxG->Text;
DM->KPTTable->FieldByName(«MinIntY»)->Value = MinIntY->Text;
DM->KPTTable->FieldByName(«MaxIntY»)->Value = MaxIntY->Text;
DM->KPTTable->FieldByName(«MinIntG»)->Value = MinIntG->Text;
DM->KPTTable->FieldByName(«MaxIntG»)->Value = MaxIntG->Text;
//—————————————————————————
void __fastcall TKPTForm::Button2Click(TObject *Sender)
DM->KPTTable->Delete();
DBGrid1Enter(this);
//—————————————————————————
void __fastcall TKPTForm::Button3Click(TObject *Sender)
DM->KPTTable->Edit();
DM->KPTTable->FieldByName(«NumKPT»)->Value = NumKPT->Text;
DM->KPTTable->FieldByName(«NameKPT»)->Value = NameKPT->Text;
DM->KPTTable->FieldByName(«MinRY»)->Value = MinRY->Text;
DM->KPTTable->FieldByName(«MaxRY»)->Value = MaxRY->Text;
DM->KPTTable->FieldByName(«MinY»)->Value = MinY->Text;
DM->KPTTable->FieldByName(«MaxY»)->Value = MaxY->Text;
DM->KPTTable->FieldByName(«MinG»)->Value = MinG->Text;
DM->KPTTable->FieldByName(«MaxG»)->Value = MaxG->Text;
DM->KPTTable->FieldByName(«MinIntY»)->Value = MinIntY->Text;
DM->KPTTable->FieldByName(«MaxIntY»)->Value = MaxIntY->Text;
DM->KPTTable->FieldByName(«MinIntG»)->Value = MinIntG->Text;
DM->KPTTable->FieldByName(«MaxIntG»)->Value = MaxIntG->Text;
//—————————————————————————
Файл :DataModule.h
//—————————————————————————
#ifndef DataModuleH
#define DataModuleH
//—————————————————————————
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Db.hpp>
#include <DBTables.hpp>
//—————————————————————————
class TDM : public TDataModule
__published: // IDE-managed Components
TTable *FrictSitesTable;
TSmallintField *FrictSitesTableNumFrictSite;
TStringField *FrictSitesTableNameFrictSite;
TDataSource *DSFrictSites;
TTable *SitesTable;
TSmallintField *SitesTableNumSite;
TStringField *SitesTableNameSite;
TDataSource *DSSites;
TTable *RCTable;
TDataSource *DSRC;
TSmallintField *RCTableNumSite;
TSmallintField *RCTableNumFrictSite;
TSmallintField *RCTableNumJunction;
TStringField *RCTableNameSignal;
TSmallintField *RCTableNumTranslation;
TSmallintField *FrictSitesTableNumSite;
TTable *KPTTable;
TDataSource *DSKPT;
TSmallintField *KPTTableNumKPT;
TStringField *KPTTableNameKPT;
TFloatField *KPTTableMinRY;
TFloatField *KPTTableMaxRY;
TFloatField *KPTTableMinY;
TFloatField *KPTTableMaxY;
TFloatField *KPTTableMinG;
TFloatField *KPTTableMaxG;
TFloatField *KPTTableMinIntY;
TFloatField *KPTTableMaxIntY;
TFloatField *KPTTableMinIntG;
TFloatField *KPTTableMaxIntG;
TSmallintField *RCTableNumKPT;
TStringField *RCTableKPT;
TDataSource *DSReport;
TTable *ReportTable;
TDateField *ReportTableDate;
TTimeField *ReportTableTime;
TStringField *ReportTableNameSite;
TStringField *ReportTableNameFrictSite;
TSmallintField *ReportTableNumJunction;
TStringField *ReportTableNameSignal;
TSmallintField *ReportTableNumTranslation;
TSmallintField *ReportTableRCLength;
TFloatField *ReportTableIBeg;
TFloatField *ReportTableIEnd;
TStringField *ReportTableCode;
TFloatField *ReportTableImp1;
TFloatField *ReportTableInt1;
TFloatField *ReportTableImp2;
TFloatField *ReportTableInt2;
TFloatField *ReportTableImp3;
TFloatField *ReportTableInt3;
TFloatField *ReportTableCycle;
TSmallintField *ReportTableVelocity;
TStringField *ReportTableNamKPT;
TStringField *ReportTableComments;
private: // User declarations
public: // User declarations
__fastcall TDM(TComponent* Owner);
//—————————————————————————
extern PACKAGE TDM *DM;
//—————————————————————————
#endif
Файл :DataModule.cpp
//—————————————————————————
#include <vcl.h>
#pragma hdrstop
#include «DataModule.h»
#include «RCs.h»
//—————————————————————————
#pragma package(smart_init)
#pragma resource «*.dfm»
TDM *DM;
//—————————————————————————
__fastcall TDM::TDM(TComponent* Owner)
: TDataModule(Owner)
//—————————————————————————
Файл :RC.h
//—————————————————————————
#ifndef RCH
#define RCH
//—————————————————————————
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Db.hpp>
#include <DBGrids.hpp>
#include <DBTables.hpp>
#include <Grids.hpp>
#include <Menus.hpp>
#include <ExtCtrls.hpp>
//—————————————————————————
class TMainForm : public TForm
__published: // IDE-managed Components
TMainMenu *MainMenu1;
TMenuItem *N1;
TMenuItem *N2;
TMenuItem *N3;
TMenuItem *N4;
TMenuItem *N5;
TBevel *Bevel1;
TMenuItem *N6;
TStaticText *StaticText2;
TStaticText *TSite;
TStaticText *StaticText4;
TStaticText *TFrictSite;
TGroupBox *GroupBox1;
TStaticText *StaticText1;
TStaticText *TRC;
TGroupBox *GroupBox2;
TStaticText *StaticText3;
TStaticText *StaticText5;
TStaticText *StaticText6;
TStaticText *TImp1;
TStaticText *TImp2;
TStaticText *TImp3;
TStaticText *StaticText7;
TStaticText *StaticText8;
TStaticText *StaticText9;
TStaticText *StaticText10;
TStaticText *StaticText11;
TStaticText *StaticText12;
TStaticText *TInt1;
TStaticText *TInt2;
TStaticText *TInt3;
TStaticText *StaticText13;
TStaticText *StaticText14;
TStaticText *StaticText15;
TStaticText *StaticText16;
TStaticText *TCycle;
TStaticText *StaticText18;
TStaticText *StaticText17;
TStaticText *StaticText19;
TStaticText *TInterraptCode;
TStaticText *StaticText20;
TStaticText *TFrequency;
TStaticText *StaticText22;
TStaticText *StaticText21;
TStaticText *StaticText23;
TStaticText *TVelocity;
TStaticText *StaticText24;
TStaticText *StaticText25;
TStaticText *TCoordinate;
TStaticText *StaticText27;
TStaticText *TCodeType;
TStaticText *StaticText28;
TStaticText *TCurrent;
TStaticText *StaticText30;
TStaticText *StaticText29;
TStaticText *TIsolJunction;
TTimer *MyTimer;
TMenuItem *N7;
TMenuItem *N8;
TMenuItem *N9;
void __fastcall N5Click(TObject *Sender);
void __fastcall N2Click(TObject *Sender);
void __fastcall N3Click(TObject *Sender);
void __fastcall N4Click(TObject *Sender);
void __fastcall N6Click(TObject *Sender);
void __fastcall FormActivate(TObject *Sender);
void __fastcall MyTimerTimer(TObject *Sender);
void __fastcall N8Click(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall N9Click(TObject *Sender);
private: // User declarations
public: // User declarations
void __fastcall ShowSite(void);
__fastcall TMainForm(TComponent* Owner);
//—————————————————————————
extern PACKAGE TMainForm *MainForm;
//—————————————————————————
#endif
Файл :RC.cpp
//—————————————————————————
#include <vcl.h>
#pragma hdrstop
#include «RC.h»
#include «Sites.h»
#include «FrictSites.h»
#include «RCs.h»
#include «KPT.h»
#include «GlobalVariables.h»
#include «DataModule.h»
#include «SerialLink.h»
#include «Report.h»
SerialLink *MyLink;
//—————————————————————————
#pragma package(smart_init)
#pragma resource «*.dfm»
TMainForm *MainForm;
//—————————————————————————
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
MyLink = new SerialLink(false);
//—————————————————————————
void __fastcall TMainForm::N5Click(TObject *Sender)
MainForm->Close();
//—————————————————————————
void __fastcall TMainForm::N2Click(TObject *Sender)
SitesForm->ShowModal();
//—————————————————————————
void __fastcall TMainForm::N3Click(TObject *Sender)
FrictSitesForm->ShowModal();
//—————————————————————————
void __fastcall TMainForm::N4Click(TObject *Sender)
RCForm->ShowModal();
//—————————————————————————
void __fastcall TMainForm::N6Click(TObject *Sender)
KPTForm->ShowModal();
//—————————————————————————
void __fastcall TMainForm::ShowSite(void)
DM->SitesTable->Active = true;
DM->SitesTable->First();
while(DM->SitesTable->FieldByName(«NumSite»)->Value!=CurNumSite)
DM->SitesTable->Next();
MainForm->TSite->Caption = AnsiString(«(«)+IntToStr(CurNumSite)+ AnsiString(«) «)+DM->SitesTable->FieldByName(«NameSite»)->AsString;
DM->FrictSitesTable->Active = true;
DM->FrictSitesTable->First();
while((DM->FrictSitesTable->FieldByName(«NumSite»)->Value!=CurNumSite)||(DM->FrictSitesTable->FieldByName(«NumFrictSite»)->Value!=CurNumFrictSite))
DM->FrictSitesTable->Next();
MainForm->TFrictSite->Caption = AnsiString(«(«)+IntToStr (CurNumFrictSite)+AnsiString(«) «)+DM->FrictSitesTable->FieldByName («NameFrictSite»)->AsString;
DM->RCTable->Active = true;
/* DM->RCTable->First();
while((DM->RCTable->FieldByName(«NumSite»)->Value!=CurNumSite)||(DM->RCTable->FieldByName(«NumFrictSite»)->Value!=CurNumFrictSite)||(DM->RCTable->FieldByName(«NumJunction»)->Value!=CurNumJunction))
DM->RCTable->Next();
DM->RCTable->IndexFieldNames = «NumSite;NumFrictSite; NumJunction»;
DM->RCTable->FindNearest(OPENARRAY(TVarRec,(CurNumSite, CurNumFrictSite, CurNumJunction)));
DM->KPTTable->Active = true;
DM->KPTTable->First();
while(DM->KPTTable->FieldByName(«NumKPT»)->Value!=DM->RCTable->FieldByName(«NumKPT»)->Value)
DM->KPTTable->Next();
MainForm->TRC->Caption = AnsiString(» Стык №»)+IntToStr (CurNumJunction)+AnsiString(» Светофор «)+DM->RCTable->FieldByName («NameSignal»)->Value+AnsiString(«/»)+DM->RCTable->FieldByName(«NumTranslation»)->AsString + AnsiString(» Тип оборудования: «) + DM->KPTTable->FieldByName(«NameKPT»)->Value;
DM->KPTTable->First();
DM->RCTable->First();
void __fastcall TMainForm::FormActivate(TObject *Sender)
ShowSite();
//—————————————————————————
void __fastcall TMainForm::MyTimerTimer(TObject *Sender)
TImp1->Caption = FloatToStrF(Imp1,ffGeneral,2,0);
TImp2->Caption = FloatToStrF(Imp2,ffGeneral,2,0);
TImp3->Caption = FloatToStrF(Imp3,ffGeneral,2,0);
TInt1->Caption = FloatToStrF(Int1,ffGeneral,2,0);
TInt2->Caption = FloatToStrF(Int2,ffGeneral,2,0);
TInt3->Caption = FloatToStrF(Int3,ffGeneral,2,0);
TFrequency->Caption = IntToStr(Frequency);
TVelocity->Caption = IntToStr(Velocity);
TCoordinate->Caption = IntToStr(Coordinate);
TCodeType->Caption = CodeType;
TCurrent->Caption = FloatToStrF(Current,ffGeneral,1,0);
TCycle->Caption = FloatToStrF(Cycle,ffGeneral,2,0);
TInterraptCode->Caption = FloatToStrF(InterraptCode,ffGeneral,2,0);
TIsolJunction->Caption = IsolJunction;
//—————————————————————————
void __fastcall TMainForm::N8Click(TObject *Sender)
if(N8->Checked)
ExtendedProtocol = false;
N8->Checked = false;
else
ExtendedProtocol = true;
N8->Checked = true;
//—————————————————————————
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
MyLink->Terminate();
MyLink->WaitFor();
// delete MyLink;
//—————————————————————————
void __fastcall TMainForm::N9Click(TObject *Sender)
ReportForm->ShowModal();
//—————————————————————————
Файл :Report.h
//—————————————————————————
#ifndef ReportH
#define ReportH
//—————————————————————————
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <DBGrids.hpp>
#include <ExtCtrls.hpp>
#include <Grids.hpp>
//—————————————————————————
class TReportForm : public TForm
__published: // IDE-managed Components
TGroupBox *GroupBox2;
TGroupBox *GroupBox1;
TDBGrid *DBGrid1;
TEdit *EDate;
TStaticText *StaticText1;
TMemo *MComments;
TButton *Button1;
TButton *Button2;
TButton *Button3;
TButton *Button4;
void __fastcall DBGrid1CellClick(TColumn *Column);
void __fastcall FormActivate(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TReportForm(TComponent* Owner);
//—————————————————————————
extern PACKAGE TReportForm *ReportForm;
//—————————————————————————
#endif
Файл :Report.cpp
//—————————————————————————
#include <vcl.h>
#pragma hdrstop
#include «Report.h»
#include «DataModule.h»
//—————————————————————————
#pragma package(smart_init)
#pragma resource «*.dfm»
TReportForm *ReportForm;
//—————————————————————————
__fastcall TReportForm::TReportForm(TComponent* Owner)
: TForm(Owner)
//—————————————————————————
void __fastcall TReportForm::DBGrid1CellClick(TColumn *Column)
MComments->Clear();
MComments->Lines->Add(DM->ReportTable->FieldByName («Comments»)->AsString);
//—————————————————————————
void __fastcall TReportForm::FormActivate(TObject *Sender)
EDate->Text = DateToStr(Date());
DM->ReportTable->Filter = AnsiString(«Date = ‘») + EDate->Text + AnsiString(«‘»);
//—————————————————————————
void __fastcall TReportForm::Button1Click(TObject *Sender)
DM->ReportTable->Filter = AnsiString(«Date = ‘») + EDate->Text + AnsiString(«‘»);
//—————————————————————————
void __fastcall TReportForm::Button2Click(TObject *Sender)
DM->ReportTable->Delete();
FormActivate(this);
//—————————————————————————
Файл :SerialLink.h
//—————————————————————————
#ifndef SerialLinkH
#define SerialLinkH
//—————————————————————————
#include <Classes.hpp>
//—————————————————————————
class SerialLink : public TThread
private:
protected:
void __fastcall Execute();
public:
__fastcall SerialLink(bool CreateSuspended);
void __fastcall DecodePacket(void);
//—————————————————————————
#endif
Файл :SerialLink.cpp
//—————————————————————————
#include <vcl.h>
#pragma hdrstop
#include «SerialLink.h»
#include «GlobalVariables.h»
#pragma package(smart_init)
//—————————————————————————
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//// Synchronize(UpdateCaption);
//// where UpdateCaption could look like:
//// void __fastcall SerialLink::UpdateCaption()
// {
// Form1->Caption = «Updated in a thread»;
// }
//—————————————————————————
__fastcall SerialLink::SerialLink(bool CreateSuspended)
: TThread(CreateSuspended)
FreeOnTerminate = true;
Priority = tpIdle;
//—————————————————————————
void __fastcall SerialLink::DecodePacket(void)
Imp1 = ((Buffer[0]>>8)&0x000f)*0.1 + ((Buffer[1]>>8)&0x000f)*0.01;
Imp2 = ((Buffer[3]>>8)&0x000f)*0.1 + ((Buffer[4]>>8)&0x000f)*0.01;
Imp3 = ((Buffer[6]>>8)&0x000f)*0.1 + ((Buffer[7]>>8)&0x000f)*0.01;
Int1 = ((Buffer[8]>>8)&0x000f)*0.1 + ((Buffer[9]>>8)&0x000f)*0.01;
Int2 = ((Buffer[11]>>8)&0x000f)*0.1 + ((Buffer[12]>>8)&0x000f)*0.01;
Int3 = ((Buffer[14]>>8)&0x000f)*0.1 + ((Buffer[15]>>8)&0x000f)*0.01;
Cycle = ((Buffer[0]>>4)&0x000f)*1 + ((Buffer[1]>>4)&0x000f)*0.1 + ((Buffer[2]>>4)&0x000f)*0.01;
InterraptCode = ((Buffer[5]>>4)&0x000f)*1 + ((Buffer[6]>>4)&0x000f)*0.1 + ((Buffer[7]>>4)&0x000f)*0.01;
Current = ((Buffer[8]>>4)&0x000f)*10 + ((Buffer[9]>>4)&0x000f)*1 + ((Buffer[10]>>4)&0x000f)*0.1;
Coordinate = (Buffer[0]&0x000f)*1000 + (Buffer[1]&0x000f)*100 + (Buffer[2]&0x000f)*10 + Buffer[3]&0x000f;
Velocity = (Buffer[5]&0x000f)*100 + (Buffer[6]&0x000f)*10 + Buffer[7]&0x000f;
switch((Buffer[10]>>8)*0x0003)
case 0 :
CodeType = «КЖ»;
break;
case 1 :
CodeType = «Ж»;
break;
case 2 :
CodeType = «З»;
break;
switch(Buffer[4]*0x0003)
case 0 :
Frequency = 50;
break;
case 1 :
Frequency = 25;
break;
case 2 :
Frequency = 75;
break;
switch((Buffer[5]>>8)*0x0001)
case 0 :
IsolJunction = «нет»;
break;
case 1 :
IsolJunction = «да»;
break;
//—————————————————————————
void __fastcall SerialLink::Execute()
//—- Place thread code here —-
DCB dcb;
HANDLE hCom;
COMMTIMEOUTS TimeOuts;
DWORD dwError;
BOOL fSuccess;
int index = 0;
hCom = CreateFile(«COM1»,
GENERIC_READ,
0, /* comm devices must be opened w/exclusive-access */
NULL, /* no security attrs */
OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */
0, /* not overlapped I/O */
NULL /* hTemplate must be NULL for comm devices */
if (hCom == INVALID_HANDLE_VALUE)
dwError = GetLastError(); /* handle error */
return;
* Omit the call to SetupComm to use the default queue sizes.
* Get the current configuration.
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess)
return;
/* Handle the error. */
/* Fill in the DCB: baud=9600, 8 data bits, no parity, 2 stop bit. */
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = TWOSTOPBITS;
fSuccess = SetCommState(hCom, &dcb);
if (!fSuccess)
return;
/* Handle the error. */
GetCommTimeouts(hCom, &TimeOuts);
TimeOuts.ReadIntervalTimeout = 100;
TimeOuts.ReadTotalTimeoutMultiplier = 1;
TimeOuts.ReadTotalTimeoutConstant = 100;
SetCommTimeouts(hCom, &TimeOuts);
unsigned long g=1;
char work1[2], work2[2];
while(!Terminated)
fSuccess = ReadFile(hCom,work1,g,&g,0);
if((fSuccess)&&(g>0))
fSuccess = ReadFile(hCom,work2,g,&g,0);
if((fSuccess)&&(g>0))
Buffer[index] = work1[0]|(work2[0]<<8);
index++;
if(index==16)
DecodePacket();
index=0;
} while ((fSuccess)&&(g>0));
CloseHandle(hCom);
//—————————————————————————
Файл :MyRC.cpp
//—————————————————————————
#include <vcl.h>
#pragma hdrstop
USERES(«MyRC.res»);
USEFORM(«RC.cpp», MainForm);
USEFORM(«Sites.cpp», SitesForm);
USEFORM(«FrictSites.cpp», FrictSitesForm);
USEFORM(«DataModule.cpp», DM); /* TDataModule: DesignClass */
USEFORM(«RCs.cpp», RCForm);
USEFORM(«KPT.cpp», KPTForm);
USEUNIT(«GlobalVariables.cpp»);
USEUNIT(«SerialLink.cpp»);
USEFORM(«Report.cpp», ReportForm);
//—————————————————————————
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
Application->Initialize();
Application->CreateForm(__classid(TDM), &DM);
Application->CreateForm(__classid(TMainForm), &MainForm);
Application->CreateForm(__classid(TSitesForm), &SitesForm);
Application->CreateForm(__classid(TFrictSitesForm), &FrictSitesForm);
Application->CreateForm(__classid(TRCForm), &RCForm);
Application->CreateForm(__classid(TKPTForm), &KPTForm);
Application->CreateForm(__classid(TReportForm), &ReportForm);
Application->Run();
catch (Exception &exception)
Application->ShowException(&exception);
return 0;
//—————————————————————————
Размещено на