Hello everyone,
I’m encountering difficulties with defining a string variable in C# within Visual Studio and PLCnext Engineer.
The issue seems to be specific to PLCnext Engineer. While the build process in Visual Studio completes without errors, I encounter error codes when attempting to build it in PLCnext Engineer (as shown in the attached picture). I’m unsure about the appropriate steps to resolve this.
Could someone please offer assistance with this matter?
Kind regards
Daan van der Veeken
image.png
/*
PLCDataCheck Function Block - V1
Gemaakt op: 9-3-2024
Laatste update: 9-3-2024 om 15:04
Ontwikkelaar: Daan van der Veeken (DMF), I-sago
Beschrijving:
Deze Function Block controleert een stringinput en geeft een stringoutput
wanneer bepaalde condities zijn voldaan (zoals het ontvangen signaal hoog is).
Het houdt ook bij of het proces succesvol is en geeft foutcodes terug indien
van toepassing.
Bug Fix List:
- [Datum] Beschrijving van de bug en oplossing
*/
using Iec61131.Engineering.Prototypes.Common;
using Iec61131.Engineering.Prototypes.Methods;
using Iec61131.Engineering.Prototypes.Pragmas;
using Iec61131.Engineering.Prototypes.Types;
using Iec61131.Engineering.Prototypes.Variables;
using System;
using System.Iec61131Lib;
using System.Runtime.InteropServices;
namespace PLCnextFirmwareLibrary1
{
// Definieer een aangepaste string structuur
[String(512)]
[StructLayout(LayoutKind.Explicit, Size = 518)]
public struct TString
{
[FieldOffset(0)]
public IecStringEx s;
public void Init()
{
s.maximumLength = 512;
s.Empty();
}
}
[FunctionBlock]
public class PLCDataCheck
{
[Input]
public TString InputString; // Aangepaste string input
[Input]
public bool Ontvangen; // Signaal of data is ontvangen
[Input]
public bool Reset; // Reset input
[Output]
public TString OutputString; // Aangepaste string output
[Output]
public bool Succesvol; // Aanduiding of proces succesvol is
[Output]
public bool Error; // Fout indicator
[Output, DataType(„DINT“)]
public int ErrorID; // Foutcode
[Initialization]
public void __Init()
{
InputString.Init();
OutputString.Init();
Succesvol = false;
Error = false;
ErrorID = 0;
}
[Execution]
public void __Process()
{
if (Reset)
{
Succesvol = false;
OutputString.Init();
return;
}
if (Ontvangen)
{
if (!InputString.s.IsEmpty)
{
IecStringEx.Copy(ref InputString.s, ref OutputString.s);
Succesvol = true;
Error = false;
ErrorID = 0;
}
else
{
Error = true;
ErrorID = 500; // Foutcode voor lege input
Succesvol = false;
}
}
}
}
}