C# 倍福ADS带数组成员的结构体数组通信

本文介绍了如何使用C#通过ADS(Automation Device Services)与倍福控制器进行通信,特别是处理包含数组成员的结构体数组。在操作过程中,需要注意结构体的定义、数组类型的处理以及在C#中初始化通信时的端口号设置。在读取数组时,由于C#数组长度的灵活性,需要指定明确的数组长度参数以匹配倍福控制器的缓存器配置。
摘要由CSDN通过智能技术生成

C#读写ADS结构体时,如果结构体成员复杂,有数组类型,必须指明数组兼容的c语言类型。有时需要结构体数组缓存这些结构体形式的数据,读取函数与非数组变量不一样。

首先添加以下两个命名空间的引用,ads还需要导入官方dll库。

using System.Runtime.InteropServices;//注意添加该引用,以实现未托管代码的互通
using TwinCAT.Ads;//ADS通信库,官方提供的dll文件

定义结构体,注意指明结构体的封装,数组类型成员的非托管类型为ByValArray,数组元素的成员类型要转化成非托管类型。

//结构体定义
 [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public class Feedbacks
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4, ArraySubType = UnmanagedType.I1)]//PLC的bool型,没有一位的数据类型,因此是一字节整型,即I1
        public bool [] filter=new bool[4];
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2, ArraySubType = UnmanagedType.I2)]//PLC的int型,实为2字节short型,即I2
        public short[] count =new short[2];
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2, ArraySub
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值