Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#到TwinCAT读取设备中的内存?_C#_Twincat_Twincat Ads .net - Fatal编程技术网

如何使用C#到TwinCAT读取设备中的内存?

如何使用C#到TwinCAT读取设备中的内存?,c#,twincat,twincat-ads-.net,C#,Twincat,Twincat Ads .net,我可以使用C#访问设备的内存并对其进行读/写?我知道使用TwinCAT是可能的。库中是否有通过TwinCAT访问内存的功能 当然,有一个叫做TwinCAT.Ads.dll的C#库,它几乎可以通过Ads访问任何设备。你的通信方式在很大程度上取决于你访问的设备类型。每个设备通常都有文档,告诉您需要处理哪些端口、索引和子索引 例如: var ads = new TcAdsClient(); ads.Connect( "10.0.0.155.1.1", 800 );

我可以使用C#访问设备的内存并对其进行读/写?我知道使用TwinCAT是可能的。库中是否有通过TwinCAT访问内存的功能

当然,有一个叫做TwinCAT.Ads.dll的C#库,它几乎可以通过Ads访问任何设备。你的通信方式在很大程度上取决于你访问的设备类型。每个设备通常都有文档,告诉您需要处理哪些端口、索引和子索引

例如:

var ads = new TcAdsClient();                  
ads.Connect( "10.0.0.155.1.1", 800 );
ads.WriteAny( 0xF020, 0x1, (byte)0xC );
该代码通过网络连接到具有AMSNetId 10.0.0.155.1.1的BC9050 PLC,并将一个值为0xC的字节写入%IX1.*处的运行时#1内存

如果您需要对本地TwinCAT安装的任务内存进行高性能访问,还有一个名为R3IO的库,它可以为您提供非常快速的直接内存访问。不过,它只存在于Twincat2中

编辑:似乎您希望直接读取从属内存(通常不这样做)。既然系统管理员可以做到这一点,我想您也应该能够做到。使用他们不支持的,你应该能够找出什么广告命令,它的问题,以访问内存

我还认为,如果您使用的是他们的ASIC,那么这些ASIC的文档可能会有更多关于这方面的信息


当你有了这些信息后,编写一个C程序来读取这些信息应该是非常简单的。

这对于设备来说非常具体。TwinCAT是Beckhoff对EtherCAT(实时以太网可编程逻辑控制器)的尝试,它基于双操作系统(与嵌入式Windows并行运行的实时操作系统)。TwinCAT公开了一个允许您直接读/写内存的API,因为这比通过一个使用命名地址并允许其使用的数据包传输类型的API要快得多(它接受数据包,向数据包添加数据,然后转发数据包)。你说的是什么设备?我正在尝试访问EtherCAt接线盒。@Chris它实际上是我工作的公司正在开发的原型。我正在测试这个原型,看看我是否在内存中得到了我期望的值。@XTT啊,我明白了,很有趣!既然系统管理器可以做到这一点,您也应该能够做到。也许您可以使用ADS调试器()来找出它访问从机内存的内容和方式。谢谢!我会看看我能用ADS调试器做些什么。不过我用的是Twincat3。我可以将ADS调试器与TwinCAT 3一起使用吗?@XTT不确定,但我假设ADS协议保持不变。试试看!