ESCOPO CORRIGIDO
O destino é um computador físico
O SASE local da SE Cianorte não está virtualizado: ele executa o SASE 6.5.0.0/PLS3 diretamente em Linux. Quando este guia mencionar Windows ou PowerShell, trata-se somente do notebook de manutenção.
A versão anterior desativava o watchdog físico e o NTP para atender à máquina virtual de laboratório. O pacote desta página é um overlay para PC nativo: ele não contém nem substitui coeinitr.pls3, funcoes.pls3, gpsinit.pls3 ou relatorios.pls3.
Os quatro arquivos nativos do PC precisam coincidir com a base padrão indicada no passo 05. Se qualquer hash diferir, pare e envie um backup atual do diretório pls3 à engenharia; não adapte arquivos manualmente.
REGRAS OBRIGATÓRIAS
Proteções durante a importação
- Obter janela autorizada para indisponibilidade do PC SASE e manter um operador diante do console físico.
- Confirmar no CODESYS, sem force nem escrita,
xEnableDjCommands=FALSEno WAGO. - Não editar manualmente arquivos
.ban,.img,.est,.dnp,.canou.uni. - Executar uma linha por vez. Se qualquer resultado divergir, parar antes da árvore ativa.
- Não testar
CG 01, não energizar saída e não validar comando durante esta atividade.
ARQUIVO DE ENTREGA
Identificar o overlay do PC nativo
sase_pls3_wago_centralizado_PC_NATIVO_OVERLAY_FINAL_COMANDO_CG_01_20260831.tgzSHA-256474FB62F97FDD57563B2F22C82E41ED3BC2C7322ADC56984186245A22F31618EMD5 NO SASE2BC33B63A41E19445C95318282352016O TGZ contém exatamente 9 arquivos. A árvore ativa final terá 13 arquivos: os 9 entregues e os 4 scripts preservados do próprio PC.
No notebook de manutenção · PowerShell:
Get-FileHash -Algorithm SHA256 "C:\CAMINHO\sase_pls3_wago_centralizado_PC_NATIVO_OVERLAY_FINAL_COMANDO_CG_01_20260831.tgz"O hash precisa ser 474FB62F97FDD57563B2F22C82E41ED3BC2C7322ADC56984186245A22F31618E. Se for diferente, não use o arquivo.
CAMINHO A
Importar com pendrive
- Preparar no notebook.
Use pendrive FAT32 com uma única partição. Copie o TGZ para a raiz, confira o SHA-256 e ejete com segurança.
- No terminal root do SASE, registrar o estado antes de inserir.
cat /proc/partitions cat /proc/partitions > /tmp/partitions_antes_usb.txt - Inserir e identificar somente o dispositivo novo.
dmesg | tail -30 cat /proc/partitionsNunca escolha um disco por tentativa. Monte somente a nova partição que aparece ao mesmo tempo nodmesge em/proc/partitions. Se não houver correspondência inequívoca, pare. - Montar somente para leitura.
No exemplo abaixo, substitua
/dev/sdX1pela partição nova realmente observada.USB_SASE=/dev/sdX1 test -b "$USB_SASE" && echo DISPOSITIVO_CONFIRMADO mkdir -p /mnt/pendrive_sase mount -t vfat -o ro "$USB_SASE" /mnt/pendrive_sase ls -l /mnt/pendrive_sase/sase_pls3_wago_centralizado_PC_NATIVO_OVERLAY_FINAL_COMANDO_CG_01_20260831.tgz md5sum /mnt/pendrive_sase/sase_pls3_wago_centralizado_PC_NATIVO_OVERLAY_FINAL_COMANDO_CG_01_20260831.tgzResultado esperadoDeve aparecer
DISPOSITIVO_CONFIRMADOe MD52bc33b63a41e19445c95318282352016. - Copiar para a área temporária e desmontar.
cp -p /mnt/pendrive_sase/sase_pls3_wago_centralizado_PC_NATIVO_OVERLAY_FINAL_COMANDO_CG_01_20260831.tgz /tmp/ sync md5sum /tmp/sase_pls3_wago_centralizado_PC_NATIVO_OVERLAY_FINAL_COMANDO_CG_01_20260831.tgz cd / umount /mnt/pendrive_sase mount | grep pendrive_sase || trueRetire o pendrive somente quando o último comando não mostrar linha alguma.
Não formate, não crie partição e não tente outro disco. Siga o caminho “Sem pendrive”.
CAMINHO B
Importar sem montar o pendrive
Opção preferencial · SCP pela rede de manutenção
No PowerShell do notebook, informe somente o IP de manutenção confirmado para o PC físico. Não use 192.168.250.2 como padrão: esse endereço pertencia ao laboratório.
$ipSase = "SUBSTITUIR_PELO_IP_CONFIRMADO"
scp -O -o "HostKeyAlgorithms=+ssh-rsa" -o "KexAlgorithms=+diffie-hellman-group1-sha1" -o "MACs=hmac-sha1" -c aes128-cbc "C:\CAMINHO\sase_pls3_wago_centralizado_PC_NATIVO_OVERLAY_FINAL_COMANDO_CG_01_20260831.tgz" "root@${ipSase}:/tmp/"Confirme a impressão digital já conhecida do host. Se ela mudar ou for desconhecida, pare; não remova entradas de known_hosts.
Alternativa sem rede e sem mídia · somente terminal local
Há um procedimento separado para reconstruir o overlay linha a linha no próprio terminal, com UUEncode e verificação obrigatória do MD5. Ele não edita os arquivos binários do SASE com vi.
ETAPAS COMUNS · TERMINAL ROOT DO SASE
Pré-validar o PC e o pacote
1. Registrar sistema, espaço, processos e metadados
uname -a
date
df -k / /tmp /root /etc/opt /var/opt
ls -ldn /etc/opt/sase-6.5.0.0/pls3 /var/opt/pls3
ps ax | grep -i -E 'canpger[.]exe|dnppger[.]exe|ihmpger[.]exe|coe[.]exe'
netstat -tn 2>/dev/null | grep ':20000' || trueNão continue se não houver espaço suficiente para o backup, a árvore nova e uma cópia de retorno.
2. Confirmar a base nativa que será preservada
cd /etc/opt/sase-6.5.0.0/pls3
md5sum coeinitr.pls3 funcoes.pls3 gpsinit.pls3 relatorios.pls3eeff0506f3934f5cb9514f4122cc9d37 coeinitr.pls3b18c85c234a5c9a2aaab0f86f7149560 funcoes.pls349d7dba85252ba0c25e5f1cfa02ab811 gpsinit.pls3135efaf0c6bcbba52d18aee34fa3b91d relatorios.pls3
Faça backup do PC e envie-o à engenharia para gerar um overlay específico. Não substitua watchdog ou NTP por arquivos do laboratório.
3. Extrair o overlay fora da árvore ativa
cd /tmp
md5sum sase_pls3_wago_centralizado_PC_NATIVO_OVERLAY_FINAL_COMANDO_CG_01_20260831.tgz
tar -tzf sase_pls3_wago_centralizado_PC_NATIVO_OVERLAY_FINAL_COMANDO_CG_01_20260831.tgz
mkdir -p /root/sase_imports
IMPORT_SASE=/root/sase_imports/import_cianorte_$(date +%Y%m%d_%H%M%S)
mkdir -m 700 "$IMPORT_SASE" "$IMPORT_SASE/extracted" "$IMPORT_SASE/runtime"
echo "$IMPORT_SASE" > /root/sase_imports/IMPORT_SASE_ATUAL.txt
tar -xzf /tmp/sase_pls3_wago_centralizado_PC_NATIVO_OVERLAY_FINAL_COMANDO_CG_01_20260831.tgz -C "$IMPORT_SASE/extracted"
OVERLAY_SASE="$IMPORT_SASE/extracted/etc/opt/sase-6.5.0.0/pls3"
find "$OVERLAY_SASE" -maxdepth 1 -type f | wc -l
ls -ln "$OVERLAY_SASE"MD5 2bc33b63a41e19445c95318282352016 e exatamente 9 arquivos. Todos os caminhos do TGZ devem começar por etc/opt/sase-6.5.0.0/pls3/.
4. Executar o consiste.exe isoladamente
cd "$OVERLAY_SASE"
export VERSAO_SASE=6.5.0.0
export ESTACAO=pls3
export PATH=/opt/sase-6.5.0.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
printf '\n' | /opt/sase-6.5.0.0/bin/consiste.exe -o "$IMPORT_SASE/runtime" rpls3.ban > "$IMPORT_SASE/consiste.txt" 2>&1
cat "$IMPORT_SASE/consiste.txt"
md5sum "$OVERLAY_SASE/rpls3.img" "$IMPORT_SASE/runtime/rpls3.img"Arquivo rpls3.ban OK!Arquivo de imagem OK!- 44 analógicos, 128 estados e 2 comandos
- As duas imagens com MD5
5fc1d62ad4de75c119e9476683dc4a0f
5. Confirmar que o SASE usa somente o WAGO
grep -H '^[*] CONEXAO =' "$OVERLAY_SASE"/*.can
grep -n -E '192[.]168[.]1[.](11|40|50)' "$OVERLAY_SASE"/* || trueSomente rpls3c01.can:* CONEXAO = 192.168.1.28 20000 1 01. O segundo comando não deve mostrar linha alguma.
PONTO DE RETORNO
Fazer backup e montar a nova árvore
1. Backup integral antes da indisponibilidade
IMPORT_SASE=$(cat /root/sase_imports/IMPORT_SASE_ATUAL.txt)
OVERLAY_SASE="$IMPORT_SASE/extracted/etc/opt/sase-6.5.0.0/pls3"
test -d "$OVERLAY_SASE" && echo IMPORTACAO_LOCALIZADA
mkdir -p /root/sase_backups
BKP_SASE=/root/sase_backups/pls3_antes_importacao_$(date +%Y%m%d_%H%M%S)
mkdir -m 700 "$BKP_SASE"
tar -czpf "$BKP_SASE/etc_pls3.tgz" -C /etc/opt/sase-6.5.0.0 pls3
tar -czpf "$BKP_SASE/var_pls3.tgz" -C /var/opt pls3
md5sum /etc/opt/sase-6.5.0.0/pls3/coeinitr.pls3 /etc/opt/sase-6.5.0.0/pls3/funcoes.pls3 /etc/opt/sase-6.5.0.0/pls3/gpsinit.pls3 /etc/opt/sase-6.5.0.0/pls3/relatorios.pls3 /etc/ntp.conf > "$BKP_SASE/base_nativa.md5"
ps ax > "$BKP_SASE/processos_antes.txt"
netstat -tn 2>/dev/null | grep ':20000' > "$BKP_SASE/conexoes_antes.txt" || true
cp -p /tmp/sase_pls3_wago_centralizado_PC_NATIVO_OVERLAY_FINAL_COMANDO_CG_01_20260831.tgz "$BKP_SASE/"
cp -p "$IMPORT_SASE/consiste.txt" "$BKP_SASE/"
echo "$BKP_SASE" > /root/sase_backups/ULTIMO_BACKUP_PLS3.txt
test -s "$BKP_SASE/etc_pls3.tgz" && test -s "$BKP_SASE/var_pls3.tgz" && echo BACKUPS_PRESENTESIMPORTACAO_LOCALIZADA e BACKUPS_PRESENTES. Anote ou fotografe o caminho mostrado por cat /root/sase_backups/ULTIMO_BACKUP_PLS3.txt.
2. Montar uma árvore limpa preservando a base física
ATIVO_SASE=/etc/opt/sase-6.5.0.0/pls3
RUNTIME_SASE=/var/opt/pls3
TAG_SASE=$(date +%Y%m%d_%H%M%S)
echo "$TAG_SASE" > /root/sase_imports/TAG_SASE_ATUAL.txt
NOVO_ATIVO=/etc/opt/sase-6.5.0.0/pls3.novo_$TAG_SASE
ANTIGO_ATIVO=/etc/opt/sase-6.5.0.0/pls3.antes_$TAG_SASE
NOVO_RUNTIME=$RUNTIME_SASE/rpls3.img.novo_$TAG_SASE
ANTIGO_RUNTIME=$RUNTIME_SASE/rpls3.img.antes_$TAG_SASE
mkdir -m 755 "$NOVO_ATIVO"
cp -p "$ATIVO_SASE/coeinitr.pls3" "$ATIVO_SASE/funcoes.pls3" "$ATIVO_SASE/gpsinit.pls3" "$ATIVO_SASE/relatorios.pls3" "$NOVO_ATIVO/"
cp -p "$OVERLAY_SASE"/* "$NOVO_ATIVO/"
cp -p "$IMPORT_SASE/runtime/rpls3.img" "$NOVO_RUNTIME"
cp -p "$RUNTIME_SASE/rpls3.img" "$ANTIGO_RUNTIME"
find "$NOVO_ATIVO" -maxdepth 1 -type f | wc -l
md5sum "$NOVO_ATIVO/coeinitr.pls3" "$NOVO_ATIVO/funcoes.pls3" "$NOVO_ATIVO/gpsinit.pls3" "$NOVO_ATIVO/relatorios.pls3"
md5sum "$NOVO_ATIVO/rpls3.img" "$NOVO_RUNTIME"Exatamente 13 arquivos; os quatro hashes nativos iguais ao passo 05; as duas imagens com MD5 5fc1d62ad4de75c119e9476683dc4a0f.
A árvore é criada vazia e recebe apenas os quatro scripts do PC e os nove arquivos do overlay. Por isso canais antigos c02+, CIDIS e referências diretas não são carregados.
ATIVAÇÃO NO PC FÍSICO
Parar a aplicação, promover a árvore e reiniciar
Execute somente na janela autorizada, com acesso ao console local e backup validado. O reboot é do computador físico, não de uma máquina virtual.
1. Parar pelo runlevel padrão e confirmar
sync
telinit 3A interface pode fechar. Entre novamente como root no console físico e recupere os caminhos salvos:
IMPORT_SASE=$(cat /root/sase_imports/IMPORT_SASE_ATUAL.txt)
TAG_SASE=$(cat /root/sase_imports/TAG_SASE_ATUAL.txt)
ATIVO_SASE=/etc/opt/sase-6.5.0.0/pls3
RUNTIME_SASE=/var/opt/pls3
NOVO_ATIVO=/etc/opt/sase-6.5.0.0/pls3.novo_$TAG_SASE
ANTIGO_ATIVO=/etc/opt/sase-6.5.0.0/pls3.antes_$TAG_SASE
NOVO_RUNTIME=$RUNTIME_SASE/rpls3.img.novo_$TAG_SASE
ANTIGO_RUNTIME=$RUNTIME_SASE/rpls3.img.antes_$TAG_SASE
sleep 5
ps ax | grep -i -E 'canpger[.]exe|dnppger[.]exe|ihmpger[.]exe|coe[.]exe' || trueNão continue se algum processo do SASE permanecer ativo. Não use kill por tentativa.
2. Promover com retorno automático em caso de erro
sh -c '
set -e
ATIVO="$1"; NOVO="$2"; ANTIGO="$3"; RUNTIME="$4"; NOVO_RT="$5"; ANTIGO_RT="$6"
mv "$ATIVO" "$ANTIGO"
if mv "$NOVO" "$ATIVO" && cp -p "$NOVO_RT" "$RUNTIME/rpls3.img"; then
echo INSTALACAO_OK
else
[ -d "$ATIVO" ] && mv "$ATIVO" "$ATIVO.falha"
mv "$ANTIGO" "$ATIVO"
cp -p "$ANTIGO_RT" "$RUNTIME/rpls3.img"
echo FALHA_RESTAURADA
exit 1
fi
' sh "$ATIVO_SASE" "$NOVO_ATIVO" "$ANTIGO_ATIVO" "$RUNTIME_SASE" "$NOVO_RUNTIME" "$ANTIGO_RUNTIME"Somente depois de aparecer INSTALACAO_OK, confira os arquivos promovidos:
sync
md5sum "$ATIVO_SASE/rpls3.img" "$RUNTIME_SASE/rpls3.img"
grep -H '^[*] CONEXAO =' "$ATIVO_SASE"/*.canINSTALACAO_OK- As duas imagens:
5fc1d62ad4de75c119e9476683dc4a0f - Somente
192.168.1.28:20000
Se aparecer FALHA_RESTAURADA ou qualquer outro erro, não reinicie e acione a engenharia.
3. Reiniciar o computador físico
sync
/sbin/shutdown -r nowAcompanhe o POST, a inicialização do Linux e a carga completa do SASE. Se não retornar, não faça sucessivos ciclos de energia.
4. Conferência passiva após o boot
sleep 60
BKP_SASE=$(cat /root/sase_backups/ULTIMO_BACKUP_PLS3.txt)
md5sum -c "$BKP_SASE/base_nativa.md5"
date
ps ax | grep -i -E 'canpger[.]exe|dnppger[.]exe|ihmpger[.]exe|coe[.]exe'
grep -H '^[*] CONEXAO =' /etc/opt/sase-6.5.0.0/pls3/*.can
netstat -tn 2>/dev/null | grep '192[.]168[.]1[.]28:20000' | grep -i ESTABLISHED || true
netstat -tn 2>/dev/null | grep -E '192[.]168[.]1[.](11|40|50):20000' || true- Todos os hashes da base nativa e de
/etc/ntp.confmostramOK. - Somente
canpger.exe 1ednppger.exe 1; nenhuma instância de canal 2. - Uma sessão estabelecida com
192.168.1.28:20000; nenhuma sessão com.11,.40ou.50. - Tela com WAGO, 11 inversores, Siemens, transformador e meteorologia atualizando.
- Tensões, frequência e precipitação com uma casa decimal; acumulados diários com duas.
- Texto
P/COMANDAR CG 01,A=ABRIReF=FECHARvisível, sem abrir o menu.
Não use Alt+C e não digite CG 01.
SE ALGO DIFERIR
Retorno por árvores limpas
Não extraia o backup por cima da configuração nova. Prepare cópias limpas e promova-as somente após validar os dois arquivos.
BKP_RETORNO=$(cat /root/sase_backups/ULTIMO_BACKUP_PLS3.txt)
test -s "$BKP_RETORNO/etc_pls3.tgz" && test -s "$BKP_RETORNO/var_pls3.tgz" && echo BACKUPS_PRESENTES
tar -tzf "$BKP_RETORNO/etc_pls3.tgz"
tar -tzf "$BKP_RETORNO/var_pls3.tgz"
TAG_RETORNO=$(date +%Y%m%d_%H%M%S)
RESTORE_SASE=/root/sase_restore/$TAG_RETORNO
mkdir -p "$RESTORE_SASE/etcbase" "$RESTORE_SASE/varbase"
echo "$TAG_RETORNO" > /root/sase_restore/TAG_RETORNO_ATUAL.txt
tar -xzpf "$BKP_RETORNO/etc_pls3.tgz" -C "$RESTORE_SASE/etcbase"
tar -xzpf "$BKP_RETORNO/var_pls3.tgz" -C "$RESTORE_SASE/varbase"
test -d "$RESTORE_SASE/etcbase/pls3" && test -d "$RESTORE_SASE/varbase/pls3" && echo RESTAURACAO_PREPARADASó prossiga com BACKUPS_PRESENTES e RESTAURACAO_PREPARADA. Em janela autorizada:
sync
telinit 3Entre novamente como root no console físico e recupere a árvore de retorno antes de promover:
TAG_RETORNO=$(cat /root/sase_restore/TAG_RETORNO_ATUAL.txt)
RESTORE_SASE=/root/sase_restore/$TAG_RETORNO
sleep 5
ps ax | grep -i -E 'canpger[.]exe|dnppger[.]exe|ihmpger[.]exe|coe[.]exe' || true
sh -c '
set -e
RESTORE="$1"; TAG="$2"
ATIVO=/etc/opt/sase-6.5.0.0/pls3; ATIVO_FALHA=/etc/opt/sase-6.5.0.0/pls3.falha_$TAG
RUNTIME=/var/opt/pls3; RUNTIME_FALHA=/var/opt/pls3.falha_$TAG
mv "$ATIVO" "$ATIVO_FALHA"
if mv "$RESTORE/etcbase/pls3" "$ATIVO"; then
mv "$RUNTIME" "$RUNTIME_FALHA"
if mv "$RESTORE/varbase/pls3" "$RUNTIME"; then echo RESTAURACAO_OK; exit 0; fi
mv "$RUNTIME_FALHA" "$RUNTIME"
fi
[ -d "$ATIVO" ] && mv "$ATIVO" "$ATIVO.restore_falha"
mv "$ATIVO_FALHA" "$ATIVO"
echo FALHA_RESTAURADA
exit 1
' sh "$RESTORE_SASE" "$TAG_RETORNO"Reinicie somente se aparecer RESTAURACAO_OK. Se aparecer FALHA_RESTAURADA, não reinicie e acione a engenharia.
sync
/sbin/shutdown -r nowDepois do boot, repita a conferência de processos, conexões, tela e NTP.
ENCERRAMENTO
Registro obrigatório da atividade
- Nome do operador, data, horário e identificação do PC SASE.
- SHA-256 e MD5 do overlay conferidos.
- Hashes dos quatro scripts nativos e de
/etc/ntp.confantes/depois. - Caminho completo do backup.
- Resultado do
consiste.exe: 44 analógicos, 128 estados e 2 comandos. - Confirmação da conexão exclusiva SASE → WAGO e de zero sessões diretas.
- Resultado da conferência visual e eventual rollback.