В этом разделе перечислены свойства и методы объекта Serial (совместим с нативным QSerial из Qt v.5)

Назначение

Объект Serial (QSerial) предназначен для работы с последовательным портом в контексте JavaScript


Конструктор

new Serial() Создать объект

// Создать объект
var serPort = new Serial();

// Сконфигурить последовательный порт
with(serPort)
{
    //---------------------------------------------------------
    //----- Настройки последовательного порта
    //---------------------------------------------------------

    portName        = 'COM1'; // Имя последовательного порта

    config(19200, 8, 1, 'even', 'none');

    // Управление приемо-передатчиком (актуально в rs485 и при необходимости)
    // (сколько держать передатчик включеным после записи в порт в милисекундах)
    rtsDelay        = 1;
    dtrDelay        = 1;

    silence         =  32;    // гарантированная пауза между фреймами в символах
    debug           = false;  // отключить вывод отладочных сообщений в stdout
}

// Присоединить функцию обработчик к сигналу readyRead
serPort.readyRead.connect(function readyData(){
    var ba = serPort.read();

    // или (modbus ASCII)
    // ba = serPort.readLine();
});

// Отправить задачу в очередь (после выполнения Serial эмитирует сигнал performed)
serPort.open();  // или serPort.open('COM1');

if(serPort.isOpen) {

// Отправить команду в порт (устройству modbus RTU)
serPort.write([0x01, 0x01, 0x00, 0x00, 0x00, 0x02]);

// или (modbus ASCII)
// serPort.write(':010300050001EFD9\n\r');

// можно подождать отправки данных устройству
serPort.waitForBytesWritten();

// если нужно сразу подождать ответ от устройства нобходимо вызвать waitForReadyRead
if(serPort.waitForReadyRead()) {
    // Сигнал readyRead будет заглушен, если waitForReadyRead вернет true
    var ba = serPort.read();
}


Свойства (property)

Пример использования:

// Создать объект
var serPort = new Serial();

//свойство параметра чтение/запись:

var bRate = serPort.baudRate; // Чтение

serPort.flowControl = 'none'; // Запись

String serPort.portName Чтение/запись
Имя последовательного порта

serPort.portName = '/dev/ttyS1';

int serPort.baudRate Чтение/запись
скорость порта

serPort.baudRate = 9600; // 19200 по умолчанию

String serPort.parity Чтение/запись
наличие и тип бита четности

  • 0, '0', 'n', 'none' - нет контроля над четностью (по умолчанию)
  • 2, '2', 'e', 'even' - контроль над четностью EVEN
  • 3, '3', 'o', 'odd' - контроль над нечетностью ODD
  • 4, '4', 's', 'space'- контроль над четностью SPACE
  • 5, '5', 'm', 'mark' - контроль над четностью MARK
  • serPort.parity = 'n'; // эквивалентно 0, '0', 'none',  'N',  'NoNe'
    serPort.parity = 'e'; // эквивалентно 2, '2', 'even',  'E',  'Even'
    serPort.parity = 'o'; // эквивалентно 3, '3', 'odd',   'O',  'ODD'
    serPort.parity = 's'; // эквивалентно 4, '4', 'space', 'S',  'sPaCe'
    serPort.parity = 'm'; // эквивалентно 5, '5', 'mark',  'M',  'MARK'
    

    String serPort.flowControl Чтение/запись
    Управление потоком

    Внимание! Если стоит аппаратное/программное управление потоком,
    то управление приемопередатчиком rs485 запрещено (свойства serPort.rtsDelay и serPort.dtrDelay)

    serPort.flowControl = 'n'; // эквивалентно 0, '0', 'none',    'N', 'NoNe'
    serPort.flowControl = 'r'; // эквивалентно 1, '1', 'rts-cts', 'R', 'RtS', 'Hard'
    serPort.flowControl = 'x'; // эквивалентно 2, '2', 'xon-xoff','X', 'Xon', 'Soft'
    

    int serPort.stopBits Чтение/запись
    Количество стоповых бит.

    serPort.stopBits = 2;
    

    int serPort.dataBits Чтение/запись
    Количество бит данных (5,6,7,8). По умолчанию 8

    serPort.dataBits = 7;
    

    int serPort.rtsDelay Чтение/запись
    Управление приемо-передатчиком (актуально в rs485 и при необходимости)
    (сколько держать передатчик включеным после записи в порт в милисекундах)

    Внимание! Если стоит аппаратное/программное управление потоком (свойство serPort.flowControl),
    то управление приемопередатчиком rs485 запрещено

    Приемопередатчиком управляется выводом RTS. По умолчанию 0 (выключен)

    serPort.rtsDelay = 1;
    

    int serPort.dtrDelay Чтение/запись
    Управление приемо-передатчиком (актуально в rs485 и при необходимости)
    (сколько держать передатчик включеным после записи в порт в милисекундах)

    Внимание! Если стоит аппаратное/программное управление потоком (свойство serPort.flowControl),
    то управление приемопередатчиком rs485 запрещено

    Приемопередатчиком управляется выводом DTR. По умолчанию 0 (выключен)

    serPort.dtrDelay = 1;
    

    int serPort.silence Чтение/запись
    Гарантированная тишина в линии между фреймами в символах (допустимо 4 - 200 символов). По умолчанию 32
    ВНИМАНИЕ!!! этот параметр влияет на интервал чтения из порта.
    А также на задержки перед записью/чтением из порта.
    Для уменьшения коллизий, рекомендуется это число увеличить. Возможно придется этот параметр подобрать эксперементально
    Время передачи одного символа расчитывается по формуле:
    (startbit + databits + stopbits) * 1000 / baudRate
    Полученное время одного символа умножается на serPort.silence и округляется в большую сторону до ближайшего целого (см silence_ms). В результате получаем время тишины в линии перед записью в порт.
    Интервал циклического чтения из порта равняется половине времени между фреймами.

    serPort.silence = 5;
    

    int serPort.silence_ms Только чтение
    расчетное значение паузы перед попыткой прочесть что либо из порта (расчитывается на основании silence)


    int serPort.intrvl_ms Только чтение
    расчетное значение периода цикла в главном потоке чтения (расчитывается на основании silence)


    bool serPort.debug Чтение/запись
    разрешить вывод отладочных сообщений в stderr

    Внимание! вывод отладочных сообщений не записывается в лог
    и доступен только в jCjSService при запуске с параметром -e

    Этот функционал полезен при подборе временнЫх характеристик serPort


    float serPort.framesPerSec Только чтение
    расчетное значение количества запросов в минуту

    При записи любого числа произойдет сброс (будет расчитываться сначала)




    Сигналы

    void serPort.opened();
    генерируется объектом Serial при успешном открытии порта


    void serPort.closed();
    генерируется объектом Serial при закрытии порта


    void serPort.bytesWritten();
    генерируется объектом Serial при окончании передачи данных в порт


    void serPort.readyRead();
    генерируется объектом Serial при наличии данных пришедших в порт
    ВНИМАНИЕ!!! Если был вызван метод waitForReadyRead() и он вернул true, то сигнал не будет сгенерирован


    void serPort.destroy();
    генерируется объектом SerialTaskWrap при уничтожении объекта. Например после выполнения task.deleteLater()



    Методы

    void serPort.copy(Serial, QSerial or SerialTaskWrap) Процедура
    Скопировать все настройки из стороннего объекта.
    Аргументом могут выступать Serial, QSerial или SerialTaskWrap


    Object serPort.counters() функция
    Возвращает счетчики байт/запросов в мин


    void serPort.counters_clear() функция
    Очистить счетчики


    void serPort.config(baudRate, dataBits, stopBits, parity, flowControl) Процедура
    Сконфигурировать последовательный порт

    // Создать объект
    var serPort = new Serial();
    
    serPort.config(19200, 8, 1, 'even', 'none');
    
    // эквивалентно этому
    serPort.baudRate       = 19200;
    serPort.dataBits       = 8;
    serPort.stopBits       = 1;
    serPort.parity         = 'even';
    serPort.flowControl    = 'none';
    
    // эквивалентно этому
    serPort.config(19200, 8, 1, 2, 0);
    
    // эквивалентно этому
    serPort.baudRate       = 19200;
    serPort.dataBits       = 8;
    serPort.stopBits       = 1;
    serPort.parity         = 2;
    serPort.flowControl    = 0;
    

    bool serPort.open(String portName = '') Функция
    Открыть порт и начать обмен


    void serPort.close() Функция
    Закрыть порт и остановить обмен


    void serPort.halt_thread() Функция
    Остановить обмен


    int serPort.write(variant) Функция
    Отправить в порт данные и вернуть размер принятых двнных


    variant serPort.read(int maxSize = -1) Функция
    Забрать из объекта полученные данные (если maxSize меньше 0 будет прочитано все)


    String serPort.readLine(int maxSize = -1) Функция

    String serPort.readBlock(char stopChar = '\n', int maxSize = -1) Функция

    ByteArray serPort.readBlockBa(char stopChar = '\n', int maxSize = -1) Функция
    Забрать из объекта полученные данные в формате String.
    Если maxSize < 0 - (по умолчанию) будет прочитано все.
    В отличие от read(), если при заполнении выходной строки в буфере встретится \n, чтение закончится
    Для readBlock() можно указать специфический символ


    bool serPort.canReadLine() Функция

    bool serPort.canReadBlock(stopChar = '\n') Функция
    Если во входном буфере есть символ перевода строки, вернет true
    Для canReadBlock() можно указать специфический символ


    int serPort.cntReadLines() Функция

    int serPort.cntReadBlocks(stopChar = '\n') Функция
    Подсчитать сколько во входном буфере символов перевода строки
    Для cntReadBlocks() можно указать специфический символ


    void serPort.buffClear() Функция
    Очистить буферы чтения и записи (можно не использовать)