You are on page 1of 27

1 (27)

Doc. no. 3BSE040302 en


Rev. Approved
ind.
Date 2005-05-11
E-mail: techsalessup.deapr@de.abb.com
E-mail: techsalessup.seapr@se.abb.com
E-mail: techsalessup.usiny@us.abb.com

Frequently Asked Question


Is there a tool for S400 to S800 conversion?
_______________________________________________________________________________________________________________________________________________________

Background:
This document outlines an engineering procedure for S400 I/O to S800 I/O conversion.

Preconditions:
In order for the material in this document to be useful an Excel file must be used. This
Excel file can be found in ABB Library as Appendix C (“AppC”) to this document.

Contents:

1. Introduction .............................................................................................................. 2
1.1 Prerequisites and Requirements .................................................................. 2
2. Installation................................................................................................................ 2
3. Configuration ........................................................................................................... 3
4. Operation.................................................................................................................. 3
4.1 Design the new S800 I/O layout ................................................................... 4
4.2 Make a Database Source Code Dump of the MasterPiece 200 or
AdvantController 400.................................................................................... 4
4.3 Convert Database Source Code Dump from Online Builder format to
Windows format ........................................................................................... 4
4.4 Back-translate Database Source Code into Function Chart Builder.............. 5
4.5 Export DB Section from Function Chart Builder............................................ 6
4.6 Open the exported DB Section file in Excel .................................................. 6
4.7 Run the S800Initialize Macro........................................................................ 8
4.8 Run the ConvertS400 Macro for each AX/DX unit ........................................ 9
4.9 Save the S800 Database Source Code ...................................................... 10
4.10 Convert Database Source Code Dump from Windows format to Online
Builder format............................................................................................. 12
5. Section 5 – Maintenance ....................................................................................... 12
6. Section 6 – Known Limitations ............................................................................. 12
7. Appendix A – S800 I/O Example Layout ............................................................... 14
8. Appendix B – Excel VBA Source Code................................................................. 15
9. Appendix C – Conversion Sheet........................................................................... 25

ABB Automation Technologies AB


2 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

1. Introduction

This document describes a set of Microsoft Excel macros that can be used to convert ABB AMPL
Database Source Code for S400 I/O to Database Source Code for S800 I/O. The intention is that these
macros be used in conjunction with the hardware conversion kits TU40x for upgrading of S400 I/O
installations to S800 I/O.

Database Source Code from MasterPiece 200 or AdvantController 400 is first back translated into the
Function Chart Builder and re-exported as a delimited file, readable by Excel. The macros will then read
the I/O signal data for the individual S400 channels and map them to S800 channels based on user input
for AF100 bus number, station and position. Some Database terminal values that are not compatible
between S400 and S800 I/O are automatically converted in this process. The S800 I/O Database Source
Code is then saved as a text file that can be translated into an AdvantController 400 or, alternatively,
back translated into Function Chart Builder for further handling.

These macros are provided as shareware and even though they are believed to be free of errors at the
time of this writing you may experience problems during their use.

In no event shall ABB be liable for direct, indirect, special, incidental or consequential damages of any
nature or kind from the use of this document, not shall ABB be liable for incidental or consequential
damages arising from the use of any software or hardware described in this document.

1.1 Prerequisites and Requirements

These macros have been tested with the following Excel versions and operating systems:
• Excel 2004 for Mac on Mac OS X 10.3.6
• Excel 2002 SP-1 on Windows XP Professional version 2002 SP1
• Excel 2000 SP-3 on Windows 2000 Professional SP4
• Excel 97 SR-1 on Windows NT 4.0

They will likely work on other versions of Excel and Windows as well.

These macros have been tested on Database Export files created with the following versions of Function
Chart Builder:
• Function Chart Builder 6.0
• Function Chart Builder 6.1

They will likely work on Database Export Files created with Function Chart Builder 4.3 or later.

2. Installation

No separate installation is needed. Simply place the file S400toS800.xls in the proper directory,
depending on operating system and access required.

ABB Automation Technologies AB


3 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

For access from current user only:


• Windows XP, Documents and Settings\<user>\Application Data\Microsoft\Excel\XLStart
• Windows 2000, Documents and Settings\<user>\Application Data\Microsoft\Excel\XLStart

For access from all users:


• Windows XP, Program Files\Microsoft Office\Office10\XLStart
• Windows 2000, Program Files\Microsoft Office\Office\XLStart
• Windows NT, Program Files/Microsoft Office\Office\XLStart
• Mac OS X, Applications>Microsoft Office 2004>Office>Startup>Excel

3. Configuration

The macro source code is not protected and can be freely modified if you feel that it does not meet your
needs. One particular change that you may want to make concerns the naming of spare I/O channels.

The number of I/O channels on the S400 I/O units does not exactly match the number of I/O channels on
the replacement S800 I/O units. To compensate a number of spare S800 I/O channels are inserted in
the S800 I/O Database Source Code during the conversion. Spare channels may also exist in the
original S400 I/O configuration. The macro identifies these spares by looking for the original default
name, such as DX107.12. Both the extra S800 I/O spares and the original S400 I/O spares are recreated
in the S800 Source Code as having all default values, as defined by the system GENERAL DEFAULTS.
In addition, all spare channels are given a unique name; based on a naming convention that includes the
AF100 bus number, station number and position as follows:
<I/O type><bus number>_<station number>_<position>.<channel>

Example: an AIS810 on bus 1, station 12, position 102, and channel 5, will be named AI1_12_102.5.
This naming convention makes it easy to locate a spare signal in the Online Builder using the MDB
command if you know the bus number, station number, position and channel. It mimics the way S100
and S400 signals can be called up using board and channel number or bus, node and channel number
respectively. The MDB command also supports calling up an S800 I/O signal with the syntax MDB <bus
number>,<station number>,<position>.<channel> but this syntax does not always work, especially for
DO and AO signals.

If you wish to restore the original S800 spare I/O signal naming convention you need to comment out two
lines in the private subroutine CreateSpareChannel. They are clearly marked in the code.

4. Operation

The following paragraphs outline a procedure to convert S400 I/O to S800 I/O. This conversion can be
described with 10 steps:
Step Description
1 Design the new S800 I/O layout
2 Make a Database Source Code Dump of the MasterPiece 200 or AdvantController 400
3 Convert Database Source Code Dump from Online Builder format to Windows format

ABB Automation Technologies AB


4 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

4 Back-translate Database Source Code into Function Chart Builder


5 Export DB Section from Function Chart Builder
6 Open the exported DB Section file in Excel
7 Run the S800Initialize Macro
8 Run the ConvertS400 Macro for each AX/DX unit
9 Save the S800 Database Source Code
10 Convert Database Source Code Dump from Windows format to Online Builder format

4.1 Design the new S800 I/O layout

For each S400 I/O unit you need to determine following parameters for the replacement TU40x unit:
• Advant Fieldbus 100 bus number.
• Station number
• Position for the first S800 I/O unit on the TU40x unit.

See example table in Appendix A.

The macro will automatically determine the correct TU40x unit type.

4.2 Make a Database Source Code Dump of the MasterPiece 200 or AdvantController 400

See Online Builder Documentation for details.

After conversion you need rebuild the system that is retranslate the complete controller node, PC and
Database. Therefore, at this stage it is a good idea to take a complete Database and PC Source Code
dump.

4.3 Convert Database Source Code Dump from Online Builder format to Windows format

See Application Builder Documentation for details.

ABB Automation Technologies AB


5 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Figure 1

There is no need to convert the PC Source Code to Windows format (*.AAX) for the purpose of the S400
I/O to S800 I/O conversion, but you may want to do so anyway, especially if you are planning to verify
the end result in Function Chart Builder before translating back into the AdvantController 400.

The Excel macros will extract the S400 I/O information from the exported delimited Database file
regardless of whether other Database information, such as S100 I/O, PIDCON, MOTCON etc. is
present. The exported file will, however, be easier to navigate, and the S800 I/O conversion quicker, if
only S400 I/O information is present. This can be accomplished in a couple of different ways:
• Edit a copy of the Windows format Database Source Code file (*.BAX) and delete everything
except S400 I/O information. Use this file to back-translate into Function Chart Builder in the next
step.
• Back-translate the complete Windows format Database Source Code file (*.BAX) into the Function
Chart Builder and export only the S400 I/O portions. This will result in several exported files.
These files can be merged in Excel using cut and paste.
• Back-translate the complete Windows format Database Source Code file (*.BAX) into the Function
Chart Builder and export the complete Database. The exported file can then be opened in Excel
and non S400 I/O information deleted before starting the S800 I/O conversion process.

Which method you use is a matter of personal preference.

4.4 Back-translate Database Source Code into Function Chart Builder

See Function Chart Builder documentation for details.

ABB Automation Technologies AB


6 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Figure 2

4.5 Export DB Section from Function Chart Builder

See Function Chart Builder documentation for details.

Figure 3

Be sure to check the option “Include Headline with DB Terminal Names”

4.6 Open the exported DB Section file in Excel

The exported file is located in the LIST subdirectory for the MasterPiece 200 or AdvantController 400
and can be recognized by the .DBT extension. The file can be opened from inside Excel, or, after
assigning .DBT files to always be opened by Excel, simply by double-clicking the file.

ABB Automation Technologies AB


7 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Figure 4

ABB Automation Technologies AB


8 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

4.7 Run the S800Initialize Macro

See Excel documentation for details on how to access and run macros.

Figure 5

Answer the question about use of wildcards with Y or N.

Figure 6

Use of wildcards is recommended, and even required to avoid name conflicts if you are converting an
AdvantController 400 that already has a mix of S400 and S800 I/O. The main drawback of using
wildcards is that, due to a bug in the Function Chart Builder, the resulting S800 I/O Source Code cannot
be back translated into Function Chart Builder for verification. If you need to back-translate the S800 I/O
Source Code and therefore decide not to use wildcards, be aware of the potential for conflicts with other
S800 I/O Database, either from the original system or introduced in other ways.

ABB Automation Technologies AB


9 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

4.8 Run the ConvertS400 Macro for each AX/DX unit

Position the cursor in the cell that holds the name of the first AX/DX unit you want to convert, e.g. AX101
or DX207.

Figure 7

Run the ConvertS400 Macro. See Excel documentation for details on how to access and run macros.

Answer the three questions about AF100 Bus Number, Station Number and First I/O Module Position.

Figure 8

ABB Automation Technologies AB


10 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Figure 9

Figure 10

Position the cursor in the cell that holds the name of the next AX/DX unit you want to convert and repeat
the steps above until all units have been converted.

4.9 Save the S800 Database Source Code

Activate the worksheet named “S800” by clicking on the tab at the bottom. Select menu item File>Save
As… Select filetype Text (Tab delimited). Save the file with a name of your choice in the DBDATA
subdirectory. The file name needs to have the format <name>01.BAX, where <name> is a maximum of 6
characters. This is necessary to be able to convert the file back to Online Builder format (*.BA). Answer
Yes to the following two questions regarding saving in non-Excel format.

ABB Automation Technologies AB


11 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Figure 11

If you are not using wildcards and plan to back-translate the S800 I/O Database Source Code into the
Function Chart Builder you need to save the file in Formatted Text (Space delimited) format. This is due
to the fact that the Function Chart Builder has a different treatment of white spaces than the Online
Builder and does not accept tabs. Before you save as Formatted Text (Space delimited), make sure that
the first three columns on the “S800” worksheet are wide enough, since any information that is not visible
on the screen will be truncated in the file.

When you exit Excel, it is recommended not to save the changes. The S800Initialize macro modifies the
original worksheet such that a saved file can’t be reopened and worked on again. None of the macro
internal variables are saved at exit, which also prevents resuming work on a saved file after re-opening.
This should not be an issue since the whole conversion process takes no more than a couple of minutes.
If you need to redo the conversion it is easiest to start over by opening the .DBT file again.

ABB Automation Technologies AB


12 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

4.10 Convert Database Source Code Dump from Windows format to Online Builder format

See Application Builder Documentation for details.

Figure 12

The resulting S800 I/O Database Source Code file (*.BA) is ready to be translated into an
AdvantController 400. More likely though, since the whole node will need to be rebuilt, you will use a text
editor and merge this file with the rest of the Database Source Code for a complete Database
translation.

5. Section 5 – Maintenance

To uninstall the macros, simply move the S400toS800.xls file to a different location on your hard drive.
The S400to800.xls file will no longer be automatically opened when you open Excel.

6. Section 6 – Known Limitations

The number of I/O channels on the S400 I/O units does not exactly match the number of I/O channels on
the replacement S800 I/O units. To compensate a number of spare S800 I/O channels are inserted in
the S800 I/O Database Source Code during the conversion. This may cause the resulting number of I/O
signals to exceed the original Database dimensions. It may also interfere with any deliberate
organization of I/O signals versus calculated signals.

The value for the FILTER_P terminal on the S800 Analog Input has a different format than the
corresponding terminal on an S400 Analog Input. The conversion macro makes a best effort attempt to
convert the filter parameter on the S400 Analog Input to a value that is permissible on the S800 Analog
Input. If the resulting value is greater than 65 seconds a warning will be issued and the value set to 65
seconds.

ABB Automation Technologies AB


13 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

The S400 Analog Input supports two bipolar measuring ranges that are not available on the S800 Analog
Input, -20..20mA and -10..10V. If these are present a warning will be issued and the measuring range
set to 0..20mA and 0..10V respectively.

The S400 Analog Output supports two measuring ranges that are not available on the S800 Analog
Output, 0..20mA and 0..10V. If these are present a warning will be issued and the measuring range set
to 4..20mA and 2..10V respectively.

The terminal unit TU402, used to upgrade a single DSDX452/454, supports only 16 Digital Inputs, while
the DSDX452/454 has 20 Digital Inputs. If a single DSDX452/454 is converted, a warning will be issued,
listing the names of the 4 channels that will be dropped.

S400 channels that have not been renamed from their default name, but are in use, will be identified by
the macro as true spares and the values on their terminals will be lost.

Excel allows a maximum of 65536 rows in a worksheet. This corresponds to the conversion of about 90
DSAX452, or 50 DSDX452/454 with DSDX451/453. If you reach this limit you will have to make the
conversion in stages.

ABB Automation Technologies AB


14 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

7. Appendix A – S800 I/O Example Layout

AX/DX unit AF100 Bus Station Position


AX100 1 1 1
AX101 1 1 4
DX102 1 2 1
DX103 1 2 7
AX200 2 1 1
DX201 2 2 1
DX202 2 3 1
DX203 2 3 4

ABB Automation Technologies AB


15 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

8. Appendix B – Excel VBA Source Code

Row Excel VBA Source Code


