Syntaxe des requêtes POST

Avec des requêtes POST, les tableaux de données à lire ou dans lesquels des données vont être écrites peuvent être spécifiées dans le corps de la requête HTTP.

Syntaxe des requêtes POST de base

Les requêtes POST contiennent l’adresse IP, le numéro du port et la commande plcpost dans l’URL. Les données utiles doivent être spécifiées dans le corps HTTP au format JSON.

Syntaxe

Pour des appels externes : http://IP_OF_DEVICE:API_PORT/plcpost

Exemple : http://192.168.100.155:2000/plcpost

Pour des appels internes lorsque le code a été chargé dans le FP-I4C : plcpost

Paramètres

IP_OF_DEVICE

Adresse IP du FP-I4C

API_PORT

Port REST API défini sur la page REST API/serveur HTTP

Les données utiles doivent être structurées comme dans l’exemple.

Exemple

Requêtes multiples : Lire les valeurs INTEGER dans DT0 à DT9, lire une chaîne de caractères à partir de DT677, lire les valeurs booléennes de YF à Y18, écrire les valeurs INTEGER 1 à 10 dans DT100 à DT109

  • {
  •      "req":[
  •           {
  •                "area": "dt",
  •                "type": "int",
  •                "start": 0,
  •                "count": 10
  •           },
  •           {
  •                "area": "dt",
  •                "type": "string",
  •                "start": 677,
  •           },
  •           {
  •                "area": "y",
  •                "type": "bool",
  •                "start": f,
  •                "count": 10
  •           },
  •           {
  •                "area": "dt",
  •                "type": "int",
  •                "start": 100,
  •                "count": 10,
  •                "value": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  •           },
  •      ],
  •      "interface": 0,
  •      "station": 0
  • }

Éléments racines

"req"

Liste de requêtes (array), 20 objets max.

"interface" (option)

Port COM de l’automate

  • 0 : COM1 (RS232)
  • 1 : COM2 (RS232/RS485)
  • 2 : COM3 (USB)
  • 3 : INTERNE (mémoire interne du FP-I4C)
  • 4 : COM4 (Ethernet)

Veillez à ce que l’interface spécifiée ait été activée sur la page Interface COM et qu’un port ait été ouvert pour cette interface sur la page Port.

Si le paramètre est omis, l’interface définie dans Interface COM > Interface de contrôle des services > Interface de communication avec API est utilisée.

"station" (option)

Numéro de station : 0 à 99 (utilisez 0 pour USB et RS232)

Si le paramètre est omis, le numéro de station défini dans Interface COM > Interface de contrôle des services > Interface de communication avec API > Numéro de station de l’API est utilisé.

Liste de requêtes

La liste de requêtes "req" est un tableau (array) d’objets. Chaque objet représente une requête et peut contenir les propriétés suivantes :

"area"

Zone mémoire des données. Zones valides (insensibles à la casse) :

DT, FL (pour FP2/FP2SH et MEWTOCOL uniquement), LD, WR, WX, WY, WL, R, X, Y, L

"type"

Type de données. Types données valides (insensibles à la casse) :

INT, UINT, DINT, UDINT, REAL, STRING, ANY (en lecture seule pour les registres, renvoie tous les types de données sauf BOOL), BOOL

"start"

Adresse de départ du registre ou du drapeau. Pour les registres, ce doit être un nombre. Pour les drapeaux booléens, ce doit être une chaîne de caractères.

"count"

Le nombre de valeurs qui doivent être lues ou écrites. Cette propriété n’est pas nécessaire pour le type de données STRING.

"value" (écriture des données)

La/les valeur(s) à écrire. Cette propriété est utilisée uniquement pour l’écriture. En son absence, on considère qu’il s’agit de lecture. La valeur peut être un type de données individuel ou un tableau (array). Veillez à ce que la valeur de la propriété "count" corresponde au nombre de valeurs à écrire.

Exemples :

  • "value" : true ou 1, "count" = 1 : Basculer un bit sur TRUE
  • "value" : false ou 0, "count" = 1 : Basculer un bit sur FALSE
  • "value" : [1, 1, 1, 1], "count" = 4 : Écrire quatre valeurs
  • "value" : 123, "count" = 1 : Écrire un nombre
  • "value" : "Écrire cette chaîne de caractères" : Écrire une chaîne de caractères ("count" n’est pas nécessaire)
  • "value" : 188.33, "count" = 1 : Écrire un nombre à virgule flottante
  • "value" : [13.87, 20.8, 388.7], "count" = 3 : Écrire trois nombres à virgule flottante

Points clés

  • La liste de requêtes peut contenir différentes requêtes (lecture, écriture, différents types de données, etc.).

  • Dans la réponse, l’ordre des données doit être identique à celui de la liste de requêtes.

  • Pour écrire des valeurs booléennes, utilisez les mots-clés "true"/"false" ou "1"/"0" (tous sans guillemets).

  • Les valeurs des propriétés "area" et "type" ne sont pas sensibles à la casse (par ex. "dt", "Dt" et "DT" fonctionneront).

  • Pour lire une chaîne de caractères, vous n’avez pas besoin de spécifier la propriété de "count".

  • La valeur de la propriété de "start" doit être un nombre pour les registres (DT, LD, WX, etc.) et une chaîne de caractères pour les drapeaux (R, Y, etc.)

  • Si vous souhaitez utiliser l’interface et le numéro de station définis dans l’interface web FP-I4C, les propriétés de "interface" et de "station" ne doivent pas être indiquées.

Restrictions

  • "req" : Le nombre d’objets par liste de requêtes est limité à 20.

  • "count" : Le nombre maximum de registres ou de drapeaux qui peuvent être lus ou écrits est limité à 100.

  • La longueur maximale de la chaîne de caractères qui peut être écrite est de 1000 caractères.

Réponse à la requête de lecture POST

La réponse à une requête de lecture POST est une chaîne de caractères JSON qui contient les informations d’erreur et les données de la requête.

Chaque réponse comprend la propriété de err, err_msg et data. La propriété de err est TRUE, si une erreur est apparue, et FALSE s’il n’y a pas d’erreur. La propriété de err_msg est un message d’erreur si la propriété de err est TRUE ou elle est vide si err est FALSE. La propriété de data est un tableau (array) contenant les données dans le même ordre que dans la requête.

  • {
  •      "err": false,
  •      "err_msg": "",
  •      "data": []
  • }

La liste de requêtes peut contenir différentes requêtes (lecture, écriture, différents types de données, etc.). Cependant, le format de la réponse diffère légèrement selon le type de requête.

Données de la réponse

Le tableau des données (array) de la réponse est de longueur identique à celle de la requête et suit le même ordre. Pour chaque objet, la réponse comprend la propriété de err, err_msg et err_code. La propriété de err est TRUE, si une erreur est apparue, et FALSE s’il n’y a pas d’erreur. La propriété de err_msg est un message d’erreur si la propriété de err est TRUE ou elle est vide si err est FALSE. Le code d’erreur qui est renvoyé dépend du protocole utilisé (MEWTOCOL, MEWTOCOL7 ou Modbus). La propriété de request contient la zone mémoire des requêtes et l’adresse de départ. Les valeurs des données sont renvoyées avec le type de données en tant que tableau (array, pour plusieurs valeurs) ou en tant que valeur individuelle. Pour les valeurs booléennes, la propriété de state renvoie l’état (0 ou 1) en tant que tableau (array) pour un intervalle de drapeaux ou en tant que valeur individuelle.

Exemple 1

Une seule requête : Lire les valeurs INTEGER dans DT10 à DT19

  • {
  •      "req":[
  •           {
  •                "area": "dt",
  •                "type": "int",
  •                "start": 10,
  •                "count": 10
  •           }
  •      ]
  • }

Réponse :

