source: trunk/Simulator/ModBusClass.m @ 6

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

Ajout client base MacOSX

File size: 6.3 KB
Line 
1#import "ModBusClass.h"
2
3@implementation ModBusClass
4
5-(void) dealloc
6{
7        [super dealloc];
8}
9
10-(NSMutableArray *) parameters
11{
12        return parameters;
13}
14
15-(void) loadParameters
16{
17        if(parameters)
18        {
19                [parameters release];
20        parameters = nil;
21    }
22
23        int i;
24        parameters = [[NSMutableArray alloc] init];
25        parametersValue = [[NSMutableArray alloc] initWithCapacity: INITIAL_PARAMETERS_COUNT];
26        for (i=0;i<INITIAL_PARAMETERS_COUNT;i++)
27        {
28                [parameters addObject:[[Parameter alloc] init]];
29                [parametersValue addObject:[[NSNumber numberWithInt: -1] init]];
30        }
31       
32}
33
34- (void)awakeFromNib
35{
36        NSString* nom;
37
38        [self loadParameters];
39        nom = [[parameters objectAtIndex:0] name];
40
41//      NSLog(@"Parameter %@", nom);
42
43    [coilValues setDataSource:self];
44    [coilValues setDelegate:self];
45
46    [coilValues sizeLastColumnToFit];
47       
48    [registerValues setDataSource:self];
49    [registerValues setDelegate:self];
50
51    [registerValues sizeLastColumnToFit];
52}
53
54- (void)Initialize: (int)sizeArray
55{
56        [self awakeFromNib]; // Basic Initializiation
57    [coilValues setNeedsDisplay:YES];
58    [registerValues setNeedsDisplay:YES];
59
60        coilsRange.location = START_ADDRESS_COILS;
61        coilsRange.length = NUMBER_OF_COILS;
62       
63        holdingRegistersRange.location = START_ADDRESS_REGISTERS;
64        holdingRegistersRange.length = NUMBER_OF_REGISTERS;
65}
66
67- (int)numberOfRowsInTableView:(NSTableView *)tableView
68{
69        int number;
70       
71        switch ([tableView tag])
72        {
73                case 0:
74                        number = NUMBER_OF_COILS;
75                        break;
76                case 1:
77                        number = NUMBER_OF_REGISTERS;
78                        break;
79                default:
80                        number = 1;
81                        break;
82        }
83       
84        return number;
85}
86
87- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
88{
89        Parameter* parameter;
90        switch([tableView tag])
91        {
92        case 0:
93                parameter = [parameters objectAtIndex:row];
94                break;
95        case 1:
96                int newRow = row + NUMBER_OF_COILS;
97                parameter = [parameters objectAtIndex:newRow];
98                break;
99        }
100       
101        return [parameter valueForKey:[tableColumn identifier]];
102}
103
104- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(int)row
105{
106        Parameter* parameter;
107
108        switch([tableView tag])
109        {
110        case 0:
111                parameter = [parameters objectAtIndex:row];
112                break;
113        case 1:
114                int newRow = row + NUMBER_OF_COILS;
115                parameter = [parameters objectAtIndex:newRow];
116                break;
117        }
118       
119        [parameter takeValue:object forKey:[tableColumn identifier]];
120}
121
122- (IBAction)Connect:(id)sender
123{
124        NSString* blabla;
125        NSString* suffixe = @"connected";
126        NSString* version = @"0.0";
127        blabla = [serverName stringValue];
128        NSLog(@"%@ is %@", blabla, suffixe);
129       
130        [mbKit initialize];
131        version = [mbKit modbuskitVersion];
132        NSLog(@"Version is %@", suffixe);
133        [mbkVersion setStringValue:version];
134
135        mbKit = [mbKit initWithTCP:blabla port:502];
136       
137        int status;
138        status = [mbKit openConnection];
139        if (status == 0)
140                [serverStatus setStringValue:suffixe];
141        else
142                [serverStatus setIntValue:status];
143               
144       
145        [self UpdateDatas];     
146}
147
148- (IBAction)Load:(id)sender
149{
150        NSLog(@"Load Data");
151
152        int i;
153        for (i=0;i<INITIAL_PARAMETERS_COUNT;i++)
154        {
155                Parameter* parameter = [parameters objectAtIndex:i];
156                NSString* nom = TabledeNom[i];
157                int num = TabledAddresses[i];
158                [parameter setName:nom];
159                [parameter setAddress:num];
160        }
161       
162    [coilValues reloadData];
163    [registerValues reloadData];
164}
165
166- (IBAction)ReadCoils:(id)sender
167{
168        modbusValue = [mbKit readCoil:1 startAddress:START_ADDRESS_COILS coilCount:NUMBER_OF_COILS];
169
170        int i;
171        int size = [modbusValue count];
172        NSString *n = [[NSNumber numberWithInt:(size)] stringValue];
173        NSLog(@"Number of Coils read : %@", n);
174
175        if (size < NUMBER_OF_COILS)
176        {
177                NSLog(@"Warning not enough data go to simulation mode");
178                [modbusValue release];
179                modbusValue = [[NSMutableArray alloc] initWithCapacity: NUMBER_OF_COILS];
180                for (i = 0; i < NUMBER_OF_COILS;i++)
181                {
182                        int val = i;
183                        [modbusValue addObject:[NSNumber numberWithInt: val]];
184                }
185        }
186
187        for (i = 0; i < NUMBER_OF_COILS; i++)
188        {
189                [parametersValue replaceObjectAtIndex:i withObject:[modbusValue objectAtIndex:i]];
190        }
191
192    [self UpdateDatas];
193}
194
195- (IBAction)WriteCoils:(id)sender
196{
197        int i;
198        transferData = [[NSMutableArray alloc] init];
199        for (i = 0; i < NUMBER_OF_COILS;i++)
200        {
201                Parameter* parameter = [parameters objectAtIndex:i];
202                NSNumber* num = [parameter value];
203                NSString *n = [num stringValue];
204                NSLog(@"Value : %@", n);
205                [transferData addObject:[num init]];
206        }
207       
208        [mbKit writeMultipleCoils:1 startAddress:START_ADDRESS_COILS coilCount:NUMBER_OF_COILS stateData:transferData];
209       
210    [coilValues reloadData];
211        [transferData autorelease];
212}
213
214
215- (IBAction)ReadHoldingRegisters:(id)sender
216{
217        modbusValue = [mbKit readHoldingRegisters:1 startAddress:START_ADDRESS_REGISTERS registerCount:NUMBER_OF_REGISTERS];
218        int i;
219
220        int size = [modbusValue count];
221        NSString *n = [[NSNumber numberWithInt:(size)] stringValue];
222        NSLog(@"Number of HoldingRegister read : %@", n);
223
224        if (size < NUMBER_OF_REGISTERS)
225        {
226                NSLog(@"Warning not enough data go to simulation mode");
227                [modbusValue release];
228                modbusValue = [[NSMutableArray alloc] initWithCapacity: NUMBER_OF_REGISTERS];
229                for (i = 0;i < NUMBER_OF_REGISTERS; i++)
230                {
231                        int val = 2 * i;
232                        [modbusValue addObject:[NSNumber numberWithInt: val]];
233                }
234        }
235       
236        for (i = 0; i < NUMBER_OF_REGISTERS; i++)
237        {
238                int index = i + NUMBER_OF_COILS;
239                [parametersValue replaceObjectAtIndex:index withObject:[modbusValue objectAtIndex:i]];
240        }
241
242    [self UpdateDatas];
243}
244
245- (IBAction)WriteHoldingRegisters:(id)sender
246{
247        int i;
248
249        transferData = [[NSMutableArray alloc] init];
250        for (i = 0; i < NUMBER_OF_REGISTERS;i++)
251        {
252                int index = i + NUMBER_OF_COILS;
253                Parameter* parameter = [parameters objectAtIndex:index];
254                NSNumber* num = [parameter value];
255                NSString *n = [num stringValue];
256                NSLog(@"Value : %@", n);
257                [transferData addObject:[num init]];           
258        }
259
260        [mbKit writeMultipleHoldingRegisters:1 startAddress:START_ADDRESS_REGISTERS registerCount:NUMBER_OF_REGISTERS valueData:transferData];
261       
262    [registerValues reloadData];
263        [transferData autorelease];
264}
265
266-(void) UpdateDatas
267{
268        NSLog(@"Update Datas");
269
270        int i;
271        for (i = 0; i<INITIAL_PARAMETERS_COUNT; i++)
272        {
273                Parameter* parameter = [parameters objectAtIndex:i];
274                NSNumber* data = [parametersValue objectAtIndex:i];
275                [parameter setValue:[data intValue]];
276        }
277       
278    [coilValues reloadData];
279    [registerValues reloadData];
280}
281
282- (void)tableViewSelectionDidChange:(NSNotification *)notification
283{
284    // Parameter *parameter = [parameters objectAtIndex:[coilValues selectedRow]];
285}
286
287@end
Note: See TracBrowser for help on using the repository browser.