.. _serial_port: Последовательный порт --------------------- TbtkScriptSerialPortTimeouts ............................. .. pas:class:: TbtkScriptSerialPortTimeouts Класс предоставляет доступ к структуре **COMMTIMEOUTS**. .. seealso:: `Описание Timeouts структуры в msdn `_ .. warning:: Все атрибуты класса являются заглушками и не влияют на работу .. versionadded:: 1.25.0-ms4 .. pas:attribute:: WriteTotalTimeoutMultiplier: Integer Множитель для вычисления полного времени ожидания для операций записи, в миллисекундах. :rtype: Integer .. pas:attribute:: WriteTotalTimeoutConstant: Integer Константа для вычисления полного времени ожидания для операций записи, в миллисекундах. :rtype: Integer .. pas:attribute:: ReadTotalTimeoutMultiplier: Integer Множитель для вычисления полного времени ожидания для операций чтения, в миллисекундах. :rtype: Integer .. pas:attribute:: ReadTotalTimeoutConstant: Integer Константа для вычисления полного времени ожидания для операций чтения, в миллисекундах. :rtype: Integer .. pas:attribute:: ReadIntervalTimeout: Integer Максимальное допустимое время между получением двух символов, в миллисекундах. :rtype: Integer TbtkScriptSerialPortDcbObject ............................. .. pas:class:: TbtkScriptSerialPortDcbObject Класс предоставляет доступ к структуре **DCB**, определяющей настройки последовательного порта. .. seealso:: `Описание DCB структуры в msdn `_ .. warning:: Все атрибуты класса являются заглушками и не влияют на работу .. versionadded:: 1.25.0-ms4 .. pas:attribute:: StopBits: Integer Доступные константы: ONESTOPBIT, ONE5STOPBITS, TWOSTOPBITS. :rtype: Integer .. pas:attribute:: Parity: Integer Доступные константы: NOPARITY, ODDPARITY, EVENPARITY, MARKPARITY, SPACEPARITY. :rtype: Integer .. pas:attribute:: ByteSize: Integer Число битов в передаваемых и получаемых байтах. :rtype: Integer .. pas:attribute:: BaudRate: Integer Доступные константы: CBR\_110, CBR\_300, CBR\_600, CBR\_1200, CBR\_2400, CBR\_4800, CBR\_9600, CBR\_14400, CBR\_19200, CBR\_38400, CBR\_56000, CBR\_57600, CBR\_115200, CBR\_128000, CBR\_256000. :rtype: Integer TbtkScriptSerialPortObject ............................. .. pas:class:: TbtkScriptSerialPortObject Класс для работы с последовательным портом. Позволяет получать данные и настраивать обработчики. .. versionadded:: 1.25.0-ms4 .. pas:attribute:: Registered: Boolean Зарегистрирован ли обработчик на последовательный порт: **True** - зарегистрирован, **False** - не зарегистрирован. :rtype: Boolean .. pas:attribute:: Opened: Boolean Возвращает состояние порта: **True** - открыт, **False** - закрыт. :rtype: Boolean .. note:: Данное свойство обозначает был ли открыт порт методом :pas:meth:`Open`. То есть если порт используется другим приложением, свойство вернет **False**. .. seealso:: :pas:attr:`Busy` .. pas:attribute:: Data: String Данные считанные из последовательного порта, после их поступления. Поле позволяет получить данные в обработкичке на поступление данных в последовательный порт. :rtype: String .. pas:attribute:: Port: String Имя последовательного порта. :rtype: String .. pas:attribute:: Busy: Boolean Доступен ли последовательный порт для открытия :rtype: Boolean .. note:: * Свойство отстутсвует в Global1 * При обращении к свойству происходит открытие и закрытие последовательного порта. Метод полезен, если нужно проверить занят ли порт на уровне ОС, а не только на уровне текущего сервера. .. pas:method:: SetCOMMTimeouts(Timeouts TbtkScriptSerialPortTimeouts) Записывает параметры таймаутов в порт. :param TbtkScriptSerialPortTimeouts Timeouts: Структура с таймаутами .. warning:: Не влияет на работу устройства в текущей версии .. pas:method:: GetCOMMTimeouts(): TbtkScriptSerialPortTimeouts Получает параметры времени ожидания (timeout) последовательного порта. :rtype: TbtkScriptSerialPortTimeouts .. pas:method:: SetDCBProperties(DCB: TbtkScriptSerialPortDcbObject) Записывает управляющую структуру **DCB** в порт. :param TbtkScriptSerialPortDcbObject DCB: Структура **DCB**. .. warning:: Не влияет на работу устройства в текущей версии .. pas:method:: GetDCBProperties(): TbtkScriptSerialPortDcbObject Получает настройки порта в виде структуры **DCB**. :rtype: TbtkScriptSerialPortDcbObject .. pas:method:: Close() Закрывает COM порт. .. warning:: Важно после работы с последовательным устройством закрыть его. .. pas:method:: Open() Открывает COM порт. .. pas:method:: DeregisterHandler() Отменяет регистрацию обработчика данных для COM порта. .. pas:method:: RegisterHandler(Operation: TbtkScriptOperationObject) Регистрирует обработчик для COM порта. :param TbtkScriptOperationObject Operation: Операция-обработчик. Пример работы ................ Листинг тестовой операции: .. code-block:: pascal ComPortName := GetVar('sSerialPortName'); SerialPort := Application.GetSerialPort(ComPortName); // ComPortName = "COM3" SerialPort.Open; // Дальше идет задание настроек, но этот момент можно пропустить // тогда будут использованы значения по умолчанию // точно такие же, какие заданы в этом примере dcb := SerialPort.GetDCBProperties; dcb.BaudRate := CBR_19200; dcb.ByteSize := 8; dcb.Parity := ONESTOPBIT; dcb.StopBits := NOPARITY; SerialPort.SetDCBProperties(dcb); timeouts := SerialPort.GetCOMMTimeouts; timeouts.ReadIntervalTimeout := 50; timeouts.ReadTotalTimeoutConstant := 40; timeouts.ReadTotalTimeoutMultiplier := 40; timeouts.WriteTotalTimeoutConstant := 40; timeouts.WriteTotalTimeoutMultiplier := 40; SerialPort.SetCOMMTimeouts(timeouts); SerialPort.RegisterHandler(Selection.OperationByName('OnComPortReaded') ); Листинг операции-обработчика OnComPortReaded: .. code-block:: pascal SerialPort := Application.GetSerialPort(APortName); ShowMessage(SerialPort.Data); Эмулирование COM порта ........................ Для теста можно эмулировать COM порт и записывать в него поток данных. Существуют бесплатные(условно-бесплатные) версии подобных утилит. Проверенно работает утилита VSPE (VIRTUAL SERIAL PORTS EMULATOR) для эмуляции виртуального последовательно порта. Для генерации трафика в цикле можно использовать утилиту AGG Com port data emulator (Freeware).