Problem with function 16 in Spacelynk modbus - Kilogica - 23.03.2022
Hello,
I'm trying to control a Hidew DOS dehumidifier via Modbus, I made this profile:
Code: {
"product_code": "DOS",
"manufacturer": "HIDEW",
"description": "Deumidificatore DOS",
"mapping":
[
{ "name": "Unità On/Off",
"bus_datatype": "bool",
"address": 0,
"type": "coil",
"write_multiple" : true,
"writable": true
},
{ "name": "Forzatura Deumidifica",
"bus_datatype": "bool",
"address": 1,
"type": "coil",
"write_multiple" : true,
"writable": true
},
{ "name": "Abilititazione Forzatura Deumidifica",
"bus_datatype": "bool",
"address": 2,
"type": "coil",
"write_multiple" : true,
"writable": true
},
{ "name": "Forzatura Riscaldamento",
"bus_datatype": "bool",
"address": 3,
"type": "coil",
"write_multiple" : true,
"writable": true
},
{ "name": "Abilitazione Forzatura Riscaldamento",
"bus_datatype": "bool",
"address": 4,
"type": "coil",
"write_multiple" : true,
"writable": true
},
{ "name": "Reset Allarmi",
"bus_datatype": "bool",
"address": 5,
"type": "coil",
"write_multiple" : true,
"writable": true
},
{ "name": "Reset pulizia filtri",
"bus_datatype": "bool",
"address": 6,
"type": "coil",
"write_multiple" : true,
"writable": true
},
{ "name": "Forzatura Raffreddamento",
"bus_datatype": "bool",
"address": 7,
"type": "coil",
"write_multiple" : true,
"writable": true
},
{ "name": "Abilitazione Forzatura Raffreddamento",
"bus_datatype": "bool",
"address": 8,
"type": "coil",
"write_multiple" : true,
"writable": true
},
{ "name": "Stato compressore",
"bus_datatype": "bool",
"address": 0,
"type": "discreteinput",
"writable": false
},
{ "name": "Stato valvola acqua",
"bus_datatype": "bool",
"address": 1,
"type": "discreteinput",
"writable": false
},
{ "name": "Stato resistenza elettrica",
"bus_datatype": "bool",
"address": 2,
"type": "discreteinput",
"writable": false
},
{ "name": "Presenza valvola acqua",
"bus_datatype": "bool",
"address": 3,
"type": "discreteinput",
"writable": false
},
{ "name": "Presenza resistenza elettrica",
"bus_datatype": "bool",
"address": 4,
"type": "discreteinput",
"writable": false
},
{ "name": "Presenza allarme",
"bus_datatype": "bool",
"address": 5,
"type": "discreteinput",
"writable": false
},
{ "name": "Filtri da pulire",
"bus_datatype": "bool",
"address": 6,
"type": "discreteinput",
"writable": false
},
{ "name": "Presenza ventilatori elettronici",
"bus_datatype": "bool",
"address": 7,
"type": "discreteinput",
"writable": false
},
{ "name": "Presenza opzione sbrinamento gas caldo",
"bus_datatype": "bool",
"address": 8,
"type": "discreteinput",
"writable": false
},
{ "name": "Allarme sonda",
"bus_datatype": "bool",
"address": 9,
"type": "discreteinput",
"writable": false
},
{ "name": "Allarme alta pressione",
"bus_datatype": "bool",
"address": 10,
"type": "discreteinput",
"writable": false
},
{ "name": "Allarme bassa pressione",
"bus_datatype": "bool",
"address": 11,
"type": "discreteinput",
"writable": false
},
{ "name": "Allarme macchina scarica",
"bus_datatype": "bool",
"address": 12,
"type": "discreteinput",
"writable": false
},
{ "name": "Allarme bassa temperatura per ON compressore",
"bus_datatype": "bool",
"address": 13,
"type": "discreteinput",
"writable": false
},
{ "name": "Allarme sovratemperatura resistenza elettrica",
"bus_datatype": "bool",
"address": 14,
"type": "discreteinput",
"writable": false
},
{ "name": "Allarme ventilatore",
"bus_datatype": "bool",
"address": 15,
"type": "discreteinput",
"writable": false
},
{ "name": "Sbrinamento attivo",
"bus_datatype": "bool",
"address": 16,
"type": "discreteinput",
"writable": false
},
{ "name": "Richiesta deumidifica",
"bus_datatype": "bool",
"address": 17,
"type": "discreteinput",
"writable": false
},
{ "name": "Richiesta riscaldamento",
"bus_datatype": "bool",
"address": 18,
"type": "discreteinput",
"writable": false
},
{ "name": "Richiesta raffreddamento",
"bus_datatype": "bool",
"address": 19,
"type": "discreteinput",
"writable": false
},
{ "name": "Presenza controllo riscaldamento",
"bus_datatype": "bool",
"address": 20,
"type": "discreteinput",
"writable": false
},
{ "name": "Presenza controllo raffreddamento",
"bus_datatype": "bool",
"address": 21,
"type": "discreteinput",
"writable": false
},
{ "name": "Presenza funzione deumidificazione ad aria neutra",
"bus_datatype": "bool",
"address": 22,
"type": "discreteinput",
"writable": false
},
{ "name": "Presenza opzione raffreddamento con condensatore remoto",
"bus_datatype": "bool",
"address": 23,
"type": "discreteinput",
"writable": false
},
{ "name": "Stato condensatore remoto",
"bus_datatype": "bool",
"address": 24,
"type": "discreteinput",
"writable": false
},
{ "name": "Set umidità relativa",
"bus_datatype": "int16",
"address": 0,
"type": "register",
"write_multiple" : true,
"writable": true,
"units": " %"
},
{ "name": "Set temperatura",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 1,
"type": "register",
"write_multiple": true,
"writable": true,
"units": " °C"
},
{ "name": "Ore di attesa promemoria pulizia filtri",
"bus_datatype": "int16",
"address": 2,
"type": "register",
"write_multiple": true,
"writable": true,
"units": " h"
},
{ "name": "Velocità ventilatore in ricircolo",
"value_custom":
{
"1" : "Minima",
"2" : "Media",
"3" : "Massima"
},
"bus_datatype": "int16",
"address": 3,
"type": "register",
"write_multiple" : true,
"writable": true
},
{ "name": "Velocità ventilatore in deumidifica",
"value_custom":
{
"2" : "Media",
"3" : "Massima"
},
"bus_datatype": "int16",
"address": 4,
"type": "register",
"write_multiple" : true,
"writable": true
},
{ "name": "Set sbrinamento statico",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 5,
"type": "register",
"write_multiple": true,
"writable": true,
"units": " °C"
},
{ "name": "Differenziale sbrinamento statico",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 6,
"type": "register",
"write_multiple": true,
"writable": true,
"units": " °C"
},
{ "name": "Set sbrinamento gas caldo",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 7,
"type": "register",
"write_multiple": true,
"writable": true,
"units": " °C"
},
{ "name": "Fine sbrinamento gas caldo",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 8,
"type": "register",
"write_multiple": true,
"writable": true,
"units": " °C"
},
{ "name": "Offset temperatura ambiente",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 9,
"type": "register",
"write_multiple": true,
"writable": true,
"units": " °C"
},
{ "name": "Offset umidità ambiente",
"bus_datatype": "int16",
"address": 10,
"type": "register",
"write_multiple": true,
"writable": true,
"units": " %"
},
{ "name": "Differenziale on riscaldamento",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 11,
"type": "register",
"write_multiple": true,
"writable": true,
"units": " °C"
},
{ "name": "Differenziale off riscaldamento",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 12,
"type": "register",
"write_multiple": true,
"writable": true,
"units": " °C"
},
{ "name": "Differenziale on deumidifica",
"bus_datatype": "int16",
"address": 13,
"type": "register",
"write_multiple": true,
"writable": true,
"units": " %"
},
{ "name": "Differenziale off deumidifica",
"bus_datatype": "int16",
"address": 14,
"type": "register",
"write_multiple": true,
"writable": true,
"units": " %"
},
{ "name": "Differenziale on raffreddamento",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 15,
"type": "register",
"write_multiple": true,
"writable": true,
"units": " °C"
},
{ "name": "Differenziale off raffreddamento",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 16,
"type": "register",
"write_multiple": true,
"writable": true,
"units": " °C"
},
{ "name": "Stagione",
"value_custom":
{
"0" : "Inverno",
"1" : "Estate",
"2" : "Solo Deumidifica"
},
"bus_datatype": "int16",
"address": 17,
"type": "register",
"write_multiple" : true,
"writable": true
},
{ "name": "Set umidità relativa effettivo",
"bus_datatype": "int16",
"address": 0,
"type": "inputregister",
"writable": false,
"units": " %"
},
{ "name": "Set temperatura effettivo",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 1,
"type": "inputregister",
"writable": false,
"units": " °C"
},
{ "name": "Velocità effettiva ventilatore",
"value_custom":
{
"0" : "Off",
"1" : "Minima",
"2" : "Media",
"3" : "Massima"
},
"bus_datatype": "int16",
"address": 2,
"type": "inputregister",
"writable": false
},
{ "name": "Umidità relativa ambiente",
"bus_datatype": "int16",
"address": 3,
"type": "inputregister",
"writable": false,
"units": " %"
},
{ "name": "Temperatura ambiente",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 4,
"type": "inputregister",
"writable": false,
"units": " °C"
},
{ "name": "Temperatura acqua",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 5,
"type": "inputregister",
"writable": false,
"units": " °C"
},
{ "name": "Temperatura evaporazione",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 6,
"type": "inputregister",
"writable": false,
"units": " °C"
},
{ "name": "Temperatura sbrinamento",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 7,
"type": "inputregister",
"writable": false,
"units": " °C"
},
{ "name": "Matricola valore 1",
"bus_datatype": "int16",
"address": 8,
"type": "inputregister",
"writable": false
},
{ "name": "Matricola valore 2",
"bus_datatype": "int16",
"address": 9,
"type": "inputregister",
"writable": false
},
{ "name": "Matricola valore 3",
"bus_datatype": "int16",
"address": 10,
"type": "inputregister",
"writable": false
},
{ "name": "Matricola valore 4",
"bus_datatype": "int16",
"address": 11,
"type": "inputregister",
"writable": false
},
{ "name": "Matricola valore 5",
"bus_datatype": "int16",
"address": 12,
"type": "inputregister",
"writable": false
},
{ "name": "Matricola valore 6",
"bus_datatype": "int16",
"address": 13,
"type": "inputregister",
"writable": false
},
{ "name": "Matricola valore 7",
"bus_datatype": "int16",
"address": 14,
"type": "inputregister",
"writable": false
},
{ "name": "Matricola valore 8",
"bus_datatype": "int16",
"address": 15,
"type": "inputregister",
"writable": false
},
{ "name": "Matricola valore 9",
"bus_datatype": "int16",
"address": 16,
"type": "inputregister",
"writable": false
},
{ "name": "Matricola valore 10",
"bus_datatype": "int16",
"address": 17,
"type": "inputregister",
"writable": false
},
{ "name": "Tipo Macchina",
"value_custom":
{
"0" : "DDS",
"1" : "DCS",
"2" : "DVS",
"3" : "DOS"
},
"bus_datatype": "int16",
"address": 18,
"type": "inputregister",
"writable": false
},
{ "name": "Taglia Macchina",
"bus_datatype": "int16",
"address": 19,
"type": "inputregister",
"writable": false
},
{ "name": "Ore funzionamento macchina",
"bus_datatype": "int16",
"address": 20,
"type": "inputregister",
"writable": false
},
{ "name": "Minuti rimanenti per standby",
"bus_datatype": "int16",
"address": 21,
"type": "inputregister",
"writable": false
},
{ "name": "Stato accensione macchina",
"value_custom":
{
"0" : "Off",
"1" : "Standby",
"2" : "On"
},
"bus_datatype": "int16",
"address": 22,
"type": "inputregister",
"writable": false
},
{ "name": "Comando Unità",
"value_custom":
{
"0" : "da display",
"1" : "da fasce orarie",
"2" : "da remoto",
"3" : "da seriale"
},
"bus_datatype": "int16",
"address": 23,
"type": "inputregister",
"writable": false
},
{ "name": "Taratura ventilatore elettronico",
"bus_datatype": "int16",
"address": 24,
"type": "inputregister",
"writable": false,
"units": " %"
},
{ "name": "Stagione effettiva",
"value_custom":
{
"0" : "Inverno",
"1" : "Estate",
"2" : "Solo deumidifica"
},
"bus_datatype": "int16",
"address": 25,
"type": "inputregister",
"writable": false
},
{ "name": "Pressione di evaporazione",
"bus_datatype": "float16",
"value_multiplier": 0.1,
"address": 26,
"type": "inputregister",
"writable": false,
"units": " bar"
}
]
}
Something strange is happening:
I have a Modbus TCP bridge (Z-KEY by Seneca) and 3 modbus devices, everything is working fine but when I try to write a holding register (with write_multiple set to true as the manufacturer recommend) it doesn't work. For example, I can read this register, but I can't write it.
Code: { "name": "Set umidità relativa",
"bus_datatype": "int16",
"address": 0,
"type": "register",
"write_multiple" : true,
"writable": true,
"units": " %"
},
I tried with Modscan and everything works fine, also all the coils are managed correctly from Spacelynk...only write holding registers function seems broken.
Any ideas?
RE: Problem with function 16 in Spacelynk modbus - admin - 24.03.2022
Try adding "datatype": "int16" to the mapping entry.
RE: Problem with function 16 in Spacelynk modbus - Kilogica - 29.03.2022
thanks, it works!
|