Commit f3924217 authored by Claes Sjofors's avatar Claes Sjofors

PSS9000 card MIO3102 added

parent ae30438d
/*
* Proview $Id$
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with the program, if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* rt_io_m_ssab_mioup.c -- io methods for ssab cards. */
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include "pwr.h"
#include "co_time.h"
#include "co_cdh.h"
#include "rt_gdh.h"
#include "rt_errh.h"
#include "pwr_baseclasses.h"
#include "pwr_basecomponentclasses.h"
#include "pwr_ssaboxclasses.h"
#include "rt_io_base.h"
#include "rt_io_msg.h"
#include "rt_io_ssab.h"
#include "rt_io_card_init.h"
#include "rt_io_card_close.h"
#include "rt_io_card_read.h"
#include "qbus_io.h"
#include "rt_io_m_ssab_locals.h"
#include "rt_io_bfbeth.h"
/*----------------------------------------------------------------------------*\
\*----------------------------------------------------------------------------*/
#define IO_MAXCHAN 32
#define ADDR_DO_OFFSET 1
#define ADDR_AI_OFFSET 3
#define ADDR_AO_OFFSET 19
typedef struct {
unsigned int Address;
int Qbus_fp;
int ScanCount[IO_MAXCHAN];
unsigned int bfb_item;
pwr_tFloat32 OldValue[IO_MAXCHAN];
pwr_tBoolean OldTestOn[IO_MAXCHAN];
int WriteFirst;
pwr_tTime ErrTime;
} io_sLocal;
static pwr_tStatus AoRangeToCoef(
io_sChannel *chanp)
{
pwr_sClass_ChanAo *cop;
char buf[120];
pwr_tStatus sts;
pwr_tFloat32 PolyCoef1;
pwr_tFloat32 PolyCoef0;
cop = chanp->cop;
if ( cop)
{
cop->CalculateNewCoef = 0;
/* Coef for ActualValue to RawValue conversion */
if ( cop->ActValRangeHigh != cop->ActValRangeLow)
{
cop->SigValPolyCoef1 = (cop->SensorSigValRangeHigh - cop->SensorSigValRangeLow)/
(cop->ActValRangeHigh - cop->ActValRangeLow);
cop->SigValPolyCoef0 = cop->SensorSigValRangeHigh - cop->ActValRangeHigh *
cop->SigValPolyCoef1;
}
else
{
sts = gdh_AttrrefToName( &chanp->ChanAref, buf, sizeof(buf),
cdh_mName_volumeStrict);
if ( EVEN(sts)) return sts;
errh_Error( "Invalid ActValueRange in Ao channel %s", buf);
return IO__CHANRANGE;
}
/* Coef for ActualValue to SignalValue conversion */
if ( cop->ChannelSigValRangeHigh != 0)
{
PolyCoef0 = 0;
PolyCoef1 = cop->RawValRangeHigh / cop->ChannelSigValRangeHigh;
cop->OutPolyCoef1 = cop->SigValPolyCoef1 * PolyCoef1;
cop->OutPolyCoef0 = PolyCoef0 + PolyCoef1*
cop->SigValPolyCoef0;
}
else
{
sts = gdh_AttrrefToName( &chanp->ChanAref, buf, sizeof(buf),
cdh_mName_volumeStrict);
if ( EVEN(sts)) return sts;
errh_Error( "Invalid SigValueRange in Ao channel %s", buf);
return IO__CHANRANGE;
}
}
return IO__SUCCESS;
}
static pwr_tStatus AiRangeToCoef(
io_sChannel *chanp)
{
pwr_sClass_ChanAi *cop;
char buf[120];
pwr_tStatus sts;
pwr_tFloat32 PolyCoef1;
pwr_tFloat32 PolyCoef0;
cop = chanp->cop;
if ( cop)
{
cop->CalculateNewCoef = 0;
/* Coef for RawValue to SignalValue conversion */
cop->SigValPolyCoef0 = 0;
cop->SigValPolyCoef1 = cop->ChannelSigValRangeHigh / 30000;
/* Coef for SignalValue to ActualValue conversion */
if ( chanp->ChanClass != pwr_cClass_ChanAit && cop->SensorPolyType == 1)
{
if ( cop->SensorSigValRangeHigh != cop->SensorSigValRangeLow)
{
PolyCoef1 = (cop->ActValRangeHigh - cop->ActValRangeLow)/
(cop->SensorSigValRangeHigh - cop->SensorSigValRangeLow);
PolyCoef0 = cop->ActValRangeHigh - cop->SensorSigValRangeHigh *
PolyCoef1;
cop->SensorPolyCoef1 = cop->SigValPolyCoef1 * PolyCoef1;
cop->SensorPolyCoef0 = PolyCoef0 + PolyCoef1*
cop->SigValPolyCoef0;
}
else
{
sts = gdh_AttrrefToName( &chanp->ChanAref, buf, sizeof(buf),
cdh_mName_volumeStrict);
if ( EVEN(sts)) return sts;
errh_Error( "Invalid SigValueRange in Ai channel %s", buf);
return IO__CHANRANGE;
}
}
}
return IO__SUCCESS;
}
static pwr_tStatus IoCardInit (
io_tCtx ctx,
io_sAgent *ap,
io_sRack *rp,
io_sCard *cp
)
{
pwr_sClass_Ssab_BaseMCard *op;
io_sLocal *local;
int i;
io_sChannel *chanp;
op = (pwr_sClass_Ssab_BaseMCard *) cp->op;
local = calloc( 1, sizeof(*local));
cp->Local = local;
local->Address = op->RegAddress;
local->Qbus_fp = ((io_sRackLocal *)(rp->Local))->Qbus_fp;
errh_Info( "Init of Multi IO card '%s'", cp->Name);
/* Write the first 50 loops */
local->WriteFirst = 50;
/* Calculate polycoeff for Ai */
chanp = cp->chanlist;
for ( i = 0; i < op->MaxNoOfAiChannels; i++)
{
if ( chanp->sop)
AiRangeToCoef( chanp);
chanp++;
}
/* Caluclate polycoeff for Ao */
chanp = cp->chanlist + op->MaxNoOfAiChannels;
for ( i = 0; i < op->MaxNoOfAoChannels; i++)
{
if ( chanp->sop)
AoRangeToCoef( chanp);
chanp++;
}
return 1;
}
/*----------------------------------------------------------------------------*\
\*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardClose (
io_tCtx ctx,
io_sAgent *ap,
io_sRack *rp,
io_sCard *cp
)
{
io_sLocal *local;
errh_Info( "IO closing ai card '%s'", cp->Name);
local = (io_sLocal *) cp->Local;
free( (char *) local);
return 1;
}
/*----------------------------------------------------------------------------*\
\*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardRead (
io_tCtx ctx,
io_sAgent *ap,
io_sRack *rp,
io_sCard *cp
)
{
io_sLocal *local;
io_sRackLocal *r_local = (io_sRackLocal *)(rp->Local);
pwr_tInt16 data = 0;
pwr_sClass_Ssab_BaseMCard *op;
pwr_sClass_Ssab_RemoteRack *rrp;
int i;
pwr_tFloat32 actvalue;
io_sChannel *chanp;
pwr_sClass_ChanAi *cop;
pwr_sClass_Ai *sop;
int sts;
qbus_io_read rb;
int bfb_error = 0;
pwr_tTime now;
local = (io_sLocal *) cp->Local;
op = (pwr_sClass_Ssab_BaseMCard *) cp->op;
chanp = &cp->chanlist[0];
for ( i = 0; i < op->MaxNoOfAiChannels; i++)
{
if ( !chanp->cop || !chanp->sop)
{
chanp++;
continue;
}
cop = (pwr_sClass_ChanAi *) chanp->cop;
sop = (pwr_sClass_Ai *) chanp->sop;
if ( cop->CalculateNewCoef)
AiRangeToCoef( chanp);
if ( cop->ConversionOn)
{
if ( local->ScanCount[i] <= 1)
{
if (r_local->Qbus_fp != 0 && r_local->s == 0) {
rb.Address = local->Address + 2*i + ADDR_AI_OFFSET;
sts = read( local->Qbus_fp, &rb, sizeof(rb));
data = (unsigned short) rb.Data;
}
else {
/* Ethernet I/O, Get data from current address */
data = bfbeth_get_data(r_local, (pwr_tUInt16) (local->Address + 2*i + ADDR_AI_OFFSET), &sts);
/* Yes, we want to read this address the next time aswell */
bfbeth_set_read_req(r_local, (pwr_tUInt16) (local->Address + 2*i + ADDR_AI_OFFSET));
if (sts == -1) {
/* Error handling for ethernet Qbus-I/O */
rrp = (pwr_sClass_Ssab_RemoteRack *) rp->op;
if (bfb_error == 0) {
op->ErrorCount++;
bfb_error = 1;
if ( op->ErrorCount == op->ErrorSoftLimit)
errh_Error( "IO Error soft limit reached on card '%s'", cp->Name);
if ( op->ErrorCount == op->ErrorHardLimit)
errh_Error( "IO Error hard limit reached on card '%s', stall action %d", cp->Name, rrp->StallAction);
if ( op->ErrorCount >= op->ErrorHardLimit && rrp->StallAction == pwr_eSsabStallAction_ResetInputs )
{
data = 0;
sts = 1;
}
if ( op->ErrorCount >= op->ErrorHardLimit && rrp->StallAction == pwr_eSsabStallAction_EmergencyBreak )
{
ctx->Node->EmergBreakTrue = 1;
return IO__ERRDEVICE;
}
}
if (sts == -1) {
chanp++;
continue;
}
}
else {
op->ErrorCount = 0;
}
}
if ( sts == -1)
/* Error handling for local Qbus-I/O */
{
/* Increase error count and check error limits */
time_GetTime( &now);
if (op->ErrorCount > op->ErrorSoftLimit) {
/* Ignore if some time has expired */
if (now.tv_sec - local->ErrTime.tv_sec < 600)
op->ErrorCount++;
}
else
op->ErrorCount++;
local->ErrTime = now;
if ( op->ErrorCount == op->ErrorSoftLimit)
errh_Error( "IO Error soft limit reached on card '%s'", cp->Name);
if ( op->ErrorCount >= op->ErrorHardLimit)
{
errh_Error( "IO Error hard limit reached on card '%s', IO stopped", cp->Name);
ctx->Node->EmergBreakTrue = 1;
return IO__ERRDEVICE;
}
chanp++;
continue;
}
/* Convert rawvalue to sigvalue and actualvalue */
sop->RawValue = data;
sop->SigValue = data * cop->SigValPolyCoef1 + cop->SigValPolyCoef0;
switch ( chanp->ChanClass)
{
case pwr_cClass_ChanAi:
io_ConvertAi( cop, data, &actvalue);
break;
case pwr_cClass_ChanAit:
io_ConvertAit( (pwr_sClass_ChanAit *) cop, data, &actvalue);
break;
}
/* Filter */
if ( sop->FilterType == 1 &&
sop->FilterAttribute[0] > 0 &&
sop->FilterAttribute[0] > ctx->ScanTime)
{
actvalue = *(pwr_tFloat32 *)chanp->vbp +
ctx->ScanTime / sop->FilterAttribute[0] *
(actvalue - *(pwr_tFloat32 *)chanp->vbp);
}
*(pwr_tFloat32 *) chanp->vbp = actvalue;
local->ScanCount[i] = cop->ScanInterval + 1;
}
local->ScanCount[i]--;
}
chanp++;
}
return 1;
}
static pwr_tStatus IoCardWrite (
io_tCtx ctx,
io_sAgent *ap,
io_sRack *rp,
io_sCard *cp
)
{
io_sLocal *local;
io_sRackLocal *r_local = (io_sRackLocal *)(rp->Local);
pwr_sClass_Ssab_BaseMCard *op;
int i;
io_sChannel *chanp;
pwr_sClass_ChanAo *cop;
pwr_sClass_Ao *sop;
pwr_tFloat32 value;
int fixout;
pwr_tUInt16 data = 0;
pwr_tFloat32 rawvalue;
qbus_io_write wb;
int sts;
pwr_tTime now;
pwr_tUInt16 invmask;
pwr_tUInt16 testmask;
pwr_tUInt16 testvalue;
local = (io_sLocal *) cp->Local;
op = (pwr_sClass_Ssab_BaseMCard *) cp->op;
fixout = ctx->Node->EmergBreakTrue && ctx->Node->EmergBreakSelect == FIXOUT;
chanp = &cp->chanlist[op->MaxNoOfAiChannels];
for ( i = 0; i < op->MaxNoOfAoChannels; i++)
{
if ( !chanp->cop || !chanp->sop)
{
chanp++;
continue;
}
cop = (pwr_sClass_ChanAo *) chanp->cop;
sop = (pwr_sClass_Ao *) chanp->sop;
if ( *(pwr_tFloat32 *)chanp->vbp != local->OldValue[i] ||
local->WriteFirst > 0 ||
cop->CalculateNewCoef ||
fixout ||
cop->TestOn || local->OldTestOn[i] != cop->TestOn)
{
if ( fixout)
value = cop->FixedOutValue;
else if ( cop->TestOn)
value = cop->TestValue;
else
value = *(pwr_tFloat32 *) chanp->vbp;
if ( cop->CalculateNewCoef)
AoRangeToCoef( chanp);
/* Convert to rawvalue */
if ( value > cop->ActValRangeHigh)
value = cop->ActValRangeHigh;
else if ( value < cop->ActValRangeLow)
value = cop->ActValRangeLow;
rawvalue = cop->OutPolyCoef1 * value + cop->OutPolyCoef0;
if ( rawvalue > 0)
sop->RawValue = rawvalue + 0.5;
else
sop->RawValue = rawvalue - 0.5;
data = sop->RawValue;
if (r_local->Qbus_fp != 0 && r_local->s == 0) {
wb.Data = data;
wb.Address = local->Address + 2*i + ADDR_AO_OFFSET;
sts = write( local->Qbus_fp, &wb, sizeof(wb));
}
else {
/* Ethernet I/O, Request a write to current address */
bfbeth_set_write_req(r_local, (pwr_tUInt16) (local->Address + 2*i + ADDR_AO_OFFSET), data);
sts = 1;
}
if ( sts == -1)
{
/* Exceptionhandler was called */
/* Increase error count and check error limits */
time_GetTime( &now);
if (op->ErrorCount > op->ErrorSoftLimit) {
/* Ignore if some time has expired */
if (now.tv_sec - local->ErrTime.tv_sec < 600)
op->ErrorCount++;
}
else
op->ErrorCount++;
local->ErrTime = now;
if ( op->ErrorCount == op->ErrorSoftLimit)
errh_Error( "IO Error soft limit reached on card '%s'", cp->Name);
if ( op->ErrorCount >= op->ErrorHardLimit)
{
errh_Error( "IO Error hard limit reached on card '%s', IO stopped", cp->Name);
ctx->Node->EmergBreakTrue = 1;
return IO__ERRDEVICE;
}
chanp++;
continue;
}
else
local->OldValue[i] = value;
}
local->OldTestOn[i] = cop->TestOn;
chanp++;
}
if ( local->WriteFirst)
local->WriteFirst--;
if ( ctx->Node->EmergBreakTrue && ctx->Node->EmergBreakSelect == FIXOUT)
data = op->DoFixedOutValue;
else
io_DoPackWord( cp, &data, i);
testmask = op->DoTestMask;
invmask = op->DoInvMask;
/* Invert */
data = data ^ invmask;
/* Testvalues */
if ( testmask) {
testvalue = op->DoTestValue;
data = (data & ~ testmask) | (testmask & testvalue);
}
if (r_local->Qbus_fp != 0 && r_local->s == 0) {
/* Write to local Q-bus */
wb.Data = data;
wb.Address = local->Address + ADDR_DO_OFFSET;
sts = write( local->Qbus_fp, &wb, sizeof(wb));
}
else {
/* Ethernet I/O, Request a write to current address */
bfbeth_set_write_req(r_local, (pwr_tUInt16) local->Address + ADDR_DO_OFFSET, data);
sts = 1;
}
if ( sts == -1) {
/* Increase error count and check error limits */
time_GetTime( &now);
if (op->ErrorCount > op->ErrorSoftLimit) {
/* Ignore if some time has expired */
if (now.tv_sec - local->ErrTime.tv_sec < 600)
op->ErrorCount++;
}
else
op->ErrorCount++;
local->ErrTime = now;
if ( op->ErrorCount == op->ErrorSoftLimit)
errh_Error( "IO Error soft limit reached on card '%s'", cp->Name);
if ( op->ErrorCount >= op->ErrorHardLimit) {
errh_Error( "IO Error hard limit reached on card '%s', IO stopped", cp->Name);
ctx->Node->EmergBreakTrue = 1;
return IO__ERRDEVICE;
}
}
return 1;
}
/*----------------------------------------------------------------------------*\
Every method to be exported to the workbench should be registred here.
\*----------------------------------------------------------------------------*/
pwr_dExport pwr_BindIoMethods(Ssab_MIOuP) = {
pwr_BindIoMethod(IoCardInit),
pwr_BindIoMethod(IoCardClose),
pwr_BindIoMethod(IoCardRead),
pwr_BindIoMethod(IoCardWrite),
pwr_NullMethod
};
......@@ -6,6 +6,7 @@ Ssab_Do
Ssab_Co
Ssab_RemoteRack
Ssab_PIDuP
Ssab_MIOuP
Di_DIX2
Do_HVDO32
Ao_HVAO4
......
Volume SsabOx $ClassVolume 0.0.250.5
Body SysBody 01-JAN-1970 01:00:00.00
Attr NextOix = "_X167"
Attr NextCix = "_X31"
Attr NextOix = "_X175"
Attr NextCix = "_X33"
Attr NextTix[0] = "_X5"
EndBody
Object Type $TypeHier 138 30-DEC-2005 14:28:03.99
......@@ -872,6 +872,165 @@ Volume SsabOx $ClassVolume 0.0.250.5
EndObject
EndObject
EndObject
Object Ssab_BaseMCard $ClassDef 31 30-JUN-2010 10:14:51.29
Body SysBody 30-JUN-2010 10:14:40.65
Attr Editor = 0
Attr Method = 5
Attr Flags = 16464
EndBody
Object RtBody $ObjBodyDef 1 30-JUN-2010 10:16:54.04
Body SysBody 30-JUN-2010 11:30:53.26
Attr StructName = "Ssab_BaseMCard"
Attr NextAix = "_X23"
EndBody
Object Description $Attribute 1 30-JUN-2010 10:14:40.65
Body SysBody 30-JUN-2010 10:14:40.65
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object DevName $Attribute 2 30-JUN-2010 10:14:40.65
Body SysBody 30-JUN-2010 10:14:40.65
Attr PgmName = "DevName"
Attr TypeRef = "pwrs:Type-$String40"
EndBody
EndObject
Object ErrorCount $Attribute 3 30-JUN-2010 10:14:40.65
Body SysBody 30-JUN-2010 10:14:40.65
Attr PgmName = "ErrorCount"
Attr Flags = 1040
Attr TypeRef = "pwrs:Type-$UInt32"
EndBody
EndObject
Object ErrorSoftLimit $Attribute 4 30-JUN-2010 10:14:40.65
Body SysBody 30-JUN-2010 10:14:40.65
Attr PgmName = "ErrorSoftLimit"
Attr TypeRef = "pwrs:Type-$UInt32"
EndBody
EndObject
Object ErrorHardLimit $Attribute 5 30-JUN-2010 10:14:40.65
Body SysBody 30-JUN-2010 10:14:40.65
Attr PgmName = "ErrorHardLimit"
Attr TypeRef = "pwrs:Type-$UInt32"
EndBody
EndObject
Object MaxNoOfAiChannels $Attribute 6 30-JUN-2010 10:29:28.54
Body SysBody 30-JUN-2010 10:29:31.57
Attr PgmName = "MaxNoOfAiChannels"
Attr Flags = 1056
Attr TypeRef = "pwrs:Type-$UInt16"
EndBody
EndObject
Object MaxNoOfAoChannels $Attribute 20 30-JUN-2010 10:29:39.19
Body SysBody 30-JUN-2010 10:29:40.54
Attr PgmName = "MaxNoOfAoChannels"
Attr Flags = 1056
Attr TypeRef = "pwrs:Type-$UInt16"
EndBody
EndObject
Object MaxNoOfDiChannels $Attribute 21 30-JUN-2010 10:29:50.06
Body SysBody 30-JUN-2010 10:29:51.16
Attr PgmName = "MaxNoOfDiChannels"
Attr Flags = 1056
Attr TypeRef = "pwrs:Type-$UInt16"
EndBody
EndObject
Object MaxNoOfDoChannels $Attribute 22 30-JUN-2010 10:29:58.07
Body SysBody 30-JUN-2010 10:29:59.38
Attr PgmName = "MaxNoOfDoChannels"
Attr Flags = 1056
Attr TypeRef = "pwrs:Type-$UInt16"
EndBody
EndObject
Object RegAddress $Attribute 7 30-JUN-2010 10:14:40.65
Body SysBody 30-JUN-2010 10:14:40.65
Attr PgmName = "RegAddress"
Attr TypeRef = "pwrs:Type-$UInt32"
EndBody
EndObject
Object VectAddress $Attribute 8 30-JUN-2010 10:14:40.65
Body SysBody 30-JUN-2010 10:14:40.65
Attr PgmName = "VectAddress"
Attr TypeRef = "pwrs:Type-$UInt32"
EndBody
EndObject
Object Process $Attribute 9 30-JUN-2010 10:14:40.65
Body SysBody 30-JUN-2010 10:14:40.65
Attr PgmName = "Process"
Attr TypeRef = "pwrb:Type-IoProcessMask"
EndBody
EndObject
Object ThreadObject $Intern 10 30-JUN-2010 10:14:40.65
Body SysBody 30-JUN-2010 10:14:40.65
Attr PgmName = "ThreadObject"
Attr TypeRef = "pwrs:Type-$Objid"
EndBody
EndObject
Object DataSheet $Attribute 11 30-JUN-2010 10:14:40.65
Body SysBody 30-JUN-2010 10:14:40.65
Attr PgmName = "DataSheet"
Attr TypeRef = "pwrs:Type-$URL"
EndBody
EndObject
Object DiConvMask $Attribute 12 30-JUN-2010 10:16:42.55
Body SysBody 30-JUN-2010 10:16:44.56
Attr PgmName = "DiConvMask"
Attr TypeRef = "pwrb:Type-CardMask1_1"
EndBody
EndObject
Object DiInvMask $Attribute 14 30-JUN-2010 10:17:01.95
Body SysBody 30-JUN-2010 10:17:03.99
Attr PgmName = "DiInvMask"
Attr TypeRef = "pwrb:Type-CardMask1_1"
EndBody
EndObject
Object DoInvMask $Attribute 16 30-JUN-2010 10:17:37.44
Body SysBody 30-JUN-2010 10:17:39.70
Attr PgmName = "DoInvMask"
Attr TypeRef = "pwrb:Type-CardMask1_1"
EndBody
EndObject
Object DoTestMask $Attribute 17 30-JUN-2010 10:17:47.62
Body SysBody 30-JUN-2010 10:17:49.04
Attr PgmName = "DoTestMask"
Attr Flags = 16
Attr TypeRef = "pwrb:Type-CardMask1_1"
EndBody
EndObject
Object DoTestValue $Attribute 18 30-JUN-2010 10:17:54.65
Body SysBody 30-JUN-2010 10:17:56.27
Attr PgmName = "DoTestValue"
Attr Flags = 16
Attr TypeRef = "pwrb:Type-CardMask1_1"
EndBody
EndObject
Object DoFixedOutValue $Attribute 19 30-JUN-2010 10:18:02.74
Body SysBody 30-JUN-2010 10:18:04.05
Attr PgmName = "DoFixedOutValue"
Attr TypeRef = "pwrb:Type-CardMask1_1"
EndBody
EndObject
EndObject
Object ConfiguratorPoson $Menu 168 30-JUN-2010 10:14:40.65
Object Pointed $Menu 169 30-JUN-2010 10:14:40.65
Object Connect $MenuButton 170 30-JUN-2010 10:14:40.65
Body SysBody 30-JUN-2010 10:14:40.65
Attr ButtonName = "Connect PlcThread"
Attr MethodName = "$Objid-Connect"
Attr MethodArguments[0] = "ThreadObject"
Attr MethodArguments[1] = "PlcThread"
Attr FilterName = "$Objid-IsOkConnect"
Attr FilterArguments[0] = "ThreadObject"
Attr FilterArguments[1] = "PlcThread"
EndBody
EndObject
EndObject
EndObject
Object Template Ssab_BaseMCard 2155839488 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO,IO_PSS9000
......@@ -4436,6 +4595,150 @@ Volume SsabOx $ClassVolume 0.0.250.5
EndBody
EndObject
EndObject
Object Ssab_MIO3102uP $ClassDef 32 30-JUN-2010 10:20:02.49
Body SysBody 30-JUN-2010 10:20:39.09
Attr Editor = 0
Attr Method = 0
Attr Flags = 18448
EndBody
Object RtBody $ObjBodyDef 1 30-JUN-2010 10:21:31.55
Body SysBody 30-JUN-2010 10:21:31.55
Attr StructName = "Ssab_MIO3102uP"
Attr NextAix = "_X8"
EndBody
Object Super $Attribute 1 30-JUN-2010 10:21:42.76
Body SysBody 30-JUN-2010 10:22:11.99
Attr PgmName = "Super"
Attr Flags = 393216
Attr TypeRef = "SsabOx:Class-Ssab_BaseMCard"
EndBody
EndObject
Object ChAi01 $Attribute 2 30-JUN-2010 10:23:13.69
Body SysBody 30-JUN-2010 10:24:18.70
Attr PgmName = "ChAi01"
Attr Flags = 131072
Attr TypeRef = "pwrb:Class-ChanAi"
EndBody
EndObject
Object ChAi02 $Attribute 3 30-JUN-2010 10:24:22.32
Body SysBody 30-JUN-2010 10:24:22.27
Attr PgmName = "ChAi02"
Attr Flags = 131072
Attr TypeRef = "pwrb:Class-ChanAi"
EndBody
EndObject
Object ChAi03 $Attribute 4 30-JUN-2010 10:24:23.96
Body SysBody 30-JUN-2010 10:24:23.91
Attr PgmName = "ChAi03"
Attr Flags = 131072
Attr TypeRef = "pwrb:Class-ChanAi"
EndBody
EndObject
Object ChAo01 $Attribute 5 30-JUN-2010 10:24:45.78
Body SysBody 30-JUN-2010 10:24:51.40
Attr PgmName = "ChAo01"
Attr Flags = 131072
Attr TypeRef = "pwrb:Class-ChanAo"
EndBody
EndObject
Object ChDo01 $Attribute 6 30-JUN-2010 10:25:09.41
Body SysBody 30-JUN-2010 10:25:16.61
Attr PgmName = "ChDo01"
Attr Flags = 131072
Attr TypeRef = "pwrb:Class-ChanDo"
EndBody
EndObject
Object ChDo02 $Attribute 7 30-JUN-2010 10:25:18.65
Body SysBody 30-JUN-2010 10:25:18.59
Attr PgmName = "ChDo02"
Attr Flags = 131072
Attr TypeRef = "pwrb:Class-ChanDo"
EndBody
EndObject
EndObject
Object IoMethods $RtMethod 171 30-JUN-2010 10:26:01.18
Object IoCardInit $Method 172 30-JUN-2010 10:26:01.18
Body SysBody 30-JUN-2010 10:26:55.42
Attr MethodName = "Ssab_MIOuP-IoCardInit"
EndBody
EndObject
Object IoCardClose $Method 173 30-JUN-2010 10:26:01.18
Body SysBody 30-JUN-2010 10:27:11.13
Attr MethodName = "Ssab_MIOuP-IoCardClose"
EndBody
EndObject
Object IoCardWrite $Method 174 30-JUN-2010 10:26:01.18
Body SysBody 30-JUN-2010 10:27:21.66
Attr MethodName = "Ssab_MIOuP-IoCardWrite"
EndBody
EndObject
Object IoCardRead $Method 175 30-JUN-2010 10:27:35.49
Body SysBody 30-JUN-2010 10:27:41.11
Attr MethodName = "Ssab_MIOuP-IoCardRead"
EndBody
EndObject
EndObject
Object Template Ssab_MIO3102uP 2156101632 01-JAN-1970 01:00:00.00
Body RtBody 30-JUN-2010 10:41:08.04
Attr Super.ErrorSoftLimit = 25
Attr Super.ErrorHardLimit = 50
Attr Super.MaxNoOfAiChannels = 3
Attr Super.MaxNoOfAoChannels = 1
Attr Super.MaxNoOfDoChannels = 2
Attr Super.Process = 1
Attr ChAi01.ConversionOn = 1
Attr ChAi01.ScanInterval = 1
Attr ChAi01.RawValRangeLow = -3.000000e+04
Attr ChAi01.RawValRangeHigh = 3.000000e+04
Attr ChAi01.ChannelSigValRangeLow = -2.000000e+01
Attr ChAi01.ChannelSigValRangeHigh = 2.000000e+01
Attr ChAi01.SigValueUnit = "mA"
Attr ChAi01.SensorPolyType = 1
Attr ChAi01.SensorSigValRangeLow = 4.000000e+00
Attr ChAi01.SensorSigValRangeHigh = 2.000000e+01
Attr ChAi01.ActValRangeHigh = 1.000000e+02
Attr ChAi01.Representation = 3
Attr ChAi02.Number = 1
Attr ChAi02.ConversionOn = 1
Attr ChAi02.ScanInterval = 1
Attr ChAi02.RawValRangeLow = -3.000000e+04
Attr ChAi02.RawValRangeHigh = 3.000000e+04
Attr ChAi02.ChannelSigValRangeLow = -2.000000e+01
Attr ChAi02.ChannelSigValRangeHigh = 2.000000e+01
Attr ChAi02.SigValueUnit = "mA"
Attr ChAi02.SensorPolyType = 1
Attr ChAi02.SensorSigValRangeLow = 4.000000e+00
Attr ChAi02.SensorSigValRangeHigh = 2.000000e+01
Attr ChAi02.ActValRangeHigh = 1.000000e+02
Attr ChAi02.Representation = 3
Attr ChAi03.Number = 2
Attr ChAi03.ConversionOn = 1
Attr ChAi03.ScanInterval = 1
Attr ChAi03.RawValRangeLow = -3.000000e+04
Attr ChAi03.RawValRangeHigh = 3.000000e+04
Attr ChAi03.ChannelSigValRangeLow = -2.000000e+01
Attr ChAi03.ChannelSigValRangeHigh = 2.000000e+01
Attr ChAi03.SigValueUnit = "mA"
Attr ChAi03.SensorPolyType = 1
Attr ChAi03.SensorSigValRangeLow = 4.000000e+00
Attr ChAi03.SensorSigValRangeHigh = 2.000000e+01
Attr ChAi03.ActValRangeHigh = 1.000000e+02
Attr ChAi03.Representation = 3
Attr ChAo01.OutPolyType = 1
Attr ChAo01.ActValRangeLow = -1.000000e+02
Attr ChAo01.ActValRangeHigh = 1.000000e+02
Attr ChAo01.SensorSigValRangeLow = -1.000000e+01
Attr ChAo01.SensorSigValRangeHigh = 1.000000e+01
Attr ChAo01.SigValueUnit = "V"
Attr ChAo01.ChannelSigValRangeLow = -1.000000e+01
Attr ChAo01.ChannelSigValRangeHigh = 1.000000e+01
Attr ChAo01.RawValRangeLow = -3.000000e+04
Attr ChAo01.RawValRangeHigh = 3.000000e+04
Attr ChAo01.Representation = 3
Attr ChDo02.Number = 1
EndBody
EndObject
EndObject
Object Ai_AI32uP $ClassDef 16 30-DEC-2005 11:26:36.69
Body SysBody 30-DEC-2005 11:26:36.69
Attr Editor = 0
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment