SlimLine Biblioteca de framboesa eCDSSystem8Core

Depois de fazer nosso primeiro projeto no CODESYS (Veja o artigo) podemos usar a biblioteca eCDSS8CoreMng. Esta biblioteca contém todos os objetos de função e FBs para gerenciar os módulos de extensão do SlimLine, download de biblioteca, o programa SimpleStartUp descrito neste artigo pode ser encontrado no PTP161 (Baixar).

Instalação de biblioteca

Para usar a biblioteca, instale-a no repositório de bibliotecas do seu PC. Baixe a biblioteca do menu Gestore libreria selecionar Repository librerie e escolha Installa será possível navegar no disco e procurar o arquivo da biblioteca que será transferido para o "C:\ProgramData\CODESYS\Managed Libraries\Elsist Srl\".

Uso da biblioteca

Crie um novo projeto como indicado em Neste artigo, adicione a biblioteca ao projeto.

Gerenciamento I2C de módulos de expansão

O módulo da CPU gerencia os módulos de extensão com uma conexão em I2C, portanto, o driver de gerenciamento deve ser instalado. Com o botão direito do mouse no dispositivo I2C escolha o item Aggiungi dispositivoe selecione o dispositivo I2C master. O valor a ser definido no dispositivo é /dev/i2c-4.

O dispositivo será adicionado à árvore do projeto e, como pode ser visto na foto, a variável será criada I2C_master de tipo i2cMaster. O nome da variável é importante porque será comunicado ao FB de gerenciamento do sistema.

Exemplos

Como usar os exemplos.

Todos os objetos (Funções e FB) úteis para acessar os vários módulos estão disponíveis na biblioteca, consulte a documentação da biblioteca para obter uma lista. Agora você pode escrever o programa, dentro de "PLC_PRG" temos que instanciar e executar o bloco funcional SysCoreManager (Gerente do sistema) para o qual devemos passar o endereço do gerenciador de barramento I2C. Ao ativar o FB, o sinal de pronto é ativado no barramento de extensão e o circuito do cão de guarda de hardware e todos os módulos conectados ao barramento de extensão são inicializados.

LogicLab (Ptp161)
PROGRAM PLC_PRG
VAR
  DInp: ARRAY[ 0..2 ] OF DWORD; //Digital input value
  DOut: ARRAY[ 0..2 ] OF DWORD; //Digital output value
  LpTime: ARRAY[ 0..1 ] OF UDINT; //Loop time (uS)
  TimeBf: ARRAY[ 0..3 ] OF UDINT; //Time buffer (uS)
  S8Core: eS8Core.SysCoreManager; //System 8 core manager
  AnInp: ARRAY[ 0..1 ] OF eS8Core.SysGetAnInp; //Analog input acquisition
  AnOut:  ARRAY[ 0..1 ] OF eS8Core.SysSetAnOut; //Analog output management
END_VAR

// -------------------------------------------------------------------------
// EXECUTION TIME CALCULATION AUSILIARES
// -------------------------------------------------------------------------
// Here the reference time is saved.

LpTime[0]:=eS8Core.SysGetSysTime(TRUE); //Loop time (uS)

// -------------------------------------------------------------------------
// SYSTEM 8 CORE MANAGEMENT
// -------------------------------------------------------------------------
// PConsole defines TCP port to which it's possible to connect by telnet
// HWDogTm defines watch dog refresh time.
// pI2CManager defines the I2C driver used to manage the extension bus.

S8Core(Enable:=TRUE, PConsole:=10000, HWDogTm:=0, pI2CManager:=ADR(I2C_master));
IF NOT(S8Core.Ready) THEN RETURN; END_IF;

// Put here some initializations if needed.

// IF (S8Core.Init) THEN END_IF;

// -------------------------------------------------------------------------
// DIGITAL I/O MODULES MANAGEMENT
// -------------------------------------------------------------------------
// Here are managed all the digital I/O modules. The function reads digital
// inputs and writes digital outputs.

SysDIOModule(0, ADR(DInp[0]), ADR(DOut[0])); //Modulo "0"

// -------------------------------------------------------------------------
// BLINK OUTPUTS
// -------------------------------------------------------------------------
// Here outputs 0 and 1 of module 0 are blinking.

IF ((eS8Core.SysGetSysTime(TRUE)-TimeBf[0]) > 100000) THEN
  TimeBf[0]:=eS8Core.SysGetSysTime(TRUE); DOut[0].0:=NOT(DOut[0].0);
END_IF;

IF ((eS8Core.SysGetSysTime(TRUE)-TimeBf[1]) > 200000) THEN
  TimeBf[1]:=eS8Core.SysGetSysTime(TRUE); DOut[0].1:=NOT(DOut[0].1);
END_IF;

// -------------------------------------------------------------------------
// ANALOG I/O MODULES MANAGEMENT
// -------------------------------------------------------------------------
// Here are managed some analog I/Os on the module 0.

AnOut[0](Address:=0, Channel:=0, Mode:=AO_MODE.DA_VOLT_0_10);
AnInp[0](Address:=0, Channel:=0, Mode:=AI_MODE.AD_VOLT_0_10_COMMON);
 
AnOut[1](Address:=0, Channel:=1, Mode:=AO_MODE.DA_VOLT_0_10);
AnInp[1](Address:=0, Channel:=1, Mode:=AI_MODE.AD_VOLT_0_10_COMMON);

// Every 5 Secs a random voltage (Range 0.0 to 10.0) is set on outputs.

IF ((eS8Core.SysGetSysTime(TRUE)-TimeBf[3]) > 5000000) THEN
  TimeBf[3]:=eS8Core.SysGetSysTime(TRUE); //Time buffer (uS)
  AnOut[0].Value:=SysGetRandom(TRUE)*10.0; //Analog output value (Volt)
  AnOut[1].Value:=SysGetRandom(TRUE)*10.0; //Analog output value (Volt)
END_IF;

// -------------------------------------------------------------------------
// CALCULATES THE EXECUTION TIME
// -------------------------------------------------------------------------
// Here is calculated the time needed to execute the program. The value in
// uS is stored in LpTime[1] variable.

LpTime[1]:=eS8Core.SysGetSysTime(TRUE)-LpTime[0]; //Loop time (uS)

// [End of file]
Esse artigo foi útil?