[DllImport("dtl.dll", SetLastError=true)]
static extern public int DTL_DRIVER_OPEN(int driver_id, string szDriverName, int timeout);
Declare Function DTL_DRIVER_OPEN Lib "dtl.dll" (TODO) As TODO
None.
Do you know one? Please contribute it!
None.
Please add some!
public static int DtlInit(int tableSize)
{
new UIPermission(UIPermissionWindow.AllWindows).Demand();
return (UnsafeNativeMethods.DTL_INIT(tableSize));
}
public static int DtlDriverOpen(int driverId, string driverName, int timeOut)
{
new UIPermission(UIPermissionWindow.AllWindows).Demand();
return (UnsafeNativeMethods.DTL_DRIVER_OPEN(driverId, driverName, timeOut));
}
public static void DtlErrorS(int dtlSts, StringBuilder msg, int buffSize)
{
new UIPermission(UIPermissionWindow.AllWindows).Demand();
UnsafeNativeMethods.DTL_ERROR_S(dtlSts, msg, buffSize);
}
bool DtlStatusOk(string dtlFunction, int dtlSts, ref string errorText, string address = null, int ioStat = 0, bool logIt = false)
{
var msg = new StringBuilder(256);
if (dtlSts != DtlSuccess)
{
if (ioStat == 0)
{
ioStat = dtlSts;
}
Dtl.DtlErrorS(ioStat, msg, msg.MaxCapacity);
if (address != null)
{
errorText = dtlFunction + ": " + address + ' ' + msg;
}
else
{
errorText = dtlFunction + ": " + msg;
}
if (logIt)
{
_logger.Warn(LoggerEvent.RockwellPlcError, msg.ToString());
}
return (false);
}
return (true);
}
protected void OpenDriver(string driverName, int timeoutFactor)
{
int dtlSts;
string msg = " ";
//Look for drivername in list
bool driverAlreadyOpened = _driverLookupList.TryGetValue(_driverName, out _driverId);
//Initialize DTL
if (!_dtlInitialized)
{
dtlSts = Dtl.DtlInit(TableSize);
if (DtlStatusOk("DtlInit", dtlSts, ref msg, " "))
{
_dtlInitialized = true;
}
else
{
_logger.Error(LoggerEvent.RockwellPlcError, msg);
throw new PlcException();
}
}
//Open driver
if (!driverAlreadyOpened)
{
if (_dtlInitialized)
{
_driverId = _nextDriverId;
dtlSts = Dtl.DtlDriverOpen(_driverId, _driverName, _timeoutFactor * 3);
if (DtlStatusOk("DtlDriverOpen", dtlSts, ref msg, " ", 0, true))
{
_driverLookupList[_driverName] = _driverId;
int highestId = -1;
foreach (KeyValuePair<string, int> id in _driverLookupList)
{
if (id.Value > highestId)
{
_nextDriverId = id.Value + 1;
highestId = id.Value;
}
}
}
else
{
_logger.Error(LoggerEvent.RockwellPlcError, msg);
throw new PlcException();
}
}
}
}