1 Option Explicit
2 Public S400 As String, wildcard
3 Public AIXS_Record_length As Integer, AOXS_Record_length As Integer, DIXS_Record_length As Integer, DOXS_Record_length As
4 Integer
5 Public AI800_record, AO800_record, DI800_record, DO800_record
6 Public AIXS_Props As Object, AOXS_Props As Object, DIXS_Props As Object, DOXS_Props As Object
7 Public S800_ActiveCell As Object, S400_signal_start As Object
8 Public SearchRange As Object
9 Public AI_FILTER_P As Integer, AI_CONV_PAR As Integer, AI_DEADB As Integer, AI_SCANT As Integer, AO_CONV_PAR As Integer
10
11 Private Sub CreateS800IOHeader(IOCategory As String, IOType As String, Bus, Stn, Pos)
12 '
13 Worksheets("S800").Activate
14 S800_ActiveCell.Activate
15 ActiveCell.Value = IOCategory
16 ActiveCell.offset(0, 2).Value = IOType
17 ActiveCell.offset(1, 1).Value = ":IMPL"
18 ActiveCell.offset(2, 1).Value = ":BUS"
19 ActiveCell.offset(3, 1).Value = ":STATION"
20 ActiveCell.offset(4, 1).Value = ":POSITION"
21 ActiveCell.offset(1, 2).Value = 1
22 ActiveCell.offset(2, 2).Value = Bus
23 ActiveCell.offset(3, 2).Value = Stn
24 ActiveCell.offset(4, 2).Value = Pos
25 ActiveCell.offset(6, 0).Activate
26 Set S800_ActiveCell = ActiveCell
27 Worksheets(S400).Activate
28 End Sub
29 Private Sub CopyProperties(S400_IOProps As Object, Record_length As Integer, IOCategory As String, channel)
30 '
31 S400_IOProps.Activate
32 Range(Cells(ActiveCell.Row, ActiveCell.Column + 1), Cells(ActiveCell.Row, ActiveCell.Column + Record_length + 1)).Copy
33 Worksheets("S800").Activate
34 S800_ActiveCell.Activate
35 ActiveCell.Value = IOCategory & "." & channel
36 ActiveCell.offset(1, 1).Range("A1").PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
37 , Transpose:=True
38 Worksheets(S400).Activate
39 End Sub
40 Private Sub CopyValues(S400_signal_start As Object, Record_length As Integer)
41 '
42 Range(Cells(S400_signal_start.Row, S400_signal_start.Column + 1), Cells(S400_signal_start.Row, S400_signal_start.Column +
43 Record_length + 1)).Copy
44 Worksheets("S800").Select
45 S800_ActiveCell.Activate
46 ActiveCell.offset(1, 2).Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False _
47 , Transpose:=True
48 S800_ActiveCell.offset(Record_length + 2, 0).Activate
49 ActiveCell.Value = "END DB"
50 Set S800_ActiveCell = ActiveCell
51 Worksheets(S400).Activate
52 End Sub
53 Private Sub CreateSpareChannel(IOCategory As String, Bus, Station, Position, channel)
54 '
55 Worksheets("S800").Activate
56 S800_ActiveCell.Activate
57 ActiveCell.Value = IOCategory & "." & channel
58 'Comment out the following two lines to restore standard naming convention for S800 I/O spare channels
59 ActiveCell.offset(1, 1).Value = ":NAME"
60 ActiveCell.offset(1, 2).Value = Left(IOCategory, 2) & Bus & "_" & Station & "_" & Position & "." & channel
61 ActiveCell.offset(3, 0).Activate
62 ActiveCell.Value = "END DB"
63 Set S800_ActiveCell = ActiveCell
64 Worksheets(S400).Activate
65 End Sub
66 Private Sub CheckAI_Values(S400_signal As String)
67 '
68 Dim Warning As String, FILTER_P, SCANT, Filt_pos As Integer, Scant_pos As Integer, Filt_mult As Long, Scant_mult As Integer
69 '
70 Worksheets("S800").Activate
71 S800_ActiveCell.Activate
72 If ActiveCell.offset(-(AIXS_Record_length + 2 - AI_CONV_PAR), 2).Value = "-10..10V" Then
73 ActiveCell.offset(-(AIXS_Record_length + 2 - AI_CONV_PAR), 2).Value = "0..10V"
74 Warning = S400_signal & "Signal range -10 to 10V not supported on AI810." & Chr(13) & "Changed to 0 to 10 V."
75 MsgBox Warning, , "Warning!"
76 End If
77 If ActiveCell.offset(-(AIXS_Record_length + 2 - AI_CONV_PAR), 2).Value = "-20..20mA" Then
78 ActiveCell.offset(-(AIXS_Record_length + 2 - AI_CONV_PAR), 2).Value = "0..20mA"
79 Warning = S400_signal & " Signal range -20 to 20mA not supported on AI810." & Chr(13) & "Changed to 0 to 20 mA."
80 MsgBox Warning, , "Warning!"
81 End If
82 S800_ActiveCell.Activate
83 FILTER_P = ActiveCell.offset(-(AIXS_Record_length + 2 - AI_FILTER_P), 2).Value
84 Filt_pos = InStr(1, FILTER_P, "T")
85 If Filt_pos > 0 Then
86 Filt_mult = Left(FILTER_P, Filt_pos - 2)
87 SCANT = ActiveCell.offset(-(AIXS_Record_length + 2 - AI_SCANT), 2).Value
88 Scant_pos = InStr(1, SCANT, "ms", 1)

ABB Automation Technologies AB


16 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Row Excel VBA Source Code


