C#读取PLC字符串

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_38950569/article/details/100178178

之所以将字符串另开一篇,完全是因为这一块我也没怎么玩明白~

string开始地址0,代码里写2,Wstring是256,代码里写260,嗯,除了位数,我想不明白还有其他什么原因。

知道原因的朋友留言告诉我,谢谢~

学习慧兰博的C#与工业自动化U盘版,在这里做记录。有什么错误的地方请指出来,互相学习。(PS如果侵权慧兰博请及时联系我删除。)

        private void btnReadStr_Click(object sender, EventArgs e)
        {
            //字符串数组必须大于等于PLC中字符串长度
            string[] rcvData = new string[100];
            //1为DB块位置,本应为0,现在的2为开始地址(原因是string占2位???),100读取长度大于等于PLC中的字符串长度
            string bytes = S71200.Read(DataType.DataBlock, 1, 2, VarType.String, 100).ToString();
        }
        //吧读上来的数据进行高低字节颠倒
        public byte[] GetArray(byte[] bdata)
        {
            int len = bdata.Length;
            byte[] Data = new byte[len];
            for(int i = 0; i<len; i =+ 2)
            {
                for(int j=0; j<2; j++)
                {
                    Data[i + 1 - j] = bdata[i + j];
                }
            }
            return Data;
        }

        private void btnReadWstr_Click(object sender, EventArgs e)
        {
            byte[] rcvData = new byte[100];
            //1为DB块位置,本应为256,现在的256为开始地址(原因是Wstring占4位???),100读取长度大于等于PLC中的字符串长度
            var bytes = S71200.Read(DataType.DataBlock, 1, 260, VarType.Byte, 100);
            rcvData = (byte[])bytes;

            string mystr = Encoding.Unicode.GetString(GetArray(rcvData);)
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_38950569/article/details/100178178