Class: SerialPort

@nginstack/engine/lib/io/SerialPort~ SerialPort


new SerialPort(port [, baudRate] [, dataBits] [, stopBits] [, parityBits] [, flowControl])

Classe que possibilita a comunicação por meio de portas seriais.

Parameters:
Name Type Argument Description
port number | string

Nome ou número da porta serial que será aberta para comunicação. Caso apenas o número tenha sido informado, será usado o prefixo 'COM' no windows e '/dev/ttyUSB' no linux.

baudRate number <optional>

Velocidade da transmissão dos dados entre os equipamentos que usam comunicação serial. A velocidade da porta e a velocidade do equipamento precisam ser iguais, alguns equipamentos podem detectar automaticamente a velocidade da porta serial. Valor padrão: 9600 bits/s.

dataBits number <optional>

Número de bits usados para representar um caractere. Pode ser 5 (para Código Baudot), 6 (Usado raramente), 7 (para true ASCII) ou 8 (para qualquer tipo de dados, pois este valor confere com o tamanho de um byte). Valor padrão: 8 bits.

stopBits number <optional>

Quantidade de bits enviados no final de cada caractere que permitem o equipamento receptor do sinal detectar o fim do caractere e re-sincronizar com a stream de caracteres. Pode ser 1 ou 2. Valor padrão: 1.

parityBits string <optional>

Tipo do método de paridade usado para detectar erros na transmissão. Pode ser: 'odd', 'even' ou 'none' (sem paridade). Valor padrão: 'none'.

flowControl string <optional>

Tipo de controle de fluxo, Pode ser: 'hardware', 'software' ou 'none'(sem controle de fluxo). Valor padrão: 'none'.

Members


baudRate :number

Obtém a velocidade da transmissão dos dados.

Type:
  • number

dataBits :number

Obtém o número de bits usados para representar um caractere. Os possíveis valores retornados são: 5, 6, 7 ou 8.

Type:
  • number

flowControl :string

Define o tipo de controle de fluxo. Pode ser: 'hardware', 'software' ou 'none' (sem controle de fluxo).

Type:
  • string

parityBits :string

Define o tipo do método de paridade usado para detectar erros na transmissão. Os possíveis valores são: 'odd', 'even', ou 'none'.

Type:
  • string

portName :string

Nome da porta serial.

Type:
  • string

readIntervalTimeout :number

Define o timeout em ms entre bytes recebidos.

Importante: esta propriedade é suportada apenas no Windows e o seu uso no Linux gera um erro.

Type:
  • number
Deprecated:
  • Utilize apenas a propriedade readTimeout.

readTimeout :number

Define o timeout de leitura em ms.

Type:
  • number

readTotalTimeoutConstant :number

Define a constante do cálculo do valor total de timeout de uma operação de leitura.

O valor do timeout total de leitura em ms é calculado usando a seguinte expressão:

timeoutTotal = (readTotalTimeoutMultiplier * nBytesRead) + readTotalTimeoutConstant

Importante: esta propriedade é suportada apenas no Windows. No Linux é equivalente a readTimeout.

Type:
  • number
Deprecated:
  • Utilize apenas a propriedade readTimeout.

readTotalTimeoutMultiplier :number

Define o multiplicador do cálculo do valor total de timeout de uma operação de leitura.

O valor do timeout total de leitura em ms é calculado usando a seguinte expressão:

timeoutTotal = (readTotalTimeoutMultiplier * nBytesRead) + readTotalTimeoutConstant

Importante: esta propriedade é suportada apenas no Windows e o seu uso no Linux gera um erro.

Type:
  • number
Deprecated:
  • Utilize apenas a propriedade readTimeout.

stopBits :number

Define a quantidade de bits enviados no final de cada caractere. Os possíveis valores são: 1 ou 2.

Type:
  • number

writeTimeout :number

Define o timeout de escrita em ms.

Type:
  • number

writeTotalTimeoutConstant :number

Define a constante do cálculo do valor total de timeout de uma operação de escrita.

O valor do timeout total de escrita em ms é calculado usando a seguinte expressão:

timeoutTotal = (writeTotalTimeoutMultiplier * nBytesWrote) + writeTotalTimeoutConstant

Importante: esta propriedade é suportada apenas no Windows. No Linux é equivalente a writeTimeout.

Type:
  • number
Deprecated:
  • Utilize apenas a propriedade writeTimeout.

writeTotalTimeoutMultiplier :number

Define o multiplicador do cálculo do valor total de timeout de uma operação de escrita.

O valor do timeout total de escrita em ms é calculado usando a seguinte expressão:

timeoutTotal = (writeTotalTimeoutMultiplier * nBytesWrote) + writeTotalTimeoutConstant

Importante: esta propriedade é suportada apenas no Windows e o seu uso no Linux gera um erro.

Type:
  • number
Deprecated:
  • Utilize apenas a propriedade writeTimeout.

Methods


<static> getAvailablePorts()

Obtém a relação de portas seriais disponíveis no computador onde o Engine está sendo executado. Será retornado um array de objetos com as seguintes propriedades:

See:
  • SerialPortInfo
  • SerialPort.logAvailablePorts
Returns:

Relação de portas seriais disponíveis no computador onde o Engine está sendo executado.

Type
Array.<SerialPortInfo>

<static> logAvailablePorts( [logger])

Registra no arquivo de log informações sobre as portas seriais disponíveis no computador onde o Engine está sendo executado.

Parameters:
Name Type Argument Description
logger Logger <optional>

