Escolar Documentos
Profissional Documentos
Cultura Documentos
CURITIBA
2008
CURITIBA
2008
V628u
2008
ii
AGRADECIMENTOS
Busetti,
pela
confiana
em
mim
depositada,
auxiliando-me
no
iii
SUMRIO
INTRODUO ....................................................................................................1
FUNDAMENTAO TERICA...........................................................................9
ETAPA DE IMPLEMENTAO.........................................................................43
EXEMPLO DE APLICAO..............................................................................58
CONCLUSO....................................................................................................71
iv
REFERNCIAS.........................................................................................................74
APNDICE ................................................................................................................79
LISTA DE FIGURAS
vi
vii
viii
LISTA DE ABREVIATURAS
ix
RESUMO
ABSTRACT
The growth of competitiveness in enterprises has forced them to reduce more the
releasing time of their products. Consequently, the enterprise and academys effort in
providing techniques and tools for the reconfiguration of its systems is in force. A
manufacturing system is a classical example of a Discrete-Event System (DES), for
its dynamics develops according to the occurrence of discrete events over time. In
this context, formal methods of DES modeling, analysis and synthesis, such as
Supervisory Control Theory (SCT), have contributed for the solution of some
problems, although there are still some limitations to this formalism, for instance, the
centralization of the supervisor agent. Extensions of SCT, such as Local Modular
Control (LMC), are alternatives in order to decentralize the supervisor agent and
provide the reconfiguration of the manufacturing system more quickly. From this
point, there is the requirement of elaborating a development sequence, made of
steps. The first one is the DES modeling. The second one is the modular supervisors
synthesis, and the third one is the implementation itself. In the latter, the theoretical
model is translated to a language suited to the industrial platform, which presents the
need of having validation methods before connecting the equipment to the
manufacturing system. A possible validation method consists in simulating the
controlling structure and inserting it gradually to the real system. This work assumes
using the simulation as a support tool to the implementation of the supervisory control
structure. By this modeling, the physical subsystems gradual migration to real
physical subsystems is made possible, by using the technique known as Hardwarein-the-Loop (HiL), which assumes the validation of the control structure, achieved by
the simulation and, gradually allows the insertion of the real controllers of the physical
plant. Along the validation, the physical subsystems previously simulated are placed
into the manufacturing system. Finally, an application example to the manufacturing
system is projected. This way, the approach presented in this work is validated.
1 INTRODUO
trabalhos
foram
desenvolvidos
tendo
em
vista
1.1
Objetivos
1.2
possibilidade
da
implementao,
elaborada
uma
sistemtica
de
1.3
Estruturao
Captulo 1:
Introduo
Captulo 2:
Metodologia
Captulo 3:
Fundamentao Terica
Teoria de Controle Supervisrio, Manufatura
gil, HiL
Captulo 4:
Desenvolvimento
da Sistemtica
Captulo 5:
Implementao
Captulo 6:
Concluso
Figura 1.1 Estruturao da dissertao
2 FUNDAMENTAO TERICA
2.1
10
estado (andar)
0
t1
t2
t3
t4
tempo
Na Figura 2.1, observa-se que o elevador tem trs estados - 0,1 e 2 e na sua trajetria ocorrem dois eventos: subir e descer. V-se que um mesmo
evento pode ter efeitos diferentes, dependendo do estado em que ocorre. Por
exemplo, se o sistema est no estado 0 e ocorre o evento subir, o prximo estado
ser 1; se o evento subir ocorre em 1, o prximo estado ser 2. A trajetria pode
continuar indefinidamente, inclusive com a ocorrncia de novos eventos ou estados.
Nos sistemas tratados, assume-se que o nmero total de eventos
diferentes que podem ocorrer finito. Em relao ao nmero de estados, pode ser
ilimitado no caso geral, embora a classe de sistemas com um nmero finito de
estados seja um caso particular importante (CURY, 2001).
O espao de estados de um SED limitado a um conjunto
enumervel e, diferentemente dos sistemas fsicos, pode ter valores simblicos em
11
vez de valores reais; por exemplo, uma mquina est inativa, trabalhando ou
quebrada, um elevador est no trreo, primeiro ou segundo andar. Ainda, eventos
(causam transies de estados) ocorrem assincronamente em instantes discretos do
tempo, sendo caracterizados ou rotulados tambm por valores simblicos. Desta
forma, as relaes entre transies de estados e eventos so irregulares e
normalmente no podem ser descritas usando equaes diferenciais ou de
diferena, como ocorre em muitos sistemas fsicos (KUMAR e GARG 1995).
Os sistemas fsicos descritos por equaes diferenciais so
denominados sistemas dinmicos a variveis contnuas. Estes, em geral, mudam de
estado de forma contnua, tendo o seu comportamento descrito por uma funo que
relaciona o estado (varivel dependente) ao tempo (varivel independente). Assim,
tais sistemas contrastam com os SEDs, j que se caracterizam pela continuidade
das variveis de estado e cujo mecanismo de transio dirigido pelo tempo. Ao
contrrio destes sistemas, os SEDs podem permanecer um tempo arbitrrio em um
mesmo estado, sendo que sua trajetria pode ser dada por uma sequncia de
eventos na forma {1, 2, ...}, incluindo eventualmente os instantes de tempo em
que tais eventos ocorrem {(1, t1), (2, t2), ...}. A quantidade de informao
necessria depende dos objetivos da aplicao (CURY, 2001).
A Figura 2.2, extrada de CASSANDRAS e LAFORTUNE (1999)
ilustra as caractersticas que distinguem os sistemas a variveis contnuas (SVCs)
dos sistemas a eventos discretos (SEDs). Para os SVCs, o espao de estados o
conjunto dos nmeros reais e x(t) poder assumir qualquer valor deste conjunto.
Tambm, a funo x(t) a soluo de uma equao diferencial na forma geral
.
o conjunto discreto X = {s1, s2, s3, s4, s5, s6}. A evoluo do sistema se d pela
mudana de um estado a outro sempre que um evento ocorre. Observa-se que a
ocorrncia de um evento no significa necessariamente uma transio de estado,
como o caso do evento e3. Nota-se ento que no existe nenhum mecanismo que
especifica como eventos interagem com o tempo ou como o tempo de ocorrncia
pode ser determinado (CASSANDRAS e LAFORTUNE, 1999).
12
X =R
s6
s5
s4
x(t)
s3
s2
X = {s
1, s2, s3, s4, s5, s6}
t
s1
t1
t2 t3
t6
t7
e1
e2 e3 e4 e5 e6
e7
t4 t5
2.2
13
Planta
Entrada de controle:
eventos habilitados
Eventos
observados
Supervisor
14
= 2 : u
15
16
guiado ou a tentativa de colocar uma pea num buffer cheio num sistema de
manufatura automatizado. Ou ainda, algumas palavras em L(G) podem conter
prefixos que no so permitidos, que violam uma seqncia desejada de certos
eventos. Assim, consideram-se sub-linguagens de L(G) que representam o
comportamento legal ou admissvel do sistema controlado (CASSANDRAS e
LAFORTUNE, 1999).
2.3
17
18
2.4
n'
i =1
i =1
19
2.4.
a
'1
'
'
b
' 2
'3
'
' 4
'5
Esse sistema tem uma RSP mais refinada dada pelo conjunto de
plantas assncronas
G1 = G '1 ,
G2 = G ' 2 G '3 ,
20
2.5
21
2.6
A princpio,
a teoria de controle
supervisrio
(Ramadge and
22
a)
b)
Supervisores Modulares
desabilitaes
Supervisores
desabilitaes
eventos
Sistema Produto
eventos
comandos
Sistema Fsico
respostas
Seqncias Operacionais
sadas do S.C.
Sistema de Controle
entradas do S.C.
Sistema Fsico
Figura 2.6 Estrutura de controle
trs
funes
fc j : Q j x cj j ; frj : Q j x uj rj ;
bijetoras
para
cada
mdulo
G j : fd j : cj j ;
alfabeto de negao de
23
As
estruturas
de
implementao
do
nvel
SP
podem
ser
j = ndj rj ; 2
j (q, ) = q
j (q, ) = q
uma
seqncia
elaborao de cada SFC deve ser realizada de forma a garantir a coerncia com o
24
correspondente autmato Gj. Neste sentido, deve haver uma relao direta entre a
linguagem do autmato Gj e as seqencias de comandos e respostas que so
obtidas atravs das possveis seqncias de evoluo do SFC oj correspondente.
Alm disto: i) cada comando estar relacionado a uma, e somente uma, condio de
transio do SFC; ii) cada resposta dever ser ativada com reteno em um, e
somente um, passo do SFC que corresponde ocorrncia do evento no controlvel
representado em Gj; iii) todas as respostas devero ser desativadas no passo
sucessor de cada transio do SFC relacionada a um comando.
Seja a estrutura de controle conforme apresentado na Figura 2.6 -b.
Durante a transio de estado do autmato que representa um determinado mdulo
do sistema produto gerado um evento, se esta transio for associada a uma
negao de desabilitao de evento controlvel tambm ser gerado o comando
correspondente. Conforme representado nesta figura, o evento encaminhado para
o nvel SM, determinando a transio de estado dos autmatos que representam os
supervisores reduzidos. O comando encaminhado para o nvel SO, determinando
a evoluo do SFC utilizado para descrever a correspondente seqncia
operacional.
Em funo do estado ativo de cada autmato Sri a correspondente
funo ri estabelece a desabilitao de um subconjunto de eventos controlveis. A
desabilitao de evento controlvel ativada se for estabelecida por pelo menos um
supervisor (Sri,ri).
A evoluo do SFC utilizado para representar uma dada seqncia
operacional determinada conforme a execuo de atividades ou tarefas no
Sistema Fsico. Ao longo da sua evoluo este SFC atingir um determinado passo
no qual ser gerada uma resposta. Esta resposta ser encaminhada para o nvel SP
permitindo a transio de estado do correspondente mdulo do sistema produto.
De forma a garantir a correta operao da estrutura de controle duas
condies devem ser obedecidas:
i) a evoluo do sistema produto atravs de um evento controlvel
s pode ocorrer se todos os supervisores que podem exercer ao de desabilitao
sobre este evento estiverem atualizados e se nenhum destes supervisores estiver
desabilitando este evento (garante a ao conjunta dos supervisores);
ii) em cada um dos supervisores, s permitida a evoluo de
estado atravs de um nico evento por ciclo de varredura do CLP (garante a correta
25
possvel
que,
simultaneamente,
hajam
diversos
eventos
26
2.7
27
28
2.8
Simulao
29
30
2.9
Hardware-in-the-Loop
31
matemtico
e
l d o
ve a
N etiz
r
nc
Co
Sntese do
Controlador
Modelo
Implementao
do Controlador
Modelo
Modelo
Anlise do
Sistema
32
Neste captulo foi feita uma reviso bibliogrfica sobre os principais aspectos
da Teoria de Controle Supervisrio, tcnicas de simulao de ambientes de
manufatura, a metodologia de Hardware-in-the-Loop e o sobre Ciclo de
Desenvolvimento proposto por Busetti e Portela (2006). Dentre os aspectos
principais da Teoria de Controle Supervisrio, foi enfatizado que na implementao
da Arquitetura de Controle Supervisrio, o uso Supervisores Modulares Locais
mostrou-se como a melhor evoluo para a implementao em um ambiente de
manufatura. Como complemento ao Ciclo de Desenvolvimento, em especfico na
33
34
3.1
Ambiente de implementao
35
36
devido
possibilidade
de
gerar
biblioteca
de
modelos.
37
3.2
Ambiente de Simulao
ambiente
de
simulao
concebido
para
permitir
38
39
40
41
abordagem
apresenta
as
seguintes
vantagens
sob
3.3
Interface
42
43
4 ETAPA DE IMPLEMENTAO
4.1
Fase de simulao
SubSisY
Subsistema Z
SubSisZ
PROCEDIMENTO
Nome
Identificador
Procedimento
OPX
Operacional X
Procedimento
OPY
Operacional Y
Procedimento
OPZ
Operacional Z
44
RESPOSTA
rplX
rplY
rplZ
rplZ
PROCEDIMENTO
OPX
OPY
OPZ
OPZ
45
Simulador
C3
C4
C5
D3
D4
D5
H5
E3
E4
E5
F3
F4
F5
H5
B3
B4
B5
Scada
L3C3
L4C3
L5C3
L3C4
L4C4
L5C4
L5C4
L3C5
L4C5
L5C5
L3C6
L4C6
L5C6
L5C6
L3C2
L4C2
L5C2
46
47
48
49
Nvel de Interface
Ambiente
Dinmico
Sistema Produto
zerar as variveis
real = 0
cmd = 0
ackrd = 0
rpl = 0
ackrpl = 0
verificar se o
simulador liberou
a escrita de
comandos
processar o
comando
verificar se o
comando j foi
gravado
real = 0
cmd =1
ackread = 0
rpl = 0
ackrpl = 0
gravar o comando
aguardar
verificar se o
comando j foi
gravado
real = 0
cmd =1
ackread = 1
rpl = 0
ackrpl = 0
gravar ackread
aguardar
ler o comando e
tratar o comando
real = 0
cmd =1
ackread = 1
rpl = 0
ackrpl = 0
verificar se o
simulador liberou
a escrita de
comandos
aguardar
resetar o ackread
informando que j
leu o comando
real = 0
cmd =1
ackread = 0
rpl = 0
ackrpl = 0
verificar se o
simulador liberou
a escrita de
comandos
aguardar
real = 0
cmd =0
ackread = 0
rpl = 0
ackrpl = 0
resetar comando
processar
comando seguinte
real = 0
cmd =1
ackread = 0
rpl = 0
ackrpl = 0
gravar o comando
aguardar
real = 0
cmd =1
ackread = 1
rpl = 0
ackrpl = 0
gravar ackread
aguardar
iniciar a simulao
verificar se o
comando j foi
gravado
verificar se o
comando j foi
gravado
verificar se o
comando j foi
gravado
50
Troca de respostas
A troca de respostas deve assegurar ao simulador ler as respostas
sempre de forma seqencial e incremental.
Para que isso ocorra e para que a troca de resposta evolua,
determinam-se as seguintes funes de controles, definidas nas figuras 4.12, 4.13 e
4.14.
51
Nvel de Interface
Ambiente
Dinmico
Sistema Produto
ler o valor da
resposta
real = 0
cmd = 0
ackrd = 0
rpl = 0
verificar se o valor
da resposta
aguardar
incrimentar 1 a
resposta
real = 0
cmd = 0
ackread = 0
rpl = 0
verificar se o valor
da resposta
aguardar
Verificar se o valor
da resposta
aguardar
iniciar de envio de
resposta
escrever o novo
valor resposta
real = 0
cmd = 0
ackread = 0
rpl = 1
Aguardar nova
resposta
real = 0
cmd =0
ackread = 1
rpl =1
ler o valor da
resposta
processar reposta
aguardar nova
resposta
real = 0
cmd =0
ackread = 0
rpl = 0
decrementar 1 do
valor da reposta
aguardar
aguardar nova
resposta
real = 0
cmd =0
ackread = 0
rpl = 0
aguardar
aguardar nova
resposta
real = 0
cmd =0
ackread = 0
rpl = 0
verificar se o valor
da resposta
aguardar
52
forma
de
implementao
confere
ao
ambiente
uma
4.2
53
Figura 4.12 Arquivo de controle de comunicao com OP executada ambiente real e virtual
54
destinados ao ambiente real deve ser feito pelo simulador. Dessa forma, todo
comando executado no ambiente real tambm simulado e os dados de
comparao podem ser extrados visualmente e em relatrios.
As
funes
relativas
gravaes
das
respostas
tambm
permanecem inalteradas, j que elas tambm devem ser tratas na simulao para
efeitos de comparao e registro. Porm, a funo de gravao ser alterada a fim
de impedir que as repostas para o procedimento operacional executado no ambiente
simulado sejam passadas para o ambiente dinmico como sendo as repostas
executadas no ambiente real, conforme Figura 4.13.
55
Nvel de Interface
Ambiente
Dinmico
Sistema Produto
zerar as variveis
real = 0
cmd = 0
ackrd = 0
rpl = 0
ackrpl = 0
verificar se o
simulador liberou
a escrita de
comandos
processar o
comando
verificar se o
comando j foi
gravado
real = 0
cmd =1
ackread = 0
rpl = 0
ackrpl = 0
gravar o comando
aguardar
verificar se o
comando j foi
gravado
real = 0
cmd =1
ackread = 1
rpl = 0
ackrpl = 0
gravar ackread
aguardar
ler o comando e
tratar o comando
real = 0
cmd =1
ackread = 1
rpl = 0
ackrpl = 0
verificar se o
simulador liberou
a escrita de
comandos
aguardar
resetar o ackread
informando que j
leu o comando
real = 0
cmd =1
ackread = 0
rpl = 0
ackrpl = 0
verificar se o
simulador liberou
a escrita de
comandos
aguardar
real = 0
cmd =0
ackread = 0
rpl = 0
ackrpl = 0
resetar comando
processar
comando seguinte
real = 0
cmd =1
ackread = 0
rpl = 0
ackrpl = 0
gravar o comando
aguardar
real = 0
cmd =1
ackread = 1
rpl = 0
ackrpl = 0
gravar ackread
aguardar
iniciar a simulao
verificar se o
comando j foi
gravado
verificar se o
comando j foi
gravado
verificar se o
comando j foi
gravado
56
Nvel de Interface
Ambiente
Dinmico
Sistema Produto
ler o valor da
resposta
real = 0
cmd = 0
ackrd = 0
rpl = 0
verificar se o valor
da resposta
aguardar
incrimentar 1 a
resposta
real = 0
cmd = 0
ackread = 0
rpl = 0
verificar se o valor
da resposta
aguardar
Verificar se o valor
da resposta
aguardar
iniciar de envio de
resposta
escrever o novo
valor resposta
real = 0
cmd = 0
ackread = 0
rpl = 1
Aguardar nova
resposta
real = 0
cmd =0
ackread = 1
rpl =1
ler o valor da
resposta
processar reposta
aguardar nova
resposta
real = 0
cmd =0
ackread = 0
rpl = 0
decrementar 1 do
valor da reposta
aguardar
aguardar nova
resposta
real = 0
cmd =0
ackread = 0
rpl = 0
aguardar
aguardar nova
resposta
real = 0
cmd =0
ackread = 0
rpl = 0
verificar se o valor
da resposta
aguardar
57
4.3
Fase de execuo
58
5 EXEMPLO DE APLICAO
5.1
59
sendo essa a abordagem adotada nessa implementao. Com este exemplo podese validar e assegurar a viabilidade de implementao, a modularidade do sistema
fsico e validar a reutilizao das estruturas de controle previamente implementadas.
Os geradores associados s mquinas para esses sistemas so
definidos na Figura 5.2, em que M1 no estado 0 significa mquina em repouso e no
estado 1 significa mquina trabalhando; o mesmo ocorre para M2. Para M3, o
estado 0 significa que o manipulador robtico esta em repouso, o estado 1 significa
que o manipulador est levando a pea do buffer B1 para o buffer B2 e no estado 2
significa que o manipulador est retornando ao estado de repouso.
G3:
G1:
0
1
2
1
G2:
1
2
60
61
5.2
Levantamento
de
informaes
do
ambiente
de
simulao
SubSis2
Subsistema 3
SubSis3
PROCEDIMENTO
Nome
Identificador
Procedimento
OP1
Operacional 1
Procedimento
OP2
Operacional 2
Procedimento
OP3
Operacional 3
62
Resposta
rpl1
rpl2
rpl3
rpl3
Procedimento
OP1
OP2
OP3
OP3
Resposta
ackrpl1
ackrpl2
ackrpl3
ackrpl3
Procedimento
OP1
OP2
OP3
OP3
63
Arena
C3
C4
C5
D3
D4
D5
H5
E3
E4
E5
F3
F4
F5
H5
B3
B4
B5
E3
L3C3
L4C3
L5C3
L3C4
L4C4
L5C4
L5C4
L3C5
L4C5
L5C5
L3C6
L4C6
L5C6
L5C6
L3C2
L4C2
L5C2
64
Windows, o
Windows XP.
5.3
65
Processo 1
OP1
Dispose 1
0
OP2
Dispose 2
Processo 2
0
OP3
Processo 3
Dispose 3
VBA
Process 31
VBA
Process 32
13
VBA
10
66
VBA
Create 1
0
Idle
Rota
Idle_di sp
0
Figura 5.10 Implementao do nvel de interface
67
5.4
Validao da sistemtica
68
Figura 5.11 Interface com o usurio para a aplicao do AD para o exemplo de trs mquinas
69
70
Figura 5.14 Interface com o usurio para a aplicao do AD para o exemplo de trs mquinas,
sendo uma implementada no ambiente real.
71
6 CONCLUSO
72
73
74
REFERNCIAS
ABDIY,
Mohammad
Reza;
LABIBY,
Ashraf
W.
design
strategy
for
Metodologia da pesquisa e a
Marco
Antonio;
SANTOS,
Eduardo
Alves
Portela.
project
75
Anders;
FABIAN,
Martin;
LENNARTSON,
Bengt.
Modular
H.;
INUKAI,
T.;
FUKUDA,
Y.
Efficient
manufacturing
system
76
77
Piracicaba, 1996
PLUMMER, A. R. Model-in-the-Loop testing. Proceedings of IMechE. v. 220. Part I.
J. Systems and Control Engineering, London, 2006.
PROAKIS, John G.; DIMITRIS, G. Manolakis. Digital signal processing:
principles, algorithms, and applications. 2. ed. New York: MacMillan, 1992.
QUEIROZ, M.H. de; Controle Supervisrio Modular de Sistemas de Grande
Porte. Florianpolis. Mestrado (Dissertao em Engenharia Eltrica) Centro
Tecnolgico,Universidade Federal de Santa Catarina. 2000.
QUEIROZ, M. H.;SANTOS, Eduardo A.P.; CURY, J. E. R. Sntese modular do
controle supervisrio em diagrama escada para uma clula de manufatura. V
Simpsio Brasileiro de automao Inteligente, Canela RS, 2001.
QUEIROZ, Max H. de; CURY, Jos E. R. Modular supervisory control of large
scale discrete-event systems. Proceedings of the Sixth International Workshop on
Discrete Event Systems (WODES2000). IEEE Computer Society, 2000.
QUEIROZ, M. H; CURY, J. E. R., 2002. Controle Supervisrio Modular de
Sistemas de Manufatura Revista Controle & Automao, Vol. 13, N 2, Agosto
QUEIROZ, Max H. de; CURY, Jos E. R. Systhesis and implementation of local
modular supervisory control for a manufacturing cell. Proceedings of the Sixth
International Workshop on Discrete Event Systems (WODES02). IEEE Computer
Society, 2002.
RAMADGE, Peter J.G.; WONHAM, W. The control of discrete-event systems.
Proceedins Of THE IEEE, Vol 77, no 1, 1989.
Rockwell Software. Disponvel em www.rockwellautomation.com/rockwellsoftware.
Ultima visualizao em fevereiro de 2008.
78
79
APNDICE
80
81
82
83
84
85
End Sub
86
acrwrite2 = 1
g_outputRow = 4
If disable2 = "0" Then
smutils_WriteExcelValue g_XLOutputFile, "Plan1", "D" & g_outputRow, resposta2
smutils_WriteExcelValue g_XLOutputFile, "Plan1", "F" & g_outputRow, acrwrite2
End If
End Sub
87
88
Const smutils_ErrorsLogToFile = 2
'
================================================================
============================
Public Sub smutils_InitializeExcel(ByVal visible As Boolean, ByVal errorHandling As
Integer)
If smutils_XLInitialized Then Exit Sub
On Error Resume Next
Set smutils_XL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
On Error GoTo InitExcelError
Set smutils_XL = CreateObject("Excel.Application")
End If
Err.Clear
smutils_XLInitialized = True
smutils_XL.visible = True
smutils_XLErrorHandling = errorHandling
If visible Then smutils_XL.visible = True
Exit Sub
' ===== Errors =====
InitExcelError:
smutils_HandleXLError ("Error " & Err & " initializing Excel.")
Exit Sub
End Sub
Public Function smutils_OpenExcelWorkbook(filename As String) As Integer
smutils_OpenExcelWorkbook = -1
On Error GoTo InitializeError
If Not smutils_XLInitialized Then
smutils_InitializeExcel False, smutils_ErrorsDisplayMessage
End If
On Error GoTo OpenError
With smutils_XL
.Workbooks.Open (filename)
smutils_OpenExcelWorkbook = .Workbooks.Count
End With
Exit Function
' ===== Errors =====
89
InitializeError:
smutils_HandleXLError ("Error " & Err & " initializing Excel.")
Exit Function
OpenError:
If Err = 1004 Then
smutils_HandleXLError ("Cannot find file " & filename & ".")
Else
smutils_HandleXLError ("Error " & Err & " opening file " & filename & ".")
End If
Exit Function
End Function
Public Function smutils_NewExcelWorkbook() As Integer
smutils_NewExcelWorkbook = -1
On Error GoTo InitializeError
If Not smutils_XLInitialized Then
smutils_InitializeExcel False, smutils_ErrorsDisplayMessage
End If
On Error GoTo AddError
With smutils_XL
.Workbooks.Add
smutils_NewExcelWorkbook = .Workbooks.Count
End With
Exit Function
' ===== Errors =====
InitializeError:
smutils_HandleXLError ("Error " & Err & " initializing Excel.")
Exit Function
AddError:
smutils_HandleXLError ("Error " & Err & " adding a workbook.")
Exit Function
End Function
Public Sub smutils_SaveExcelWorkbook(ByVal fileHandle As Integer, ByVal filename
As String)
If Not smutils_XLInitialized Then GoTo ExcelNotInitializedError
On Error Resume Next
With smutils_XL
If fileHandle < 1 Or fileHandle > .Workbooks.Count Then
smutils_HandleXLError ("Error: Trying to save workbook with invalid file
handle.")
Exit Sub
End If
90
.Workbooks(fileHandle).SaveAs filename
.Workbooks(fileHandle).Close saveChanges:=False
End With
Exit Sub
' ===== Errors =====
ExcelNotInitializedError:
MsgBox "Error writing to Excel file. Excel first must be initialized" & Chr(13) & _
"and a workbook must be opened. Use NewExcelWorkbook or
OpenExcelWorkbook."
Exit Sub
End Sub
Public Function smutils_ReadExcelValue(ByVal fileHandle As Integer, ByVal
sheetName As String, ByVal dataRange As String) As Variant
On Error GoTo ReadError
If Not smutils_XLInitialized Then GoTo ExcelNotInitializedError
With smutils_XL
If fileHandle < 1 Or fileHandle > .Workbooks.Count Then
smutils_HandleXLError ("Error: Trying to read from unopened spreadsheet.")
Exit Function
End If
smutils_ReadExcelValue =
.Workbooks(fileHandle).Worksheets(sheetName).range(dataRange).value
End With
Exit Function
' ===== Errors =====
ExcelNotInitializedError:
MsgBox "Error reading from Excel file. Excel first must be initialized" & Chr(13) & _
"and a workbook must be opened. Use NewExcelWorkbook or
OpenExcelWorkbook."
Exit Function
ReadError:
smutils_HandleXLError ("Error " & Err & " reading from file " &
smutils_XL.Workbooks(fileHandle).Name & ".")
Exit Function
End Function
Public Function smutils_ReadExcelRange(ByVal fileHandle As Integer, ByVal
sheetName As String, ByVal rangeName As String) As Excel.range
On Error GoTo ReadError
If Not smutils_XLInitialized Then GoTo ExcelNotInitializedError
With smutils_XL
91
92
WriteError:
smutils_HandleXLError ("Error " & Err & " writing to file " &
smutils_XL.Workbooks(fileHandle).Name & ".")
Exit Sub
End Sub
Private Sub smutils_HandleXLError(ByVal errorString As String)
If smutils_XLErrorHandling = smutils_ErrorsIgnore Then Exit Sub
Static errorFile As String, errorFileOpened As Boolean
Select Case smutils_XLErrorHandling
Case smutils_ErrorsDisplayMessage
MsgBox errorString
Exit Sub
End Select
End Sub