-> Hier kostenlos registrieren
TC3 4022.22, ADSdll 4.2.166.0
TC Typen und Variable (vereinfacht)
// C# Datendefinition
LESEN funktioniert:
SCHREIBEN krieg ich nicht hin
hat jemand einen tipp, wie das Schreiben von zusammegesetzten vars funktioniert.
die infosysbeispiele helfen mir nicht sehr.
kurt
TC Typen und Variable (vereinfacht)
Code:
TYPE ST_WorkList_1 :
STRUCT
dnPcsCounter: UDINT;
lrSheetlength: LREAL;
arPointData : ARRAY[0..1] OF ST_WorkPoint;
END_STRUCT
END_TYPE
TYPE ST_WorkPoint :
STRUCT
bActive: BYTE;
lrLength: LREAL;
lrBendingPos: LREAL;
END_STRUCT
END_TYPE
stProdList: ST_WorkList_1; // im Namespace HMI also HMI.stProdList
// C# Datendefinition
Code:
[Serializable]
[StructLayout(LayoutKind.Sequential, Pack = 0)]
public class WorkList
{
//public string sName;
public uint nCountPcs;
public double lrSheetlength;
public double lrRadius;
public double lrBendPreposition;
public double lrProductionSpeed;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] // test mit und ohne Marshal
public WorkPoint[] arPointData = new WorkPoint[2];
public WorkList()
{
;
}
}
[Serializable]
[StructLayout(LayoutKind.Sequential, Pack = 0)]
public class WorkPoint
{
public byte bActive;
public double lrLength;
public double lrBendingPos;
public WorkPoint()
{
;
}
}
LESEN funktioniert:
Code:
string plcVarName = "HMI.stProdList";
data = (WorkList) AdsConnect.Connection.ReadSymbol(plcVarName, typeof (WorkList), true);
SCHREIBEN krieg ich nicht hin
Code:
// WriteAny schreibt die erste struktur correct, das array hat illegale werte
var symbolInfo = AdsConnect.Connection.ReadSymbolInfo(plcVarName);
AdsConnect.Connection.WriteAny((uint)symbolInfo.IndexGroup, (uint)symbolInfo.IndexOffset, data);
Code:
// WriteSymbol bringt Exception: "Memory stream is not expandable."
AdsConnect.Connection.WriteSymbol(plcVarName, prodData, true); // egal ob true oder false
Code:
// ADSstream schreibt ab der ersten lreal mist in die Spsvariable
AdsStream dataStream = new AdsStream();
BinaryWriter binWrite = new BinaryWriter(dataStream);
dataStream.Position = 0;
binWrite.Write(prodData.nCountPcs);
binWrite.Write(prodData.lrSheetlength);
foreach (var sample in prodData.arPointData)
{
binWrite.Write(sample.bActive);
binWrite.Write(sample.lrLength);
binWrite.Write(sample.lrBendingPos);
}
var hVar = AdsConnect.Connection.CreateVariableHandle(plcVarName);
AdsConnect.Connection.Write(hVar, dataStream);
hat jemand einen tipp, wie das Schreiben von zusammegesetzten vars funktioniert.
die infosysbeispiele helfen mir nicht sehr.
kurt