source: trunk/Simulator/libmodbusWrapper.cpp @ 5

Last change on this file since 5 was 5, checked in by mansoux, 14 years ago

Ajout librairie Modbus base MacOSX

File size: 5.0 KB
Line 
1/*
2 *  libmodbusWrapper.cpp
3 *  ModBusKit
4 */
5//  Copyright 2008 Volitans Software and R Engineering, Inc.
6/*
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version.
11 
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 Lesser General Public License for more details.
16 
17 You should have received a copy of the GNU Lesser General Public
18 License along with this library; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA.
20 
21 These library of functions are designed to enable a program send and
22 receive data from a device that communicates using the Modbus protocol.
23 */
24//
25//  This is an Objective-C++ wrapper for libmodbus
26
27#include "libmodbusWrapper.h"
28using namespace std;
29
30bool libmodbusWrapper::lmbInitSerial(const char* device, int baud, int parity, int data_bit, int stop_bit)
31{
32        if (data_bit<5 || data_bit>8)
33                return(FALSE);
34        if (stop_bit<1 || stop_bit>2)
35                return(FALSE);
36
37        switch(parity)
38        {
39                case k_none:
40                        modbus_init_rtu(&mb_param, device, baud, "none", data_bit, stop_bit);
41                        return(TRUE);
42                case k_even:
43                        modbus_init_rtu(&mb_param, device, baud, "even", data_bit, stop_bit);
44                        return(TRUE);
45                case k_odd:
46                        modbus_init_rtu(&mb_param, device, baud, "odd", data_bit, stop_bit);
47                        return(TRUE);
48                default:
49                        return(FALSE);
50        }
51        return(FALSE);
52}
53
54bool libmodbusWrapper::lmbInitTCP(const char* device, int port)
55{
56        if (port<=0)
57                modbus_init_tcp(&mb_param, device, MODBUS_TCP_DEFAULT_PORT);
58        else 
59                modbus_init_tcp(&mb_param, device, port);
60               
61        return(true);
62}
63
64int libmodbusWrapper::lmbConnect()
65{
66        return(modbus_connect(&mb_param));
67}
68
69void libmodbusWrapper::lmbDisconnect()
70{
71        modbus_close(&mb_param);
72}
73
74bool libmodbusWrapper::lmbReadDiscreteInput(int slaveID, int startAddress, int inputCount, uint8_t *data)
75{
76        int error;
77       
78        error=read_input_status(&mb_param, slaveID, startAddress, inputCount, data);
79       
80        if (error>=0)
81        {
82                errorCode=0;
83                return(true);
84        }
85
86        errorCode=error;
87        return(false);
88}
89
90bool libmodbusWrapper::lmbReadCoil(int slaveID, int startAddress, int coilCount, uint8_t *data)
91{
92        int error;
93       
94        error=read_coil_status(&mb_param, slaveID, startAddress, coilCount, data);
95       
96        if (error>=0)
97        {
98                errorCode=0;
99                return(true);
100        }
101
102        errorCode=error;
103        return(false);
104}
105
106bool libmodbusWrapper::lmbWriteSingleCoil(int slaveID, int coilAddress, bool state)
107{
108        int error;
109       
110        error=force_single_coil(&mb_param, slaveID, coilAddress, state);
111       
112        if (error>=0)
113        {
114                errorCode=0;
115                return(true);
116        }
117
118        errorCode=error;
119        return(false);
120}
121
122bool libmodbusWrapper::lmbWriteMultipleCoils(int slaveID, int startAddress, int coilCount, uint8_t *states)
123{
124        int error;
125       
126        error=force_multiple_coils(&mb_param, slaveID, startAddress, coilCount, states);
127       
128        if (error>=0)
129        {
130                errorCode=0;
131                return(true);
132        }
133
134        errorCode=error;
135        return(false);
136}
137
138bool libmodbusWrapper::lmbReadInputRegisters(int slaveID, int startAddress, int registerCount, uint16_t *data)
139{
140        int error;
141       
142        error=read_input_registers(&mb_param, slaveID, startAddress, registerCount, data);
143       
144        if (error>=0)
145        {
146                errorCode=0;
147                return(true);
148        }
149
150        errorCode=error;
151        return(false);
152}
153
154bool libmodbusWrapper::lmbReadHoldingRegisters(int slaveID, int startAddress, int registerCount, uint16_t *data)
155{
156        int error;
157               
158        error=read_holding_registers(&mb_param, slaveID, startAddress, registerCount, data);
159       
160        if (error>=0)
161        {
162                errorCode=0;
163                return(true);
164        }
165
166        errorCode=error;
167        return(false);
168}
169
170bool libmodbusWrapper::lmbWriteSingleHoldingRegister(int slaveID, int registerAddress, uint16_t value)
171{
172        int error;
173       
174        error=preset_single_register(&mb_param, slaveID, registerAddress, value);
175       
176        if (error>=0)
177        {
178                errorCode=0;
179                return(true);
180        }
181
182        errorCode=error;
183        return(false);
184}
185
186bool libmodbusWrapper::lmbWriteMultipleHoldingRegisters(int slaveID, int startAddress, int registerCount, uint16_t *values)
187{
188        int error;
189       
190        error=preset_multiple_registers(&mb_param, slaveID, startAddress, registerCount, values);
191       
192        if (error>=0)
193        {
194                errorCode=0;
195                return(true);
196        }
197
198        errorCode=error;
199        return(false);
200}
201
202int libmodbusWrapper::lmbErrorCode()
203{
204        return(errorCode);
205}
206
207void libmodbusWrapper::lmbSetDebug(bool state)
208{
209        modbus_set_debug(&mb_param, (int)state);
210        debug=state;
211}
212
213void libmodbusWrapper::lmbSetRawDataSave(bool state)
214{
215        modbus_set_raw_data_save(&mb_param, (int)state);
216}
217
218int libmodbusWrapper::lmbLastRawQuery(uint8_t *rawQuery)
219{
220        return(modbus_last_raw_query(&mb_param, rawQuery));
221}
222
223int libmodbusWrapper::lmbLastRawResponse(uint8_t *rawResponse)
224{
225        return(modbus_last_raw_response(&mb_param, rawResponse));
226}
227
228int libmodbusWrapper::lmbLastRawQueryLength()
229{
230        return(modbus_last_raw_query_length(&mb_param));
231}
232
233int libmodbusWrapper::lmbLastRawResponseLength()
234{
235        return(modbus_last_raw_response_length(&mb_param));
236}
237
Note: See TracBrowser for help on using the repository browser.