La réponse contient le tableau de la requête (type de données "int” et count = 10). Avec count = 1, la réponse contiendrait un seul nombre.

  • {
  •      "err": false,
  •      "err_msg": "",
  •      "data": [
  •           {
  •                "err": false,
  •                "err_msg": "",
  •                "err_code": 0,
  •                "request": "DT10",
  •                "int": [
  •                     20,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                ]
  •           }
  •      ]
  • }

Exemple 2

Requêtes multiples : Lire la chaîne de caractères dans DT673, lire les valeurs de tout type de données dans DT100 à DT109, lire les valeurs booléennes dans Y0 à Y15

  • {
  •      "req":[
  •           {
  •                "area": "dt",
  •                "type": "string",
  •                "start": 673,
  •           },
  •           {
  •                "area": "dt",
  •                "type": "any",
  •                "start": 100,
  •                "count": 10
  •           },
  •           {
  •                "area": "y",
  •                "type": "bool",
  •                "start": 0,
  •                "count": 16
  •           }
  •      ]
  • }

Réponse :

Tous les types de données sauf BOOL sont renvoyés pour le type = “any”.

  • {
  •      "err": false,
  •      "err_msg": "",
  •      "data": [
  •           {
  •                "err": false,
  •                "err_msg": "",
  •                "err_code": 0,
  •                "request": "DT673",
  •                "string": "This is a string"
  •           },
  •           {
  •                "err": false,
  •                "err_msg": "",
  •                "err_code": 0,
  •                "request": "DT100",
  •                "int": [
  •                     1,
  •                     2,
  •                     3,
  •                     4,
  •                     5,
  •                     6,
  •                     7,
  •                     8,
  •                     9,
  •                     10,
  •      ],
  •                "uint": [
  •                     1,
  •                     2,
  •                     3,
  •                     4,
  •                     5,
  •                     6,
  •                     7,
  •                     8,
  •                     9,
  •                     10,
  •      ],
  •                "udint": [
  •                     131073,
  •                     262147,
  •                     393221,
  •                     524295,
  •                     655369,
  •      ],
  •                "dint": [
  •                     131073,
  •                     262147,
  •                     393221,
  •                     524295,
  •                     655369,
  •      ],
  •                "hex": [
  •                     0001,
  •                     0002,
  •                     0003,
  •                     0004,
  •                     0005,
  •                     0006,
  •                     0007,
  •                     0008,
  •                     0009,
  •                     000A,
  •      ],
  •                "real": [
  •                     5.969307950918661e-39,
  •                     6.061144848375116e-39,
  •                     6.152981745831572e-39,
  •                     6.244818643288028e-39,
  •                     6.336655540744483e-39,
  •      ],
  •                "string": "",
  •                "request": "DT100"
  •           },
  •           {
  •                "err": false,
  •                "err_msg": "",
  •                "err_code": 0,
  •                "request": "Y0",
  •                "state": [
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                     0,
  •                ]
  •           }
  •      ]
  • }
Thèmes apparentés

Réponse à la requête d’écriture POST

La réponse à une requête d’écriture POST est une chaîne de caractères JSON qui contient les informations d’erreur.

Chaque réponse comprend la propriété de err, err_msg et data. La propriété de err est TRUE, si une erreur est apparue, et FALSE s’il n’y a pas d’erreur. La propriété de err_msg est un message d’erreur si la propriété de err est TRUE ou elle est vide si err est FALSE. La propriété de data est un tableau (array) contenant les données dans le même ordre que dans la requête.

  • {
  •      "err": false,
  •      "err_msg": "",
  •      "data": []
  • }

La liste de requêtes peut contenir différentes requêtes (lecture, écriture, différents types de données, etc.). Cependant, le format de la réponse diffère légèrement selon le type de requête.

Données de la réponse

Le tableau des données (array) de la réponse est de longueur identique à celle de la requête et suit le même ordre. Pour chaque objet, la réponse comprend la propriété de err et err_code. La propriété de err est TRUE, si une erreur est apparue, et FALSE s’il n’y a pas d’erreur. Le code d’erreur qui est renvoyé dépend du protocole utilisé (MEWTOCOL, MEWTOCOL7 ou Modbus). La propriété de request contient la zone mémoire des requêtes et l’adresse de départ.

Exemple

Requêtes multiples : Écrire les valeurs INTEGER 22 et 33 dans DT10 à DT11, définir Y0 sur TRUE et Y1 sur FALSE, écrire la valeur REAL 22.88 dans DT20

  • {
  •      "req":[
  •           {
  •                "area": "dt",
  •                "type": "int",
  •                "start": 10,
  •                "count": 2,
  •                "value": [22, 33]
  •           },
  •           {
  •                "area": "y",
  •                "type": "bool",
  •                "start": 0,
  •                "count": 2,
  •                "value": [1, false]
  •           },
  •           {
  •                "area": "dt",
  •                "type": "real",
  •                "start": 20,
  •                "count": 1,
  •                "value": 22.88
  •           }
  •      ]
  • }

Réponse :

La réponse ne contient pas les valeurs des données, elle indique uniquement si la requête d’écriture a été exécutée avec succès ou si elle a échoué.

  • {
  •      "err": false,
  •      "err_msg": "",
  •      "data": [
  •           {
  •                "request": "DT10",
  •                "err": false,
  •                "err_code": 0,
  •           },
  •           {
  •                "request": "Y0",
  •                "err": false,
  •                "err_code": 0,
  •           },
  •           {
  •                "request": "DT20",
  •                "err": false,
  •                "err_code": 0,
  •           }
  •      ]
  • }
Thèmes apparentés