89 If Scant_pos > 0 Then
90 Scant_mult = Left(SCANT, Scant_pos - 1)
91 Else
92 Scant_pos = InStr(1, SCANT, "s", 1)
93 If Scant_pos > 0 Then
94 Scant_mult = Left(SCANT, Scant_pos - 1)
95 Scant_mult = Scant_mult * 1000
96 Else
97 Scant_mult = 1000
98 End If
99 End If
100 Filt_mult = Filt_mult * Scant_mult
101 If Filt_mult < 9999 Then
102 ActiveCell.offset(-(AIXS_Record_length + 2 - AI_FILTER_P), 2).Value = Filt_mult & "ms"
103 Else
104 Filt_mult = Filt_mult / 1000
105 If Filt_mult <= 65 Then
106 ActiveCell.offset(-(AIXS_Record_length + 2 - AI_FILTER_P), 2).Value = Filt_mult & "s"
107 Else
108 ActiveCell.offset(-(AIXS_Record_length + 2 - AI_FILTER_P), 2).Value = "65s"
109 Warning = S400_signal & " FILTER_P longer that 65 s not supported on AI810" & Chr(13) & "Changed to 65 s."
110 MsgBox Warning, , "Warning!"
111 End If
112 End If
113 End If
114 S800_ActiveCell.Activate
115 Select Case ActiveCell.offset(-(AIXS_Record_length + 2 - AI_DEADB), 2).Value
116 Case 0.00025
117 ActiveCell.offset(-(AIXS_Record_length + 2 - AI_DEADB), 2).NumberFormat = "0.000%"
118 Case 0.001, 0.002, 0.004
119 ActiveCell.offset(-(AIXS_Record_length + 2 - AI_DEADB), 2).NumberFormat = "0.0%"
120 Case 0.008
121 ActiveCell.offset(-(AIXS_Record_length + 2 - AI_DEADB), 2).Value = 0.009
122 ActiveCell.offset(-(AIXS_Record_length + 2 - AI_DEADB), 2).NumberFormat = "0.0%"
123 Case 0.016
124 ActiveCell.offset(-(AIXS_Record_length + 2 - AI_DEADB), 2).Value = 0.018
125 ActiveCell.offset(-(AIXS_Record_length + 2 - AI_DEADB), 2).NumberFormat = "0.0%"
126 Case 0.032
127 ActiveCell.offset(-(AIXS_Record_length + 2 - AI_DEADB), 2).Value = 0.036
128 ActiveCell.offset(-(AIXS_Record_length + 2 - AI_DEADB), 2).NumberFormat = "0.0%"
129 Case Else
130 End Select
131 Worksheets(S400).Activate
132 End Sub
133 Private Sub CheckAO_Values(S400_signal As String)
134 '
135 Dim Warning As String
136 '
137 Worksheets("S800").Activate
138 S800_ActiveCell.Activate
139 If ActiveCell.offset(-(AOXS_Record_length + 2 - AO_CONV_PAR), 2).Value = "0..10V" Then
140 ActiveCell.offset(-(AOXS_Record_length + 2 - AO_CONV_PAR), 2).Value = "0..20mA"
141 Warning = S400_signal & " Signal range 0 to 10V not supported on AO810." & Chr(13) & "Changed to 0 to 20 mA."
142 MsgBox Warning, , "Warning!"
143 End If
144 If ActiveCell.offset(-(AOXS_Record_length + 2 - AO_CONV_PAR), 2).Value = "2..10V" Then
145 ActiveCell.offset(-(AOXS_Record_length + 2 - AO_CONV_PAR), 2).Value = "4..20mA"
146 Warning = S400_signal & " Signal range 2 to 10V not supported on AO810." & Chr(13) & "Changed to 4 to 20 mA."
147 MsgBox Warning, , "Warning!"
148 End If
149 Worksheets(S400).Activate
150 End Sub
151 Sub S800Initialize()
152 '
153 Dim ws As Worksheet
154 '
155 'If Worksheets.Count > 1 Then
156 For Each ws In ActiveWorkbook.Sheets
157 If ws.Name = "S800" Then
158 MsgBox "Already initialized"
159 Exit Sub
160 End If
161 Next ws
162 Application.Calculation = xlCalculationManual
163 Application.ScreenUpdating = False
164 Do
165 wildcard = Application.InputBox("Generate DB Code with wildcards (recommended) (Y/N)", "Wildcard", "Y", , , , , 2)
166 Loop Until wildcard = "Y" Or wildcard = "y" Or wildcard = "N" Or wildcard = "n"
167 If wildcard = "n" Then wildcard = "N"
168 If wildcard = "N" Then
169 AI800_record = 0
170 AO800_record = 0
171 DI800_record = 0
172 DO800_record = 0
173 Else
174 AI800_record = "*"
175 AO800_record = "*"
176 DI800_record = "*"
177 DO800_record = "*"
178 End If
179 [A1].Activate
180 Set SearchRange = Columns("A:A")
181 S400 = ActiveSheet.Name
182 Worksheets.Add.Name = "S800"

ABB Automation Technologies AB


17 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Row Excel VBA Source Code


183 Columns("B:C").ColumnWidth = 20
184 Columns("C:C").HorizontalAlignment = xlLeft
185 ActiveCell.Value = "BEGIN DB"
186 ActiveCell.offset(2, 0).Value = "HEADER"
187 ActiveCell.offset(4, 0).Activate
188 ActiveCell.Value = "END DB"
189 Set S800_ActiveCell = ActiveCell
190 Worksheets(S400).Activate
191 Set AIXS_Props = SearchRange.Find(What:="AIXS", After:=ActiveCell, LookIn:=xlValues, _
192 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
193 MatchCase:=False)
194 If Not AIXS_Props Is Nothing Then
195 AIXS_Record_length = 0
196 Do While AIXS_Props.offset(0, AIXS_Record_length + 1).Value <> ""
197 If AIXS_Props.offset(0, AIXS_Record_length + 1).Value = "CONV_PAR" Then AI_CONV_PAR = AIXS_Record_length + 1
198 If AIXS_Props.offset(0, AIXS_Record_length + 1).Value = "SCANT" Then AI_SCANT = AIXS_Record_length + 1
199 If AIXS_Props.offset(0, AIXS_Record_length + 1).Value = "DEADB" Then AI_DEADB = AIXS_Record_length + 1
200 If AIXS_Props.offset(0, AIXS_Record_length + 1).Value = "FILTER_P" Then AI_FILTER_P = AIXS_Record_length + 1
201 AIXS_Props.offset(0, AIXS_Record_length + 1).Value = ":" & AIXS_Props.offset(0, AIXS_Record_length + 1).Value
202 AIXS_Record_length = AIXS_Record_length + 1
203 Loop
204 End If
205 Set AOXS_Props = SearchRange.Find(What:="AOXS", After:=ActiveCell, LookIn:=xlValues, _
206 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
207 MatchCase:=False)
208 If Not AOXS_Props Is Nothing Then
209 AOXS_Record_length = 0
210 Do While AOXS_Props.offset(0, AOXS_Record_length + 1).Value <> ""
211 If AOXS_Props.offset(0, AOXS_Record_length + 1).Value = "CONV_PAR" Then AO_CONV_PAR = AOXS_Record_length + 1
212 AOXS_Props.offset(0, AOXS_Record_length + 1).Value = ":" & AOXS_Props.offset(0, AOXS_Record_length + 1).Value
213 AOXS_Record_length = AOXS_Record_length + 1
214 Loop
215 End If
216 Set DIXS_Props = SearchRange.Find(What:="DIXS", After:=ActiveCell, LookIn:=xlValues, _
217 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
218 MatchCase:=False)
219 If Not DIXS_Props Is Nothing Then
220 DIXS_Record_length = 0
221 Do While DIXS_Props.offset(0, DIXS_Record_length + 1).Value <> ""
222 DIXS_Props.offset(0, DIXS_Record_length + 1).Value = ":" & DIXS_Props.offset(0, DIXS_Record_length + 1).Value
223 DIXS_Record_length = DIXS_Record_length + 1
224 Loop
225 End If
226 Set DOXS_Props = SearchRange.Find(What:="DOXS", After:=ActiveCell, LookIn:=xlValues, _
227 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
228 MatchCase:=False)
229 If Not DOXS_Props Is Nothing Then
230 DOXS_Record_length = 0
231 Do While DOXS_Props.offset(0, DOXS_Record_length + 1).Value <> ""
232 DOXS_Props.offset(0, DOXS_Record_length + 1).Value = ":" & DOXS_Props.offset(0, DOXS_Record_length + 1).Value
233 DOXS_Record_length = DOXS_Record_length + 1
234 Loop
235 End If
236 If AIXS_Props Is Nothing And AOXS_Props Is Nothing And DIXS_Props Is Nothing And DOXS_Props Is Nothing Then
237 MsgBox "AIXS/AOXS/DIXS/DOXS DB Terminal Names Headlines not found!" & Chr(13) & _
238 "Export DB Section from FCB with option:" & Chr(13) & _
239 "Include Headline with DB Terminal Names", , "Initialize Failed!"
240 End If
241 [A1].Activate
242 Application.ScreenUpdating = True
243 End Sub
244
245 Sub ConvertS400()
246 '
247 Dim S400_ActiveCell As Object, S400_address As String, S400_signal As String, TU_unit As String, DI_unit As String
248 Dim BusNo, StationNo, Position, channel_no
249 Dim Channel_17 As String, Channel_18 As String, Channel_19 As String, Channel_20 As String, Warning As String
250 Dim ws As Worksheet
251 '
252 Application.ScreenUpdating = False
253 If Worksheets.Count = 1 Then
254 MsgBox "Not initialized"
255 Exit Sub
256 End If
257 Set S400_ActiveCell = ActiveCell
258 S400_address = ActiveCell.Value
259 If Not Left(S400_address, 2) = "AX" And Not Left(S400_address, 2) = "DX" Then
260 MsgBox "Selected cell is not S400 I/O unit." & Chr(13) & "Select S400 I/O unit cell (AX???/DX???)", , "Conversion Failed!"
261 Exit Sub
262 Else
263 If InStr(S400_address, ".") <> 0 Then
264 MsgBox "Selected cell is S400 I/O signal." & Chr(13) & "Select S400 I/O unit cell (AX???/DX???)", , "Conversion Failed!"
265 Exit Sub
266 End If
267 End If
268 If ActiveCell.offset(0, 3) = "DSAX_452" Then
269 TU_unit = "TU401"
270 Else
271 Select Case ActiveCell.offset(0, 3)
272 Case "DSDX_452", "DSDX_452L"
273 DI_unit = "DI810"
274 Select Case ActiveCell.offset(0, 4)
275 Case "DSDX_451", "DSDX_451L"
276 TU_unit = "TU407"

