我想使用TwinCat 3来控制阀门和Visual Studio C#来处理想要在喷泉上显示的图像。
图像的最终形式……
我用了 System.Runtime.InteropServices. 的 MarshalAs 强> 使用TwinCAT 3.1.4022.0
System.Runtime.InteropServices.
MarshalAs
数组声明:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] data;
然后我可以发送它
TcAdsClient.WriteAny( ixGroup, ixOffset, data )
我已经制作了一个示例控制台程序,它连接到端口851的本地PLC,并在TC3(TwinCAT 3)的MAIN中写入名为“boolArray”的100个bool数组:
using System; using TwinCAT.Ads; using System.Threading; namespace WriteArrayToPLC { class Program { static void Main(string[] args) { TcAdsClient adsClient = new TcAdsClient(); byte[] boolArray = new byte[100]; // Fill array with 010101010... for (int i = 0; i < 100; i++) { boolArray[i] = (i % 2 != 0) ? (byte)1 : (byte)0; } // Connect to PLC try { if (adsClient != null) { Console.WriteLine("Connecting to PC"); adsClient.Connect(851); } } catch (Exception err) { Console.WriteLine(err.Message); adsClient = null; } if (adsClient != null) { try { // Get the handle for the array int handle_array = adsClient.CreateVariableHandle("MAIN.boolArray"); // Write the array to PLC Console.WriteLine("Writing the array at handle: " + handle_array.ToString()); adsClient.WriteAny(handle_array, boolArray); } catch (Exception err) { Console.WriteLine(err.Message); } // The end Console.WriteLine("Done"); Thread.Sleep(3000); } } } }
此代码很好地表示将数组写入TC3。