Teilen Sie Ihre Erfahrunge und Wünsche mit uns und anderen Usern!
Pick up cube and conveyer belt stop at sensor
what is the best way to pick up the cube on the conveyer ? Should i use the grip or gripper script?
and how can i make the conveyer stop, when the cube is detected by the sensor? is there an alternative solution for stopping the conveyer at a certain destination?
Please check the demo model or this demo which shows several ways for gripping parts: Assets/game4automation/Scenes/DemoGripping.unity
To make the conveyor stop you can use a script (you need to check the property occupied of the sensor and you can stop the drive by Drive.JogForward = false.
Or you can use Unitys Visual Scripting:
https://realvirtual.io/documentation/current/unityvisualscripting.html
Another possiblity (only with Professional Version) is to use LogicSteps:
https://realvirtual.io/documentation/current/logicsteps.html
You can stop the Conveyor (in a script or by using visual scripting) as soon as Drive.CurrentPosition is greater than a certain value.
DllNotFoundException
I was trying to import the game4automation asset but got that error:
DllNotFoundException: 3DConnexionWrapperU5 assembly: type: member:(null)
how can i solve it?
You seem to work on a non Windows Plattform. I think the space navigator drivers are the problem. Please delete the whole SpaceNavigator folder after importing the asset and select again "Apply Standard Settings"
Assets/game4automation/private/RuntimeUI/SpaceNavigator
Import signals error in Twincat Interface
Hello Thomas,I build a Test program with Twincat3,after I press Active configration button thePLC turns green then I press Import Signals in Unity it shows:TypeLoadException: Could not resolve type with token 0100000a (from typeref, class/assembly I18N.Common.MonoSafeEncoding, I18N, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756) assembly:I18N, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756 type:I18N.Common.MonoSafeEncoding member:(null) signature:
System.RuntimeType.GetConstructors_internal (System.Reflection.BindingFlags bindingAttr, System.RuntimeType reflectedType) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.RuntimeType.GetConstructorCandidates (System.String name, System.Reflection.BindingFlags bindingAttr, System.Reflection.CallingConventions callConv, System.Type[] types, System.Boolean allowPrefixLookup) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.RuntimeType.GetConstructors (System.Reflection.BindingFlags bindingAttr) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.RuntimeType.CreateInstanceImpl (System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, System.Object[] args, System.Globalization.CultureInfo culture, System.Object[] activationAttributes, System.Threading.StackCrawlMark& stackMark) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Activator.CreateInstance (System.Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, System.Object[] args, System.Globalization.CultureInfo culture, System.Object[] activationAttributes) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Activator.CreateInstance (System.Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, System.Object[] args, System.Globalization.CultureInfo culture) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.RuntimeType.InvokeMember (System.String name, System.Reflection.BindingFlags bindingFlags, System.Reflection.Binder binder, System.Object target, System.Object[] providedArgs, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, System.String[] namedParams) (at <695d1cc93cca45069c528c15c9fdd749>:0)
I18N.Common.Manager.Instantiate (System.String name) (at <6abb78bbc2d24347bb608e81ff4eb73b>:0)
I18N.Common.Manager.GetEncoding (System.Int32 codePage) (at <6abb78bbc2d24347bb608e81ff4eb73b>:0)
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <695d1cc93cca45069c528c15c9fdd749>:0)
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.RuntimeType.InvokeMember (System.String name, System.Reflection.BindingFlags bindingFlags, System.Reflection.Binder binder, System.Object target, System.Object[] providedArgs, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, System.String[] namedParams) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Text.EncodingHelper.InvokeI18N (System.String name, System.Object[] args) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Text.Encoding.GetEncoding (System.Int32 codepage) (at <695d1cc93cca45069c528c15c9fdd749>:0)
TwinCAT.Ads.Internal.SymbolUploadInfo.get_StringEncoding () (at <23b243ab6b58458a8536a564d2211fbc>:0)
TwinCAT.Ads.TcAdsSymbolInfoLoader.onUploadSymbols () (at <23b243ab6b58458a8536a564d2211fbc>:0)
TwinCAT.Ads.TcAdsSymbolInfoLoader.initializeUploadSymbols (System.Boolean forceReload) (at <23b243ab6b58458a8536a564d2211fbc>:0)
TwinCAT.Ads.TcAdsSymbolInfoLoader.GetSymbols (System.Boolean forceReload) (at <23b243ab6b58458a8536a564d2211fbc>:0)
game4automation.TwinCatAdsInterface.ImportSignals (System.Boolean simstart) (at Assets/game4automation/private/Interfaces/TwinCAT/TwinCatAdsInterface.cs:351)
game4automation.TwinCatAdsInterface.Import () (at Assets/game4automation/private/Interfaces/TwinCAT/TwinCatAdsInterface.cs:747)
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <695d1cc93cca45069c528c15c9fdd749>:0)
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <695d1cc93cca45069c528c15c9fdd749>:0)
NaughtyAttributes.Editor.NaughtyEditorGUI.Button (UnityEngine.Object target, System.Reflection.MethodInfo methodInfo) (at Assets/game4automation/private/Tools/NaughtyAttributes/Editor/Utility/NaughtyEditorGUI.cs:179)
NaughtyAttributes.Editor.NaughtyInspector.DrawButtons (System.Boolean drawHeader) (at Assets/game4automation/private/Tools/NaughtyAttributes/Editor/NaughtyInspector.cs:188)
NaughtyAttributes.Editor.NaughtyInspector.OnInspectorGUI () (at Assets/game4automation/private/Tools/NaughtyAttributes/Editor/NaughtyInspector.cs:52)
UnityEditor.UIElements.InspectorElement+<>c__DisplayClass59_0.b__0 () (at :0)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&)
My Unity is 2020.3.4 and G4A is Version 2020.15 - February 10, 2022,Thank you Thomas。
could it have to do with some non english letters in the symbol naming. I know that this problem exists and we need to fix it in one of the next releases.
cant download demo project, link is brocken.
https://realvirtual.io.com/demo/realvirtual.io.zip is not available
PLC WinMoD G4A
Hi
I would like to use G4A to get WinMoD behavior signal and then according signal to display in U3D and also get feedback from G4A. WinMoD other side contion a physical PLC.
What kind of automation interface would be best select in G4A side ? OPC-UA?
Allen‑Bradley, Rockwell PLC Framework
Gibt es nativ eine direkte Schnittstelle zum Rockwell PLC Framework?
Ich konnte keine explizierte Erwähnung (wie für Siemens oder Beckhoff)
finden.
All of them have the basic function of signal exchange with the PLC. The functionality essentially depends on what the interface to the PLC of the manufacturer enables.
The most comprehensive - including signal import via the interface - is the TwinCAT ADS interface.
With S7, the signals must be exported from Step7 via a standardized text file and imported into G4A.
With EthernetIP there is no standard for this. The signals must be created manually or imported via a non-standard text file.
Bibliothek
Ich habe eine weile mit eine anderen Simulation System gearbeitet. Daher folgende Fragen
Kann man in Game4Automation sich eine Bibliothek anlegen und sich die Erstellung einer Szene (fuer Kunden) automatisieren.
Bei dem anderen System kann via einer I/O Liste und einen externen Tool Marcos ausgewählt und die Verlinkung zu diesen erzeugt werden.
ABB Word mapping
Hello,
A small time ago we had a conversation about adding bytes into the device mapping of ABB, now i needs words (16bits).
We are trying to get the Word option to work as well, we have changed the code to the following:
Only thing we are not sure about is the line with accessor.Write(posheader, (byte) 10).
Is this correct or should we change it?
Sorry for the formatting, couldn't find the code button.
if (signal.OriginDataType.ToUpper() == "BYTE")
{
if (signal.GetType() == typeof(PLCInputInt) || signal.GetType() == typeof(PLCOutputInt))
{
if (lastbit)
posmemory = posmemory + 1;
bit = 0;
shm.bit = 0;
lastbit = false;
signal.Comment = $"M{posmemory}";
accessor.Write(posheader, (byte) 8);
shm.type = SIGNALTYPE.BYTE;
posmemory = posmemory + 1;
}
}
else if (signal.OriginDataType.ToUpper() == "WORD")
{
if (signal.GetType() == typeof(PLCInputInt) || signal.GetType() == typeof(PLCOutputInt))
{
if (lastbit)
posmemory = posmemory + 1;
bit = 0;
shm.bit = 0;
lastbit = false;
signal.Comment = $"M{posmemory}";
accessor.Write(posheader, (byte) 10);
shm.type = SIGNALTYPE.WORD;
posmemory = posmemory + 2;
}
}
else
{ if (signal.GetType() == typeof(PLCInputInt) || signal.GetType() == typeof(PLCOutputInt))
{
if (lastbit)
posmemory = posmemory + 1;
bit = 0;
shm.bit = 0;
lastbit = false;
signal.Comment = $"M{posmemory}";
accessor.Write(posheader, (byte) 10);
shm.type = SIGNALTYPE.INT;
posmemory = posmemory + 4;
}
}
Sorry if you saw my answer on the last message, but i thought it would be good to make a new topic!
I will add this in one of the next release. For Words you need to write a 9 as Type ID.
Build
UnityEnginy 2020.2.6f1
Building the project end with error. "ArgumentException: The Assembly ZeroFormatter is referenced by PREspective ('Assets/Plugins/PREspective/PREspective.dll'). But the dll is not allowed to be included or could not be found.
UnityEditor.AssemblyHelper.AddReferencedAssembliesRecurse (System.String assemblyPath, System.Collections.Generic.List`1[T] alreadyFoundAssemblies, System.String[] allAssemblyPaths, System.String[] foldersToSearch, System.Collections.Generic.Dictionary`2[TKey,TValue] cache, UnityEditor.BuildTarget target) (at <8c48e4bc2ff34638b69095cbb65e2e27>:0)
UnityEditor.AssemblyHelper.AddReferencedAssembliesRecurse (System.String assemblyPath, System.Collections.Generic.List`1[T] alreadyFoundAssemblies, System.String[] allAssemblyPaths, System.String[] foldersToSearch, System.Collections.Generic.Dictionary`2[TKey,TValue] cache, UnityEditor.BuildTarget target) (at <8c48e4bc2ff34638b69095cbb65e2e27>:0)
UnityEditor.AssemblyHelper.FindAssembliesReferencedBy (System.String[] paths, System.String[] foldersToSearch, UnityEditor.BuildTarget target) (at <8c48e4bc2ff34638b69095cbb65e2e27>:0)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&)"
I Change Global functions "public static List GetGroups()" and "GetAllWithGroup(string group)" But, In corpasion it was witout differences.
I tried to build with differed API settings .NET 2.0 ant .NET 4.x
Probably there is probably problem with PREspective.dll, that doesn't properly connected to Unity, but I am not sure.
Do anybody has an idea ? thank you all.
You have PREspective in your project (Prespective is another Digital Twin product). It is not a part of Game4Automation which is causing your problems. Please delete everything of Prespective or start with an empty project.
Device Mapping in ABB
Hello,
I am working on connecting ABB robotstudio to game4automation, and I have a question about the device mapping. I have device mappings that go to +-120, How can I make this in robotstudio? I can only see it go up to 9 and then it becomes 1,1, 1,2 etc, does this count as 11,12 etc?
Another question, Do I have to create empties in robotstudio for every missing device map? I saw the page but didnt understand why you had to create that much empties.
Please try do do this. I am not able to test because currently I have not an ABB Robotstudio with your configuration. Hope it works.
Add Byte to Origin Data Type
and replace Line 167 following in ABBRobotStudioInterface by this:
if (signal.OriginDataType.ToUpper() != "BYTE")
{
if (signal.GetType() == typeof(PLCInputInt) || signal.GetType() == typeof(PLCOutputInt))
{
if (lastbit)
posmemory = posmemory + 1;
bit = 0;
shm.bit = 0;
lastbit = false;
signal.Comment = $"MD{posmemory}";
accessor.Write(posheader, (byte) 10);
shm.type = SIGNALTYPE.INT;
posmemory = posmemory + 4;
}
}
else
{ if (signal.GetType() == typeof(PLCInputInt) || signal.GetType() == typeof(PLCOutputInt))
{
if (lastbit)
posmemory = posmemory + 1;
bit = 0;
shm.bit = 0;
lastbit = false;
signal.Comment = $"M{posmemory}";
accessor.Write(posheader, (byte) 8);
shm.type = SIGNALTYPE.BYTE;
posmemory = posmemory + 1;
}
}
Customer support service by UserEcho