ABB Automation Technologies AB


18 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Row Excel VBA Source Code


277 Case "DSDI_451"
278 TU_unit = "TU405"
279 Case "0"
280 TU_unit = "TU402"
281 Case Else
282 MsgBox "TU40x type could not be determined. Verify cell selection.", , "Conversion Failed!"
283 Exit Sub
284 End Select
285 Case "DSDX_454", "DSDX_454L"
286 DI_unit = "DI811"
287 Select Case ActiveCell.offset(0, 4)
288 Case "DSDX_453", "DSDX_453L"
289 TU_unit = "TU407"
290 Case "DSDI_453"
291 TU_unit = "TU405"
292 Case "0"
293 TU_unit = "TU402"
294 Case Else
295 MsgBox "TU40x type could not be determined. Verify cell selection.", , "Conversion Failed!"
296 Exit Sub
297 End Select
298 Case "DSDI_452"
299 DI_unit = "DI810"
300 Select Case ActiveCell.offset(0, 4)
301 Case "DSDX_451"
302 TU_unit = "TU406"
303 Case "DSDI_451"
304 TU_unit = "TU404"
305 Case "0"
306 TU_unit = "TU403"
307 Case Else
308 MsgBox "TU40x type could not be determined. Verify cell selection.", , "Conversion Failed!"
309 Exit Sub
310 End Select
311 Case "DSDI_454"
312 DI_unit = "DI811"
313 Select Case ActiveCell.offset(0, 4)
314 Case "DSDX_453"
315 TU_unit = "TU406"
316 Case "DSDI_453"
317 TU_unit = "TU404"
318 Case "0"
319 TU_unit = "TU403"
320 Case Else
321 MsgBox "TU40x type could not be determined. Verify cell selection.", , "Conversion Failed!"
322 Exit Sub
323 End Select
324 Case Else
325 MsgBox "TU40x type could not be determined. Verify cell selection.", , "Conversion Failed!"
326 Exit Sub
327 End Select
328 End If
329 '
330 BusNo = Application.InputBox("Enter AF100 Bus Number, 1, 2, 3 or 4", TU_unit, 1, , , , , 1)
331 If BusNo = False Then Exit Sub
332 StationNo = Application.InputBox("Enter Station Number. 1..80", TU_unit, 1, , , , , 1)
333 If StationNo = False Then Exit Sub
334 Position = Application.InputBox("Enter First I/O Module Position," & Chr(13) & "1..10, 101..110, .. , 701..710", TU_unit, 1, , , ,
335 , 1)
336 If Position = False Then Exit Sub
337 '
338 Select Case TU_unit
339 Case "TU401"
340 If AIXS_Props Is Nothing Or AOXS_Props Is Nothing Then
341 MsgBox "AIXS/AOXS DB Terminal Names Headline not found", , "Conversion Failed!"
342 Exit Sub
343 End If
344 'Write AI810 Header
345 If wildcard = "N" Then AI800_record = AI800_record + 1
346 CreateS800IOHeader "AI800_" & AI800_record, "AI810", BusNo, StationNo, Position
347 'Write AIS810
348 For channel_no = 1 To 8
349 S400_signal = S400_address & "." & channel_no
350 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
351 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
352 MatchCase:=False)
353 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
354 CreateSpareChannel "AI800_" & AI800_record, BusNo, StationNo, Position, channel_no
355 Else
356 CopyProperties AIXS_Props, AIXS_Record_length, "AI800_" & AI800_record, channel_no
357 CopyValues S400_signal_start, AIXS_Record_length
358 CheckAI_Values S400_signal
359 End If
360 Next channel_no
361 'Write AI810 Header
362 If wildcard = "N" Then AI800_record = AI800_record + 1
363 CreateS800IOHeader "AI800_" & AI800_record, "AI810", BusNo, StationNo, Position + 1
364 'Write AIS810
365 For channel_no = 9 To 14
366 S400_signal = S400_address & "." & channel_no
367 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
368 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
369 MatchCase:=False)
370 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then

ABB Automation Technologies AB


19 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Row Excel VBA Source Code


371 CreateSpareChannel "AI800_" & AI800_record, BusNo, StationNo, Position + 1, channel_no - 8
372 Else
373 CopyProperties AIXS_Props, AIXS_Record_length, "AI800_" & AI800_record, channel_no - 8
374 CopyValues S400_signal_start, AIXS_Record_length
375 CheckAI_Values S400_signal
376 End If
377 Next channel_no
378 For channel_no = 7 To 8
379 CreateSpareChannel "AI800_" & AI800_record, BusNo, StationNo, Position + 1, channel_no
380 Next channel_no
381 'Write AO810 Header
382 If wildcard = "N" Then AO800_record = AO800_record + 1
383 CreateS800IOHeader "AO800_" & AO800_record, "AO810", BusNo, StationNo, Position + 2
384 'Write AOS810
385 For channel_no = 15 To 20
386 S400_signal = S400_address & "." & channel_no
387 Set S400_signal_start = Cells.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
388 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
389 MatchCase:=False)
390 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
391 CreateSpareChannel "AO800_" & AO800_record, BusNo, StationNo, Position + 2, channel_no - 14
392 Else
393 CopyProperties AOXS_Props, AOXS_Record_length, "AO800_" & AO800_record, channel_no - 14
394 CopyValues S400_signal_start, AOXS_Record_length
395 CheckAO_Values S400_signal
396 End If
397 Next channel_no
398 For channel_no = 7 To 8
399 CreateSpareChannel "AO800_" & AO800_record, BusNo, StationNo, Position + 2, channel_no
400 Next channel_no
401 Case "TU407"
402 If DIXS_Props Is Nothing Or DOXS_Props Is Nothing Then
403 MsgBox "DIXS/DOXS DB Terminal Names Headline not found", , "Conversion Failed!"
404 Exit Sub
405 End If
406 'Write DI810/DI811 Header
407 If wildcard = "N" Then DI800_record = DI800_record + 1
408 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position
409 'Write DIS810/DIS811
410 For channel_no = 1 To 16
411 S400_signal = S400_address & "." & channel_no
412 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
413 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
414 MatchCase:=False)
415 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
416 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position, channel_no
417 Else
418 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no
419 CopyValues S400_signal_start, DIXS_Record_length
420 End If
421 Next channel_no
422 'Write DO820 Header
423 If wildcard = "N" Then DO800_record = DO800_record + 1
424 CreateS800IOHeader "DO800_" & DO800_record, "DO820", BusNo, StationNo, Position + 1
425 'Write DOS820
426 For channel_no = 21 To 28
427 S400_signal = S400_address & "." & channel_no
428 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
429 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
430 MatchCase:=False)
431 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
432 CreateSpareChannel "DO800_" & DO800_record, BusNo, StationNo, Position + 1, channel_no - 20
433 Else
434 CopyProperties DOXS_Props, DOXS_Record_length, "DO800_" & DO800_record, channel_no - 20
435 CopyValues S400_signal_start, DOXS_Record_length
436 End If
437 Next channel_no
438 'Write DI810/DI811 Header
439 If wildcard = "N" Then DI800_record = DI800_record + 1
440 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position + 2
441 'Write DIS810/DIS811
442 For channel_no = 17 To 20
443 S400_signal = S400_address & "." & channel_no
444 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
445 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
446 MatchCase:=False)
447 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
448 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 2, channel_no - 16
449 Else
450 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no - 16
451 CopyValues S400_signal_start, DIXS_Record_length
452 End If
453 Next channel_no
454 For channel_no = 5 To 8
455 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 2, channel_no
456 Next channel_no
457 For channel_no = 33 To 36
458 S400_signal = S400_address & "." & channel_no
459 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
460 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
461 MatchCase:=False)
462 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
463 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 2, channel_no - 24
464 Else

