source: trunk/Simulator/ModBusClass.m@ 10

Last change on this file since 10 was 6, checked in by mansoux, 15 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.