Visual Studio 2010--C#跟西门子1200通讯(Sharp7)⑤--数据读取

Visual Studio 2010--C#跟西门子1200通讯(Sharp7)⑤--数据读取

 

上期回顾(上期主要编写了在呢么从PLC的特定数据库读取数据到C#缓冲区):

image.png

这期将继续说数据读取,上期把数据拿到缓冲区后,这里要把他一个一个拿出来,并转换成C#的类型显示

1.0 先看下PLC的数据块,变量的类型以及地址

image.png

2.0 然后根据PLC数据块的地址以及类型,来对应编写C#代码,要注意PLC变量地址0.0为BOOL类型,那对应的C#这边变量也要为BOOL,保证占用的字节大小一致,PLC地址0.0=C#的buffer,0,0,,当接收到转换后的数据后,在控制台输出数据,具体代码如下

static void Main(string[] args)

        {

            var client = new S7Client();//创建一个叫client的S7Client的匿名类型

            int comectionResult = client.ConnectTo("192.168.0.11", 0, 1);//comectionResult用来接收通讯结果,括号里设置的是IP/机架/插槽

            if (comectionResult == 0)//判断通讯是否正常,如果为0则通讯正常,否则通讯故障

            {

                Console.Write("comection OK");//控制台输出通讯正常

            }

            else

            {

                Console.WriteLine("comection error \n"+ client.ErrorText(comectionResult));//控制台输出通讯故障

            }

 

            //创建38个字节的数组,用来读取PLC数据

            var buffer = new byte[38];

            //读取DB1的从地址0开始的38个字节的数据,读到buffer

            int readResult = client.DBRead(1,0,buffer.Length,buffer);

            if (readResult == 0)//如果等于0,说明读取完成,否则读取故障了

            {

                Console.WriteLine("DB1 Read ok");

             }

            else

            {

                Console.WriteLine("DB1 Read error");

            }

            //读取BOOL,输出文本

            bool db1dbx00 = S7.GetBitAt(buffer,0,0);

            Console.WriteLine("db1dbx00:" + db1dbx00);

            //读取BOOL,输出文本

            bool db1dbx01 = S7.GetBitAt(buffer,0,0);

            Console.WriteLine("db2dbx01:" + db1dbx01);

            //读取int,输出文本

            int db1dbw2 = S7.GetIntAt(buffer,2);

            Console.WriteLine("db1dbx2:" + db1dbw2);

            //读取浮点数double,输出文本

            double db1dbd4 = S7.GetLRealAt(buffer,4);

            Console.WriteLine("db1dbx4:" + db1dbd4);

            //读取int,输出文本

            int db1dbd8 = S7.GetDIntAt(buffer,8);

            Console.WriteLine("db1dbx8:" + db1dbd8);

            //读取uint,输出文本

            uint db1dbd12 = S7.GetDWordAt(buffer,12);

            Console.WriteLine("db1dbx12:" + db1dbd12);

            //读取ushort,输出文本

            ushort db1dbd14 = S7.GetWordAt(buffer,14);

            Console.WriteLine("db1dbx14" + db1dbd14);

            //强制转换成字符串类型相当于PLC的16进制,tostring()括号中要带x,不然仍旧是十进制不会转换

            string hexdb1dbd12 = db1dbd12.ToString("x");

            string hexdb1dbd14 = db1dbd14.ToString("x");

 

            client.Disconnect();//断开连接

        }

    }

image.png

3.0 保存,打开在断开打开断点,然后按F5调试,刚开始可以先读取BOOL试试,这样能减少问题的发生,如果没问题,那控制台就会显示读取的数据

image.png

 

 

 

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老王工控笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值