ABB Automation Technologies AB


20 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Row Excel VBA Source Code


465 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no - 24
466 CopyValues S400_signal_start, DIXS_Record_length
467 End If
468 Next channel_no
469 For channel_no = 13 To 16
470 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 2, channel_no
471 Next channel_no
472 'Write DO820 Header
473 If wildcard = "N" Then DO800_record = DO800_record + 1
474 CreateS800IOHeader "DO800_" & DO800_record, "DO820", BusNo, StationNo, Position + 3
475 'Write DOS820
476 For channel_no = 29 To 32
477 S400_signal = S400_address & "." & channel_no
478 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
479 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
480 MatchCase:=False)
481 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
482 CreateSpareChannel "DO800_" & DO800_record, BusNo, StationNo, Position + 3, channel_no - 28
483 Else
484 CopyProperties DOXS_Props, DOXS_Record_length, "DO800_" & DO800_record, channel_no - 28
485 CopyValues S400_signal_start, DOXS_Record_length
486 End If
487 Next channel_no
488 For channel_no = 53 To 56
489 S400_signal = S400_address & "." & channel_no
490 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
491 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
492 MatchCase:=False)
493 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
494 CreateSpareChannel "DO800_" & DO800_record, BusNo, StationNo, Position + 3, channel_no - 48
495 Else
496 CopyProperties DOXS_Props, DOXS_Record_length, "DO800_" & DO800_record, channel_no - 48
497 CopyValues S400_signal_start, DOXS_Record_length
498 End If
499 Next channel_no
500 'Write DI810/DI811 Header
501 If wildcard = "N" Then DI800_record = DI800_record + 1
502 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position + 4
503 'Write DIS810/DIS811
504 For channel_no = 37 To 52
505 S400_signal = S400_address & "." & channel_no
506 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
507 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
508 MatchCase:=False)
509 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
510 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 4, channel_no - 36
511 Else
512 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no - 36
513 CopyValues S400_signal_start, DIXS_Record_length
514 End If
515 Next channel_no
516 'Write DO820 Header
517 If wildcard = "N" Then DO800_record = DO800_record + 1
518 CreateS800IOHeader "DO800_" & DO800_record, "DO820", BusNo, StationNo, Position + 5
519 'Write DOS820
520 For channel_no = 57 To 64
521 S400_signal = S400_address & "." & channel_no
522 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
523 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
524 MatchCase:=False)
525 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
526 CreateSpareChannel "DO800_" & DO800_record, BusNo, StationNo, Position + 5, channel_no - 56
527 Else
528 CopyProperties DOXS_Props, DOXS_Record_length, "DO800_" & DO800_record, channel_no - 56
529 CopyValues S400_signal_start, DOXS_Record_length
530 End If
531 Next channel_no
532 Case "TU402"
533 If DIXS_Props Is Nothing Or DOXS_Props Is Nothing Then
534 MsgBox "DIXS/DOXS DB Terminal Names Headline not found", , "Conversion Failed!"
535 Exit Sub
536 End If
537 'Write DI810/DI811 Header
538 If wildcard = "N" Then DI800_record = DI800_record + 1
539 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position
540 'Write DIS810/DIS811
541 For channel_no = 1 To 16
542 S400_signal = S400_address & "." & channel_no
543 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
544 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
545 MatchCase:=False)
546 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
547 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position, channel_no
548 Else
549 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no
550 CopyValues S400_signal_start, DIXS_Record_length
551 End If
552 Next channel_no
553 'Write DO820 Header
554 If wildcard = "N" Then DO800_record = DO800_record + 1
555 CreateS800IOHeader "DO800_" & DO800_record, "DO820", BusNo, StationNo, Position + 1
556 'Write DOS820
557 For channel_no = 21 To 28
558 S400_signal = S400_address & "." & channel_no

ABB Automation Technologies AB


21 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Row Excel VBA Source Code


559 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
560 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
561 MatchCase:=False)
562 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
563 CreateSpareChannel "DO800_" & DO800_record, BusNo, StationNo, Position + 1, channel_no - 20
564 Else
565 CopyProperties DOXS_Props, DOXS_Record_length, "DO800_" & DO800_record, channel_no - 20
566 CopyValues S400_signal_start, DOXS_Record_length
567 End If
568 Next channel_no
569 'Write DO820 Header
570 If wildcard = "N" Then DO800_record = DO800_record + 1
571 CreateS800IOHeader "DO800_" & DO800_record, "DO820", BusNo, StationNo, Position + 2
572 'Write DOS820
573 For channel_no = 29 To 32
574 S400_signal = S400_address & "." & channel_no
575 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
576 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
577 MatchCase:=False)
578 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
579 CreateSpareChannel "DO800_" & DO800_record, BusNo, StationNo, Position + 2, channel_no - 28
580 Else
581 CopyProperties DOXS_Props, DOXS_Record_length, "DO800_" & DO800_record, channel_no - 28
582 CopyValues S400_signal_start, DOXS_Record_length
583 End If
584 Next channel_no
585 For channel_no = 5 To 8
586 CreateSpareChannel "DO800_" & DO800_record, BusNo, StationNo, Position + 2, channel_no
587 Next channel_no
588 S400_signal = S400_address & ".17"
589 Channel_17 = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
590 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
591 MatchCase:=False).offset(0, 1).Value
592 S400_signal = S400_address & ".18"
593 Channel_18 = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
594 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
595 MatchCase:=False).offset(0, 1).Value
596 S400_signal = S400_address & ".19"
597 Channel_19 = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
598 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
599 MatchCase:=False).offset(0, 1).Value
600 S400_signal = S400_address & ".20"
601 Channel_20 = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
602 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
603 MatchCase:=False).offset(0, 1).Value
604 Warning = "TU402 only supports 16 DI channels. Channels:" & Chr(13) & Channel_17 & "," & Chr(13) & Channel_18 & "," &
605 Chr(13) & Channel_19 & "," & Chr(13) & Channel_20 & Chr(13) & "will be dropped"
606 MsgBox Warning, , "Warning!"
607 Case "TU403"
608 If DIXS_Props Is Nothing Then
609 MsgBox "DIXS DB Terminal Names Headline not found", , "Conversion Failed!"
610 Exit Sub
611 End If
612 'Write DI810/DI811 Header
613 If wildcard = "N" Then DI800_record = DI800_record + 1
614 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position
615 'Write DIS810/DIS811
616 For channel_no = 1 To 16
617 S400_signal = S400_address & "." & channel_no
618 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
619 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
620 MatchCase:=False)
621 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
622 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position, channel_no
623 Else
624 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no
625 CopyValues S400_signal_start, DIXS_Record_length
626 End If
627 Next channel_no
628 'Write DI810/DI811 Header
629 If wildcard = "N" Then DI800_record = DI800_record + 1
630 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position + 1
631 'Write DIS810/DIS811
632 For channel_no = 17 To 32
633 S400_signal = S400_address & "." & channel_no
634 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
635 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
636 MatchCase:=False)
637 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
638 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 1, channel_no - 16
639 Else
640 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no - 16
641 CopyValues S400_signal_start, DIXS_Record_length
642 End If
643 Next channel_no
644 Case "TU404"
645 If DIXS_Props Is Nothing Then
646 MsgBox "DIXS DB Terminal Names Headline not found", , "Conversion Failed!"
647 Exit Sub
648 End If
649 'Write DI810/DI811 Header
650 If wildcard = "N" Then DI800_record = DI800_record + 1
651 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position
652 'Write DIS810/DIS811

