用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill omron-sysmac命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | omron-sysmac |
| description | Programmer sous Sysmac Studio et intégrer EtherCAT. |
| version | 2.0.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| platforms | ["linux","macos","windows"] |
| metadata | {"EVA":{"tags":["omron","sysmac-studio","ethercat","fins","plc","industrial-automation","nj","nx","motion-control","iec-61131-3","servomoteur","cip"],"related_skills":["industrial-protocols","systematic-debugging","plc-converter","automation-linter"]}} |
Les contrôleurs de machine Omron des gammes NJ (Machine Automation Controller) et NX (NX7, NX5) représentent la plateforme d'automatisation moderne d'Omron, en remplacement des anciennes séries CJ1/CS1/C200H. Ils se programment via l'environnement unifié Sysmac Studio, conforme à la norme CEI 61131-3 avec des extensions propriétaires Omron.
[IHM (NA Series)] [SCADA / ERP]
│ │
▼ ▼
┌─────────────────────────────────┐
│ Sysmac Studio │ ← Environnement de développement
│ (Programmation, Configuration) │
└─────────────────────────────────┘
│ │
▼ ▼
┌─────────────────────────────────┐
│ NJ/NX Controller │ ← Logique API + Motion + Sécurité
│ ┌──────────┬──────────┐ │
│ │ EtherCAT │ EtherNet │ │ ← Réseaux de terrain
│ │ (Servos, │ /IP (CIP)│ │
│ │ E/S NX) │ (SCADA) │ │
│ └──────────┴──────────┘ │
└─────────────────────────────────┘
D0, HR0 des anciennes gammes). Utilisation de tags textuels nommés typés.À utiliser lorsque l'utilisateur demande :
Sous Sysmac Studio, les variables doivent être déclarées dans la table des variables (Data Type : BOOL, INT, DINT, REAL, STRING, etc.) avant d'être utilisées en ST, contrairement à d'autres plateformes CEI 61131-3.
| Portée | Déclaration | Préfixe recommandé | Exemple |
|---|---|---|---|
| Globale | Global Variable Table | g_ | g_Conv_Start_Cmd |
| Locale à un POU | VAR | (aucun) | Temp_Counter |
| Entrée | VAR_INPUT | in_ | in_Start_Command |
| Sortie | VAR_OUTPUT | out_ | out_Motor_Run |
| Entrée/Sortie | VAR_IN_OUT | io_ | io_Status_Word |
| Interne | VAR | stat_ | stat_Timer_Active |
| Constante | VAR CONSTANT | c_ (UPPER) | c_MAX_SPEED |
// --- LOGIQUE DE DÉMARRAGE ET SÉCURITÉ CONVOYEUR ---
// Variables globales préalablement déclarées dans la table :
// g_Conv_Start_Cmd : BOOL ; Commande marche depuis IHM
// g_Conv_Stop_Cmd : BOOL ; Commande arrêt depuis IHM
// g_Conv_Interlock : BOOL ; Verrouillage sécurité machine
// g_Conv_Fault : BOOL ; Défaut thermique ou retour vitesse
// g_Conv_Motor_Out : BOOL ; Sortie physique relais moteur
// g_Conv_Running : BOOL ; Retour d'état marche (capteur)
PROGRAM Convoyeur_Control
VAR
Timer_Running_Fault : TON; // Temporisation défaut retour vitesse
Fault_Count : INT := 0;
END_VAR
// Auto-maintien de la commande de marche
IF (g_Conv_Start_Cmd OR g_Conv_Motor_Out)
AND NOT g_Conv_Stop_Cmd
AND g_Conv_Interlock
AND NOT g_Conv_Fault THEN
g_Conv_Motor_Out := TRUE;
ELSE
g_Conv_Motor_Out := FALSE;
END_IF;
// Diagnostic : si commande active mais pas de retour moteur
IF g_Conv_Motor_Out AND NOT g_Conv_Running THEN
Timer_Running_Fault(IN := TRUE, PT := T#3s);
ELSE
Timer_Running_Fault(IN := FALSE);
END_IF;
IF Timer_Running_Fault.Q THEN
g_Conv_Fault := TRUE;
Fault_Count := Fault_Count + 1;
END_IF;
// --- MOUVEMENT ABSOLU D'UN SERVOMOTEUR VERS UNE POSITION ---
// Configuration préalable dans Sysmac Studio :
// - Axe : Servo_Axe_X (type : Servo Drive, raccordé EtherCAT)
// - Unité : mm, vitesse max : 500 mm/s, accélération : 1000 mm/s²
MC_Power_Instance(
Axis := Servo_Axe_X,
Enable := TRUE,
Enable_Positive := TRUE,
Enable_Negative := TRUE,
Busy => MC_Power_Busy,
Status => MC_Power_Status,
Error => MC_Power_Error
);
// Positionnement absolu
MC_MoveAbsolute_Instance(
Axis := Servo_Axe_X,
Execute := g_Demande_Position,
Position := g_Position_Cible, // En mm (variable DINT)
Velocity := 300.0, // Vitesse en mm/s
Acceleration := 1000.0, // Accélération mm/s²
Deceleration := 1000.0, // Décélération mm/s²
Jerk := 5000.0, // Jerk mm/s³ (optionnel)
Done => g_Move_Done,
Busy => g_Move_Busy,
Active => g_Move_Active,
CommandAborted => g_Move_Aborted,
Error => g_Move_Error
);
| Critère | EtherNet/IP (CIP) | FINS (Omron propriétaire) |
|---|---|---|
| Standard | Ouvert (ODVA) | Propriétaire Omron |
| Découverte de tags | Automatique (CIP Path) | Manuelle (adresses mémoire) |
| Performances | Élevé (implicite/explicite) | Modéré |
| Configuration Sysmac | Aucune (import direct) | Allocation AT mémoire requise |
| Idéal pour | SCADA moderne (Ignition, Kepware) | Systèmes legacy, échange simple |
# Exemple : Lecture de tags NJ/NX via pylogix (CIP)
from pylogix import PLC
with PLC() as comm:
comm.IPAddress = "192.168.250.1"
# Lecture d'une variable globale
result = comm.Read("g_Conv_Motor_Out")
print(f"g_Conv_Motor_Out = {result.Value}")
# Lecture d'un programme structure
result = comm.Read("Convoyeur_Control.Fault_Count")
print(f"Fault_Count = {result.Value}")
Sur NJ/NX, le protocole FINS nécessite une allocation explicite via l'onglet Memory Settings de Sysmac Studio :
Exemple : Associer la variable g_Recipe_ID à l'adresse D100
1. Dans Sysmac Studio, ouvrir Controller Settings → Memory Settings
2. Ajouter l'entrée : g_Recipe_ID AT %D100
3. Télécharger la configuration vers le contrôleur
# Exemple de lecture FINS via Python (bibliothèque omron-fins)
# pip install omron-fins
from omron_fins import OmronFins
conn = OmronFins("192.168.250.1", port=9600)
conn.destination_node = 1 # Node ID du NJ/NX configuré dans Sysmac
# Lecture de D100 (FINS address)
value = conn.read("D100", dtype="int16")
print(f"D100 = {value}")
| Configuration | Période | Usage typique |
|---|---|---|
| Primaire (Primary) | 0.5–4 ms | Logique de mouvement, régulation |
| Secondaire (Secondary) | 5–50 ms | Logique machine, communication MES |
| Tâche d'initialisation | — | Code exécuté au démarrage |
Dépassement du temps de tâche EtherCAT (Task Period Exceeded) :
Incompatibilité de version de firmware (SD Memory Card Backup) :
Mauvaise gestion des adresses FINS allouées (AT) :
Absence de terminaison EtherCAT :
Confusion entre déplacement relatif et absolu (MC Blocks) :
MC_MoveAbsolute quand la position cible dépend de la position courante (il faut MC_MoveRelative). L'axe se positionne toujours au même point absolu, quel que soit son point de départ.MC_MoveAbsolute : Position absolue dans le repère machine (ex: 150.0 mm).%D100).ErrorID, ErrorIDEx) des blocs MC sont systématiquement vérifiées.MC_MoveRelative : Incrément de position (ex: avancer de +50.0 mm).MC_MoveVelocity : Vitesse constante sans position cible.