Proyecto: Técnicas IDE Autor: Christian Yáñez (YF-Controls)
- vscode
- python v3.13.2 os last version of v3.13.x
- chrome
- CANoe v15 SP6 64Bit
Abra PowerShell como administrador
Get-ExecutionPolicy
Set-ExecutionPolicy Unrestricted
Yes
- Chrome
- vscode, open and install these packages
- autoDocstring - Python documentations (Nils Werner)
- Markdown Preview Enhanced (Yiyi Wang).
- Pylance (Microsoft).
- Python (Microsoft).
- Python Debugger (Microsoft).
- Python Indent (Kevin Rose).
- python as local user
- CANoe v15 SP6 64Bit
Abra la consola de comandos
como administrador
python.exe -m pip install --upgrade pip
pip install pywin32
pip install psutil
pip install py_canoe
Para instalar el servicio vaya a la ruta donde se encuentra canoe_proxy_service.py
, por defecto debería estar en c:\CANoeProxy\
.
Abra la consola de comandos
como administrador.
Ejecute el siguiente código:
python canoe_proxy_service.py install
De forma manual continuaremos con la configuración:
Seguir manual en doc/A06_ConfigService
Para desinstalar el servicio abra la consola de comandos
como administrador.
Ejecute el siguiente código:
python canoe_proxy_service.py remove
En caso de que no se pueda eliminar el servicio con python, abra la consola de comandos
como administrador.
Ejecute el siguiente código:
sc delete "Nombre del servicio tal como está en la UI de Servicios"
Si el nombre del comando lleva espacios se ha de poner entre comillas
- Abrir
Services
- Busque
CANoe Proxy Service
- Habilitar como
auto
- Clic en
Log On
- Check en
Local system account
- Check en
allow service to interact with desktop
- Abra
Event viewer
- Vaya a
Windows logs
- Vaya a
Application
- Busque
CANoe Proxy Service
- Open Windows Defender Firewall with Advanced Security
- Go to inbound rules
- New Rule
- Select Port
- Select TCP
- Specific local ports: 3000 or same port in config.json
- Allow the connection
- Check domain, Private, Public
- Set name: Can Oe Handler
- Finish
Palabras clave para entender los comandos.
DCU
: Controlador de la puerta.
sw
: Versión del software de la DCU
.
hw
: Versión del hardware de la DCU
.
sn
: Número de serie de la DCU
.
Lista de tipos de la DCU
para MMA
:
dcu_type | descripción |
---|---|
DMFL_MMA |
Puerta delantera izquierda (conductor) |
DMFR_MMA |
Puerta delantera derecha (pasajero) |
DMRL_MMA |
Puerta trasera izquierda (pasajero) |
DMRR_MMA |
Puerta trasera derecha (pasajero) |
Lista de tipos de la DCU
para 223
:
dcu_type | descripción |
---|---|
DMD223 |
Puerta delantera izquierda (conductor) |
DMP223 |
Puerta delantera derecha (pasajero) |
DMRL223 |
Puerta trasera izquierda (pasajero) |
DMRR223 |
Puerta trasera derecha (pasajero) |
Este comando hace la petición a la DCU
para obtener sw
, hw
, sn
.
El parámetro dcu_type
es requerido.
- PLC command:
Read_info {dcu_tpye}
- Vector response:
level | response | description |
---|---|---|
Done | {sw},{hw},{sn} |
String con sw , hw y sn separados por comas |
Error | Set_target ZenzefiError |
Fallo de autentificación |
Error | Set_target ERROR Target not connected |
Fallo al no encontrar DCU |
Error | Set_target ERROR Invalid command |
Comando no válido |
Este comando sirve para subir, bajar y parar la ventana conectada a la DCU
.
El parámetro action
es requerido:
action | description |
---|---|
UP |
Orden para subir la ventana |
DOWN |
Orden para bajar la ventana |
STOP |
Orden para parar la ventana |
- PLC command:
Window_control {action}
- Vector response:
level | response | description |
---|---|---|
Done | Action_type {action} {dcu_type} OK |
El comando ha sido procesado correctamente |
Error | Set_target ERROR Target not connected |
Fallo al no encontrar DCU |
Error | Set_target ERROR Invalid command |
Comando no válido |
Importante: La respuesta para este comando no significa que se está ejecutando la acción sino que el comando ha sido procesado correctamente.
Este comando sirve para bloquear o desbloquear una puerta conectada a la DCU
.
El parámetro action
es requerido:
action | description |
---|---|
LOCK |
Orden para bloquear la puerta |
UNLOCK |
Orden para desbloquear la puerta |
- PLC command:
DLK_IOControl {action}
- Vector response:
level | response | description |
---|---|---|
Done | DLK_IOControl {action} {dcu_type} OK |
El comando ha sido procesado correctamente |
Error | Set_target ERROR Target not connected |
Fallo al no encontrar DCU |
Error | Set_target ERROR Invalid command |
Comando no válido |
Importante: La respuesta para este comando no significa que se está ejecutando la acción sino que el comando ha sido procesado correctamente.
Palabras clave para entender los comandos.
cfg_id
: Es el identificador del Panel que se quiere abrir. cfg_id
está descrito en el fichero config.json
en canOe
> cfgs
> id
cfg_path
: Es la ruta donde el ficher .cfg del Panel está almacenado, la referencia a este fichero está descrita en el fichero config.json
en canOe
> cfgs
> path
canoe_exe
: Es el nombre del ejecutable de Vector CANoe.exe, la referencia a este fichero está descrita en el fichero config.json
en canOe
> exe
Este comando muestra los comandos disponibles para este servicio.
- PLC command:
help
- Service response:
level | response |
---|---|
Done | 0000,Available commands: status, start {cfg_id}, close, help |
Este comando muestra el estado de Vector CANoe.exe
- PLC command:
status
- Service response:
level | response |
---|---|
Done | 0000,{cfg_id} {cfg_file} measurement running |
Warning | 7000,{canoe_exe} closed |
Warning | 7001,No cfg file loaded |
Warning | 7002,{cfg_id} {cfg_file} waiting to start measurement |
Error | 8000,Too many open {canoe_exe} instances |
Este comando inica una medición en Vector CANoe.exe
con el fichero cfg_path
cargado.
start
necesita un argumento cfg_id
.
- PLC command:
start {cfg_id}
- Service response:
level | response |
---|---|
Done | 0000,{cfg_id} {cfg_file} measurement running |
Error | 8100,Missing parameters |
Error | 8101,Too many parameters |
Error | 8102,Unknown cfg_id: {cfg_id} |
Error | 8110,{cfg_id} Impossible to start measurement, file: {cfg_path} |
Error | 8111,{cfg_id} Some error when opening file {cfg_path} |
Este comando cierra inmediatamente Vector CANoe.exe
.
- PLC command:
close
- Service response:
level | response |
---|---|
Done | 0000,{canoe.exe} closed |
Error | 8200,Impossible to close {canoe_exe}. Force manually! |
- PLC command:
random text as command
- Service response:
level | response |
---|---|
Error | 8FFF,Unknown command |
Para poder comunicar con el servicio
y con CANoe
el PLC
necesita crear dos sockets clientes TCP
.
Un socket sirve para comunicar con el servicio
a través del puerto 3000
. Este puerto se puede configurar en el fichero config.json
en service
> port
. También es posible limitar el adaptador de red por el que va a escuchar en service
> host
, recuerde que 0.0.0.0
habilita la escucha por todos los adaptadores de red del PC.
El otro socket sirve para comunicar con CANoe
una vez arrancado gracias al servicio
, aunque en config.json
se puede configurar el puerto del servidor para cada fichero cfg
en canOe
> cfgs
> port
, el puerto está definido internamente en el fichero cfg
facilitado por ANTOLIN
.
Ejemplo de secuencia de comandos:
# Service socket: 3000
PLC command: start MMA
response: 0000,MMA c:\CANoeProxy\cfg\MMA_Updated\BODY1_15.cfg measurement running
# CANoe socket: 4242
PLC command: Read_info DMFR_MMA
response: xxxx,yyyy,zzzzzz
Enlace de vector para el cableado
Resistencia 120 ohms entr 1 y 8
Channel (a)1 (can/lin) (este es el canal que va a la puerta)
DB9 --------------------------------> DCU
can L 2 (marron) pin 1 (gris)
gnd 3 blanco
can H 7 (verde) pin 2 (verde)
Channel (b)3 (can)
DB9 --------------------------------> DCU
can L 1 (marron) pin 1 (gris)
gnd 6 blanco
can H 8 (verde) pin 2 (verde)
Hacer login offline de vez en cuando.
Hacer pantalla de advertencia para que el operario haga login offline.
web: https://127.0.0.1:61000/#/zenzefi/ui/error/401 Usuario: S1AZENZE Contraseña: GA0525,Prod
Usuario: admin Contraseña: ide
"%(asctime)s [%(levelname)-8s] %(message)-80s [%(name)s , %(funcName)s , %(lineno)d]"
"%(asctime)s [%(levelname)-8s] [%(name)s , %(funcName)s , %(lineno)d] %(message)s"
Para actualizar el repositorio desde Github
hay que hace un pull
.