Log onde deverão ser registradas as informações. Caso não seja informado, elas serão registradas na categoria de log application.

See:
  • SerialPort.getAvailablePorts

clear()

Libera todos os threads aguardando uma leitura/escrita na porta serial e limpa os buffers.


close()

Fecha a comunicação com a porta serial.


getCTS()

Lê o estado da linha Clear To Send (CTS).

Esta linha é normalmente usada para controle de fluxo em conjunto com a linha RTS. Um sinal afirmativo indica que o receptor está pronto para receber dados.

Observação: esta é uma opção avançada que permite implementar um controle de fluxo de hardware customizado. Utilize apenas em dispositivos que não implementam os fluxos padronizados de "hardware" ou "software", que podem ser configurados pela opção flowControl.

Returns:

Estado da linha.

Type
boolean

getDSR()

Lê o estado da linha Data Set Ready (DSR).

Esta linha possui diferentes usos a depender da aplicação, mas é normalmente usada para handshaking ou controle de fluxo em conjunto com a linha DTR.

Observação: esta é uma opção avançada que permite implementar um controle de fluxo de hardware customizado. Utilize apenas em dispositivos que não implementam os fluxos padronizados de "hardware" ou "software", que podem ser configurados pela opção flowControl.

Returns:

Estado da linha.

Type
boolean

read(maxLen)

Lê uma quantidade de bytes da porta serial. A quantidade de bytes lidos é entre 0 e maxLen. Resultado com tamanho 0 indica que a leitura chegou ao fim (EOF) ou que maxLen passado foi 0.

Não é um erro que o tamanho do valor retornado seja menor que maxLen, mesmo que a leitura não tenha chegado ao fim ainda. Isto pode acontecer caso um número menor de bytes esteja disponível ou a leitura tenha sido interrompida por um sinal.

Parameters:
Name Type Description
maxLen number

Quantidade máxima de bytes que podem ser lidos da porta serial.

Returns:

Resultado da leitura da porta serial. Esta função retorna os bytes lidos no formato conhecido por Binary Strings. Para conteúdos binários ou textos que não sejam codificados em ASCII, pode ser necessário a recodificação do valor retornado.

Type
string
Examples
const SerialPort = require('@nginstack/engine/lib/io/SerialPort.js');
// O código abaixo lê 50 bytes da porta serial COM4 e guarda em result
const serial = new SerialPort('COM4', 9600, 8, 1, 'none', 'none');
let result = '';
let partial = '';
const maxLen = 50;
do {
  partial = serial.read(maxLen - result.length);
  result += partial;
} while (result.length < maxLen && partial.length > 0);
const SerialPort = require('@nginstack/engine/lib/io/SerialPort.js');
// O código abaixo lê 42 bytes da porta serial /dev/ttyS0 e guarda em result
const serial = new SerialPort('/dev/ttyS0');
let result = '';
const maxLen = 42;
while (result.length < maxLen) {
  let partial = serial.read(maxLen - result.length);
  if (partial.length === 0) {
    break;
  }
  result += partial;
}

setDTR(state)

Atribui um estado à linha Data Terminal Ready (DTR).

Esta linha possui diferentes usos a depender da aplicação, mas é normalmente usada para handshaking ou controle de fluxo em conjunto com a linha DSR. A porta é criada com DTR verdadeiro para manter compatibilidade com dispositivos antigos que somente enviam dados quando este sinal está ativo.

Observação: esta é uma opção avançada que permite implementar um controle de fluxo de hardware customizado. Utilize apenas em dispositivos que não implementam os fluxos padronizados de "hardware" ou "software", que podem ser configurados pela opção flowControl.

Parameters:
Name Type Description
state boolean

Estado a ser atribuído à linha.


setRTS(state)

Atribui um estado à linha Ready To Send (RTS).

Esta linha é normalmente usada para controle de fluxo em conjunto com a linha CTS. Atribuir falso limpa o sinal. Atribuir verdadeiro envia um sinal afirmativo, indicando que o transmissor está pronto para enviar dados.

Observação: esta é uma opção avançada que permite implementar um controle de fluxo de hardware customizado. Utilize apenas em dispositivos que não implementam os fluxos padronizados de "hardware" ou "software", que podem ser configurados pela opção flowControl.

Parameters:
Name Type Description
state boolean

Estado a ser atribuído à linha.


write(buffer)

Escreve o conteúdo completo do buffer na porta serial.

Caso a escrita seja interrompida por qualquer motivo, a função gera erro.

Parameters:
Name Type Description
buffer string | ArrayBuffer | Uint8Array

Bytes que serão transmitidos para a porta serial.

Example
const SerialPort = require('@nginstack/engine/lib/io/SerialPort.js');
// O código abaixo escreve a string "Hello World!" na porta serial COM4
const serial = new SerialPort('COM4', 9600, 8, 1, 'none', 'none');
const content = 'Hello World!';
serial.write(content);

writeln(buffer)

Escreve o conteúdo completo do buffer acrescido de quebra de linha na porta serial.

Quebra de linha acrescida: 0x13(CR) e 0x10(LF) para Windows. 0x10(LF) para Linux.

Parameters:
Name Type Description
buffer string | ArrayBuffer | Uint8Array

Bytes que serão transmitidos para a porta serial.

Example
const SerialPort = require('@nginstack/engine/lib/io/SerialPort.js');
// O código abaixo escreve a string "Hello World!\r\n" na porta serial COM4
let serial = new SerialPort('COM4');
const content = 'Hello World!';
serial.writeln(content);