Bonjour,

J'ai fait un code qui permet lorsqu'un maitre modbus interroge mon appareil, mon appareil répond à cette demande. Ma problématique étant que cela fonctionne bien une lecture d'un seul registre (uint32 ou float) mais si le maitre demande plusieurs registre dans la même requête, cela ne fonctionne plus et je suis bloqué.
J'ai tenté de faire des boucles for pour alimenter le payload mais à chaque fois il met jette.
Auriez vous une idée :

Le problème est quand msg.modbus.quantity est > à 2, la réponse envoyée n'est pas complète
j'ai essayer d'inserer un for entre la ligne 7 et 8 mais cela ne fonctionne pas

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
if msg.modbus.quantity == 2 then -- pour le moment à 2 pour limiter à une lecture de d'un registre (float ou unint32), la finalité msg.modbus.quantity >= 2
    local entry = global.modbusmapping[msg.modbus.start] --entry récupère dans ma table les entrées correspondantes
    -- entry contien les champs suivants :
    -- {encoding = 'float or unint32', datakey = 'nomdevariable'},
 
        if entry then
		    msg.payload = global.data[entry.datakey] --le payload devient égal à la valeur "datakey" stockée dans ma table modbusmapping
			local encoding = entry.encoding --je regarde l'encodage souhaité présent aussi dans ma table modbusmapping
			if encoding == 'float' then sendTo(2, msg) --j'envoi le payload sur la sortie appropriée
			elseif encoding == 'uint32' then sendTo(1, msg) --j'envoi le payload sur la sortie appropriée
			end
        else
          msg.payload = 0
          sendTo(1, msg)
        end
end