ABB Automation Technologies AB


22 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Row Excel VBA Source Code


653 For channel_no = 1 To 16
654 S400_signal = S400_address & "." & channel_no
655 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
656 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
657 MatchCase:=False)
658 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
659 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position, channel_no
660 Else
661 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no
662 CopyValues S400_signal_start, DIXS_Record_length
663 End If
664 Next channel_no
665 'Write DI810/DI811 Header
666 If wildcard = "N" Then DI800_record = DI800_record + 1
667 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position + 1
668 'Write DIS810/DIS811
669 For channel_no = 17 To 32
670 S400_signal = S400_address & "." & channel_no
671 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
672 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
673 MatchCase:=False)
674 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
675 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 1, channel_no - 16
676 Else
677 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no - 16
678 CopyValues S400_signal_start, DIXS_Record_length
679 End If
680 Next channel_no
681 'Write DI810/DI811 Header
682 If wildcard = "N" Then DI800_record = DI800_record + 1
683 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position + 2
684 'Write DIS810/DIS811
685 For channel_no = 33 To 48
686 S400_signal = S400_address & "." & channel_no
687 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
688 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
689 MatchCase:=False)
690 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
691 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 2, channel_no - 32
692 Else
693 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no - 32
694 CopyValues S400_signal_start, DIXS_Record_length
695 End If
696 Next channel_no
697 'Write DI810/DI811 Header
698 If wildcard = "N" Then DI800_record = DI800_record + 1
699 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position + 3
700 'Write DIS810/DIS811
701 For channel_no = 49 To 64
702 S400_signal = S400_address & "." & channel_no
703 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
704 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
705 MatchCase:=False)
706 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
707 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 3, channel_no - 48
708 Else
709 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no - 48
710 CopyValues S400_signal_start, DIXS_Record_length
711 End If
712 Next channel_no
713 Case "TU405"
714 If DIXS_Props Is Nothing Or DOXS_Props Is Nothing Then
715 MsgBox "DIXS/DOXS DB Terminal Names Headline not found", , "Conversion Failed!"
716 Exit Sub
717 End If
718 'Write DI810/DI811 Header
719 If wildcard = "N" Then DI800_record = DI800_record + 1
720 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position
721 'Write DIS810/DIS811
722 For channel_no = 1 To 16
723 S400_signal = S400_address & "." & channel_no
724 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
725 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
726 MatchCase:=False)
727 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
728 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position, channel_no
729 Else
730 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no
731 CopyValues S400_signal_start, DIXS_Record_length
732 End If
733 Next channel_no
734 'Write DI810/DI811 Header
735 If wildcard = "N" Then DI800_record = DI800_record + 1
736 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position + 1
737 'Write DIS810/DIS811
738 For channel_no = 17 To 20
739 S400_signal = S400_address & "." & channel_no
740 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
741 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
742 MatchCase:=False)
743 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
744 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 1, channel_no - 16
745 Else
746 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no - 16

ABB Automation Technologies AB


23 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Row Excel VBA Source Code


747 CopyValues S400_signal_start, DIXS_Record_length
748 End If
749 Next channel_no
750 For channel_no = 5 To 16
751 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 1, channel_no
752 Next channel_no
753 'Write DO820 Header
754 If wildcard = "N" Then DO800_record = DO800_record + 1
755 CreateS800IOHeader "DO800_" & DO800_record, "DO820", BusNo, StationNo, Position + 2
756 'Write DOS820
757 For channel_no = 21 To 28
758 S400_signal = S400_address & "." & channel_no
759 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
760 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
761 MatchCase:=False)
762 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
763 CreateSpareChannel "DO800_" & DO800_record, BusNo, StationNo, Position + 2, channel_no - 20
764 Else
765 CopyProperties DOXS_Props, DOXS_Record_length, "DO800_" & DO800_record, channel_no - 20
766 CopyValues S400_signal_start, DOXS_Record_length
767 End If
768 Next channel_no
769 'Write DO820 Header
770 If wildcard = "N" Then DO800_record = DO800_record + 1
771 CreateS800IOHeader "DO800_" & DO800_record, "DO820", BusNo, StationNo, Position + 3
772 'Write DOS820
773 For channel_no = 29 To 32
774 S400_signal = S400_address & "." & channel_no
775 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
776 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
777 MatchCase:=False)
778 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
779 CreateSpareChannel "DO800_" & DO800_record, BusNo, StationNo, Position + 3, channel_no - 28
780 Else
781 CopyProperties DOXS_Props, DOXS_Record_length, "DO800_" & DO800_record, channel_no - 28
782 CopyValues S400_signal_start, DOXS_Record_length
783 End If
784 Next channel_no
785 For channel_no = 5 To 8
786 CreateSpareChannel "DO800_" & DO800_record, BusNo, StationNo, Position + 3, channel_no
787 Next channel_no
788 'Write DI810/DI811 Header
789 If wildcard = "N" Then DI800_record = DI800_record + 1
790 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position + 4
791 'Write DIS810/DIS811
792 For channel_no = 33 To 48
793 S400_signal = S400_address & "." & channel_no
794 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
795 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
796 MatchCase:=False)
797 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
798 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 4, channel_no - 32
799 Else
800 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no - 32
801 CopyValues S400_signal_start, DIXS_Record_length
802 End If
803 Next channel_no
804 'Write DI810/DI811 Header
805 If wildcard = "N" Then DI800_record = DI800_record + 1
806 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position + 5
807 'Write DIS810/DIS811
808 For channel_no = 49 To 64
809 S400_signal = S400_address & "." & channel_no
810 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
811 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
812 MatchCase:=False)
813 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
814 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 5, channel_no - 48
815 Else
816 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no - 48
817 CopyValues S400_signal_start, DIXS_Record_length
818 End If
819 Next channel_no
820 Case "TU406"
821 If DIXS_Props Is Nothing Or DOXS_Props Is Nothing Then
822 MsgBox "DIXS/DOXS DB Terminal Names Headline not found", , "Conversion Failed!"
823 Exit Sub
824 End If
825 'Write DI810/DI811 Header
826 If wildcard = "N" Then DI800_record = DI800_record + 1
827 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position
828 'Write DIS810/DIS811
829 For channel_no = 1 To 16
830 S400_signal = S400_address & "." & channel_no
831 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
832 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
833 MatchCase:=False)
834 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
835 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position, channel_no
836 Else
837 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no
838 CopyValues S400_signal_start, DIXS_Record_length
839 End If
840 Next channel_no

