Article View: fr.comp.lang.ada
Article #74Re: Ada for Automation
From: slos
Date: Tue, 29 Jan 2013 19:29
Date: Tue, 29 Jan 2013 19:29
121 lines
5436 bytes
5436 bytes
Le jeudi 24 janvier 2013 23:28:59 UTC+1, slos a écrit :
...
Bonjour,
Je suppose que personne ne va se fatiguer à ouvrir cette archive pour y chercher ce que j'évoque... Je ne l'aurais sans doute pas fait et ne blâme donc personne.
Je vais tâcher d'être plus concis.
Il s'agit donc de cette fonction :
http://libmodbus.org/site_media/html/modbus_mapping_new.html
La spécification est définie ainsi :
function Mapping_New
(Nb_Coil_Status : in Interfaces.C.int;
Nb_Input_Status : in Interfaces.C.int;
Nb_Holding_Registers : in Interfaces.C.int;
Nb_Input_Registers : in Interfaces.C.int)
return System.Address;
-- May raise an Error
--modbus_mapping_t* modbus_mapping_new(int nb_coil_status, int nb_input_status,
-- int nb_holding_registers, int nb_input_registers);
Le corps ainsi :
function Mapping_New
(Nb_Coil_Status : in Interfaces.C.int;
Nb_Input_Status : in Interfaces.C.int;
Nb_Holding_Registers : in Interfaces.C.int;
Nb_Input_Registers : in Interfaces.C.int)
return System.Address is
function Modbus_Mapping_New
(Nb_Coil_Status : in Interfaces.C.int;
Nb_Input_Status : in Interfaces.C.int;
Nb_Holding_Registers : in Interfaces.C.int;
Nb_Input_Registers : in Interfaces.C.int)
return System.Address;
--modbus_mapping_t* modbus_mapping_new(int nb_coil_status, int nb_input_status,
-- int nb_holding_registers, int nb_input_registers);
pragma Import (C, Modbus_Mapping_New, "modbus_mapping_new");
Result : System.Address;
begin
Result := Modbus_Mapping_New(Nb_Coil_Status,
Nb_Input_Status,
Nb_Holding_Registers,
Nb_Input_Registers);
if Result = System.Null_Address then
raise Other_Error with Modbus_Strerror;
end if;
return Result;
end Mapping_New;
Quant au System.Address retourné il pointe sur un :
type Modbus_Mapping_Type is
record
nb_bits : Interfaces.C.int;
nb_input_bits : Interfaces.C.int;
nb_input_registers : Interfaces.C.int;
nb_registers : Interfaces.C.int;
tab_bits : System.Address;
tab_input_bits : System.Address;
tab_input_registers : System.Address;
tab_registers : System.Address;
end record;
-- typedef struct {
-- int nb_bits;
-- int nb_input_bits;
-- int nb_input_registers;
-- int nb_registers;
-- uint8_t *tab_bits;
-- uint8_t *tab_input_bits;
-- uint16_t *tab_input_registers;
-- uint16_t *tab_registers;
-- } modbus_mapping_t;
type Modbus_Mapping_Type_Access is access all Modbus_Mapping_Type;
A l'utilisation, ça donne ceci :
...
MyMapping_Access : System.Address;
...
MyMapping_Access := LibModbus.Mapping_New (Nb_Coil_Status => 80,
Nb_Input_Status => 80,
Nb_Holding_Registers => 10,
Nb_Input_Registers => 10);
...
declare
MyMapping : LibModbus.Modbus_Mapping_Type;
for MyMapping'Address use MyMapping_Access;
My_tab_registers : Word_Array(0..9);
for My_tab_registers'Address use MyMapping.tab_registers;
begin
My_tab_registers(0) := 16#0102#;
My_tab_registers(1) := 16#0304#;
...
Que pensez vous de cette plomberie ?
Pour ma part, j'en reste perplexe.
J'aurais bien vu une fonction qui me retourne une structure avec un tableau de chaque, avec la dimension qui va bien, et qui partage l'adresse avec le mapping en C, mais je n'y parviens pas pour l'instant.
Merci pour vos lumières.
Cordialement,
Stéphane
Technical Details
Message-ID:
<ce90c01c-2d8c-4a0c-83d7-1a8d8bab8e7f@googlegroups.com>Path:
arc1-ca.pugleaf.net!k2ni3907qap.0!nntp.google.com!p13no6106546qai.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<4e7e5467-fe89-4d55-8b46-80e3cd8af9f8@googlegroups.com>Show Full Headers
Complete Article Headers
X-Google-Thread: 43d0c745c,3ec9ea2623601032
X-Google-Attributes: gid43d0c745c,public,usenet
X-Google-NewGroupId: yes
X-Google-Language: FRENCH,ASCII
X-Received: by 10.224.17.140 with SMTP id s12mr1110048qaa.3.1359487784146;
Tue, 29 Jan 2013 11:29:44 -0800 (PST)
X-Received: by 10.49.116.135 with SMTP id jw7mr245168qeb.10.1359487783909;
Tue, 29 Jan 2013 11:29:43 -0800 (PST)
Path: arc1-ca.pugleaf.net!k2ni3907qap.0!nntp.google.com!p13no6106546qai.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: fr.comp.lang.ada
Date: Tue, 29 Jan 2013 11:29:43 -0800 (PST)
In-Reply-To: <4e7e5467-fe89-4d55-8b46-80e3cd8af9f8@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=80.119.168.166;
posting-account=O3LyFwoAAACc1uh60ZcOUmAGdDmGsEcV
NNTP-Posting-Host: 80.119.168.166
References: <4e7e5467-fe89-4d55-8b46-80e3cd8af9f8@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <ce90c01c-2d8c-4a0c-83d7-1a8d8bab8e7f@googlegroups.com>
Subject: Re: Ada for Automation
From: slos <new.stephane.los@gmail.com>
Injection-Date: Tue, 29 Jan 2013 19:29:44 +0000
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable