Boa tarde já que estou utilizando um DataSource do tipo ASCII Serial, gostaria de saber como atraves do ScadaBR vou receber estes endereços em ASCII vindos do PLC e associa-los a um DataPoint, tanto pra receber dados ou pra enviar um comando pro PLC.
Obrigado, boa tarde.
Prezado Vinicius,
O Datasource ASCII Serial,particularmente, não envia comandos do tipo valores, liga/desliga, setpoint etc… Para envio de comandos para a maioria dos PLCs do mercado, as 2 principais recomendações são o Modbus (RTU ou ASCII) ou o OPC (através do driver do fabricante).
Se puder dar seguimento à idéia de colocar o PLC em Modbus seria ótimo pois com ele é possível ler e escrever. Se o fabricante do PLC oferecer um driver OPC-DA, pode ser outro caminho interessante.
De qualquer forma, uma breve explicação do protocolo ASCII Serial para quem quiser usá-lo:
- o Datasource extrai uma string bruta da porta serial, conforme for configurado (por exemplo, até 5 caracteres, ou até o caracter “x” etc.)
- o Datapoint pega essa string bruta e aplica uma REGEX (Expressão Regular) que são caracteres-coringa descrevendo o trecho da string que vc está interessado.
Por exemplo, temos uma balança que informa a seguinte string pela serial:
WW0000.0kg
(onde 0000.0kg é o peso que queremos extrair)
nesse caso,
- o Datasource pode ser configurado para ler até o caracter “k”
- o Datapoint “Peso” pode ser configurado com a Regex [0-9]{4}.[0-9]
ou seja, 4 dígitos de zero a nove, seguidos de um separador decimal e mais 1 dígito de zero a nove.
Com um PLC no modo ASCII e caso vc pretenda apenas ler os dados sem envio de comandos (porém acredito que não é o seu caso), será possível ter certeza do formato da string olhando em um terminal serial (veja como usar o Hyper Terminal, por exemplo, ou outros como Putty, SerialMonitor etc.) pois o ASCII é “legível” diferentemente dos protocolos binários que são “ilegíveis”. Olhando a string seria possível te auxiliar na montagem da REGEX para extração dos dados.
Se tudo acima não servir, realmente será necessário adicionar um novo driver no ScadaBR (ou seja, desenvolver um datasource específico para o seu equipamento). Não chega a ser a coisa mais difícil do mundo (já fizermos anteriormente para Siemens e Mitsubishi), porém é uma tarefa mais especializada e trabalhosa, sendo normalmente feito sob encomenda ou com ajuda de um parceiro…
obrigado, até mais
Olá Vinicius, estou tendo o mesmo desafio seu, porém desenvolvi um protocolo proprio onde há comandos ações e leituras em ascii, assim como o modbus. Ainda estou tentando entender como implementar o protocolo no SCADABR.
Ainda nao ficou bem claro como funciona.
O meu protocolo funciona assim:
A - Solicita Leitura Analogica
BxxxxxE - Retorno da solicitacao onde xxxxx é o valor da leitura.
no Data Source eu coloquei 6 Caracteres de limitacao
buffer: 8 e String de Inicializacao: B.
No DataPoint coloquei o nome da variavel: NIVEL
e no Regex: [0-9]{5}: Entendi que depois da String de Inicializacao ler o 5 caracteres e converter para inteiro
mesmo assim nao consegui ler.
o Seu PLC deve ter algo semelhante.
Será que o povo do Scada BR ajuda pode nos ajudar?
Olá Takao
No seu caso, string de inicialização pode ficar em branco (vazio),
e dentro do datapoint, onde diz “Comando” vc deveria digitar “A”
Basicamente ele usa a string de inicialização uma única vez (quando ativa o datasource), depois a cada leitura ele envia o “comando” definido no datapoint.
boa sorte, nos reporte se houver avanços!
obrigado
Olá !
Eu fiz exatamente do jeito que você falou, e percebi que no campo COMANDO do DATAPOINT o comando some quando mando salvar. Não sei se isso pode ser problema na minha maquina ou no Scada. Seria bom a gente averiguar isso.
Se você tiver alguma dica eu fico no aguardo.
Só consegui instalar o SCADABR pelo Deploy.
Estou usando o Windows 7.
Att:
Takao
Não consigo obter dados string vindos do meu CLP. Já testei com o Hyperterm e percebo que funciona perfeitamente. Consigo ver o Data Point enviando o comando desejado ao CLP, e noto o "pooling" de TX e RX na porta serial RS232. Mas acredito que o o Data Point consiga manipular apenas com texto em modo numérico e não "Palavras".
Peço ajuda.
Obrigado
Olá pessoal, estou tendo problemas semelhantes com a leitura serial.
Eu possuo uma balança aqui na empresa que envia continuamente o peso, ou seja, quando eu altero a carga na plataforma, ela altera automaticamente o peso e estou constatando isso pela porta serial da balança, conectada ao meu Hyper Terminal do PC. Eu estou tentando receber o peso dela aqui no SCADABR mas estou enfrentando problemas. Como disse, ja vi que na serial ela está transmitindo normalmente no Hyper Terminal e da seguinte forma:
c+p 000199000000
Neste caso, a balança está demonstrando 19,9 kg em seu display. Para configuração do SCADABR, defini da seguinte forma:
- Criei um DATASOURCE com leitura ASCII Serial, com nome: Balança;
- Defini as configurações corretas de baud rate, paridade, etc... (no caso é 9600/8/n/1)
- Atualização: 1 segundo;
- Timeout 300;
- Modo de Parada: Número de caracter;
- Tamanho de Caracter: 16;
- Tamanho do buffer: 16;
- String de inicialização: "deixei vazio"
No DATAPOINT, defini da seguinte forma:
- Nome: Peso_Atual;
- Tipo de Dado: Alfanumerico;
- Comando: "deixei vazio. Neste ponto nao sei se devo colocar algo, já que o peso é transmitido automaticamente";
- Regex: [0-9]{12}
Quando Salvo o Datasource, o sistema automaticamente apresenta o alarme: Sem dados disponiveis.
No Whatch list, clico no DATAPONT Peso _Atual e na linha nao aparece o peso, apenas 18:50:04 (parece que é a hora, mas está errada)... Seria aqui o lugar para aparecer o valor da string de peso, correto?
Bom pessoal, acredito que esta seja uma das principais duvidas da galera. Se puder ajudar, agradecemos.
Obrigado.
Sugiro excluir os dígitos que não são números… Tente alguma coisa parecida com isso: \b([^[0-9]]{12})\b
Hello
I faced problem in ScadaBr
Using ASCII Serial data source I need to send initial command finishing with CRLF or /n/r or 0x0D 0x0A
It seems like SCADAbr is not recognizing the escape sequences \r
and \n
as intended, and it’s treating them as literal characters and send complete command on serial port
expl: command is M047770CLRF or M047770/n/r
Somebody maybe can help?