ABB Automation Technologies AB


24 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Row Excel VBA Source Code


841 'Write DI810/DI811 Header
842 If wildcard = "N" Then DI800_record = DI800_record + 1
843 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position + 1
844 'Write DIS810/DIS811
845 For channel_no = 17 To 32
846 S400_signal = S400_address & "." & channel_no
847 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
848 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
849 MatchCase:=False)
850 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
851 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 1, channel_no - 16
852 Else
853 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no - 16
854 CopyValues S400_signal_start, DIXS_Record_length
855 End If
856 Next channel_no
857 'Write DI810/DI811 Header
858 If wildcard = "N" Then DI800_record = DI800_record + 1
859 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position + 2
860 'Write DIS810/DIS811
861 For channel_no = 33 To 48
862 S400_signal = S400_address & "." & channel_no
863 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
864 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
865 MatchCase:=False)
866 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
867 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 2, channel_no - 32
868 Else
869 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no - 32
870 CopyValues S400_signal_start, DIXS_Record_length
871 End If
872 Next channel_no
873 'Write DI810/DI811 Header
874 If wildcard = "N" Then DI800_record = DI800_record + 1
875 CreateS800IOHeader "DI800_" & DI800_record, DI_unit, BusNo, StationNo, Position + 3
876 'Write DIS810/DIS811
877 For channel_no = 49 To 52
878 S400_signal = S400_address & "." & channel_no
879 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
880 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
881 MatchCase:=False)
882 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
883 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 3, channel_no - 48
884 Else
885 CopyProperties DIXS_Props, DIXS_Record_length, "DI800_" & DI800_record, channel_no - 48
886 CopyValues S400_signal_start, DIXS_Record_length
887 End If
888 Next channel_no
889 For channel_no = 5 To 16
890 CreateSpareChannel "DI800_" & DI800_record, BusNo, StationNo, Position + 3, channel_no
891 Next channel_no
892 'Write DO820 Header
893 If wildcard = "N" Then DO800_record = DO800_record + 1
894 CreateS800IOHeader "DO800_" & DO800_record, "DO820", BusNo, StationNo, Position + 4
895 'Write DOS820
896 For channel_no = 53 To 60
897 S400_signal = S400_address & "." & channel_no
898 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
899 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
900 MatchCase:=False)
901 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
902 CreateSpareChannel "DO800_" & DO800_record, BusNo, StationNo, Position + 4, channel_no - 52
903 Else
904 CopyProperties DOXS_Props, DOXS_Record_length, "DO800_" & DO800_record, channel_no - 52
905 CopyValues S400_signal_start, DOXS_Record_length
906 End If
907 Next channel_no
908 'Write DO820 Header
909 If wildcard = "N" Then DO800_record = DO800_record + 1
910 CreateS800IOHeader "DO800_" & DO800_record, "DO820", BusNo, StationNo, Position + 5
911 'Write DOS820
912 For channel_no = 61 To 64
913 S400_signal = S400_address & "." & channel_no
914 Set S400_signal_start = SearchRange.Find(What:=S400_signal, After:=ActiveCell, LookIn:=xlValues, _
915 LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
916 MatchCase:=False)
917 If S400_signal_start.offset(0, 1).Value Like S400_address & "*" Then
918 CreateSpareChannel "DO800_" & DO800_record, BusNo, StationNo, Position + 5, channel_no - 60
919 Else
920 CopyProperties DOXS_Props, DOXS_Record_length, "DO800_" & DO800_record, channel_no - 60
921 CopyValues S400_signal_start, DOXS_Record_length
922 End If
923 Next channel_no
924 For channel_no = 5 To 8
925 CreateSpareChannel "DO800_" & DO800_record, BusNo, StationNo, Position + 5, channel_no
926 Next channel_no
927 Case Else
928 MsgBox "Illegal TU40x type.", , "Conversion Failed!"
929 End Select
930 Application.ScreenUpdating = True
931 Application.CutCopyMode = False
932 S400_ActiveCell.Activate
933 End Sub
934 'Sub SaveS800()

ABB Automation Technologies AB


25 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

Row Excel VBA Source Code


935 ' Dim newname As String, oldname As String, oldpath As String, old_format As XlFileFormat
936 '
937 ' newname = Application.InputBox("File Name?", "S800 Source Code Save", "S800IO", , , , , 2)
938 ' Worksheets("S800").Activate
939 ' With ActiveWorkbook
940 ' oldname = .Name
941 ' oldpath = .Path
942 ' oldformat = .FileFormat
943 ' .ActiveSheet.SaveAs _
944 ' Filename:=newname & ".bax", FileFormat:=xlTextWindows
945 ' Application.DisplayAlerts = False
946 ' .SaveAs Filename:=oldpath & oldname, FileFormat:=oldformat
947 ' Application.DisplayAlerts = True
948 ' End With
949 ' Worksheets(S400).Activate
950 'End Sub
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977

9. Appendix C – Conversion Sheet

Please use the Excel file in ABB library for the actual conversion.

ABB Automation Technologies AB


26 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

© Copyright 2005 ABB. All rights reserved.


The information in this document is subject to change without notice and should not be construed as a commitment by ABB.
ABB assumes no responsibility for any errors that may appear in this document.
In no event shall ABB be liable for direct, indirect, special, incidental or consequential damages of any nature or kind arising
from the use of this document or the information contained therein, nor shall ABB be liable for incidental or consequential
damages arising from use of any software or hardware described or referred to in this document.
This document and parts thereof must not be reproduced or copied without written permission from ABB, and the contents
thereof must not be imparted to a third party nor used for any unauthorized purpose.

Trademarks:
Registrations and trademarks used in this document include:
The IndustrialIT wordmark and all product names in the form XXXXXXIT mentioned herein are registered or pending
trademarks of ABB.
Microsoft Registered trademark of Microsoft Corporation.
Windows Registered trademark of Microsoft Corporation.
Windows 2000 and Windows XP Registered trademarks of Microsoft Corporation.
ActiveX and Visual Basic Registered trademarks of Microsoft Corporation.
PostScript Registered trademark of Adobe Systems Inc.
Acrobat Reader Registered trademark of Adobe Systems Inc.
Ghost Registered trademark of Symantec Corporation.
Aspect Studio Trademark of ABB Ltd., Switzerland.
Aspect Express Trademark of ABB Ltd., Switzerland.
Process Portal Trademark of ABB Ltd., Switzerland>

ABB Automation Technologies AB


27 (27)
Doc. no. 3BSE040302 en
Rev. ind.
Date 2005-05-11

REVISION

Rev. ind. Page (P) Description Date Dept./Init.


Chapt. (C)
- Initial Version. 9th of May 2005
SE-ATPA/XA/FS
Erik Danielsson

ABB Automation Technologies AB

You might also like