三菱PLC网络MC3E通信—读取或写入——字符串或数字

1. 写入32位数值

写入32位的int类型数据,代码如下:

 public bool WriteSingle32(string address, int value)//写入32位的int数据
        {
            try
            {
                var tempByte = BitConverter.GetBytes(value);
                var temp = new short[2];
                temp[0] = BitConverter.ToInt16(tempByte, 0);
                temp[1] = BitConverter.ToInt16(tempByte, 2);
                plcs.WriteBlock16(address, temp);
                return true;
            }
            catch (Exception ex)
            {        
                return false;
            }
        }

2.读取写入字符串到三菱PLC—R32位寄存器

写入字符串到PLC,代码如下:

   private void button3_Click(object sender, EventArgs e)
        {
            WriteMachineName();
        }
SvMitsubishiMC3E plcs = new SvMitsubishiMC3E("192.168.1.38:8088");
        private void WriteMachineName()
        {
            string value = textBox3.Text;
            string input = "";
            if (value.Length==19)
            {
                input = value;
            }
            else if(value.Length < 19)
            {
                input = value.ToString().PadRight(20, ' ');
            }
            else
            {
                input = value.Substring(0, 20);
            }          
            int aaa = input.Length;
            plcs.Initial();
            WriteString("R32210", input);
            plcs.Close();
            MessageBox.Show("寫入成功!");
        }
public bool WriteString(string address, string value)//写入  value的长度为偶数
        {
            try
            {               
                byte[] tempByte = System.Text.Encoding.ASCII.GetBytes(value);
               // var temp = tempByte.Select(x => Convert.ToInt16(x)).ToArray();
                var temp = new short[tempByte.Length/2];
                for(int i = 0; i < temp.Length; i++)
                {
                    temp[i] = BitConverter.ToInt16(tempByte, 2*i);
                }            
                plcs.WriteBlock16(address, temp);
                return true;
            }
            catch (Exception ex)
            {         
                return false;
            }
        }

其中WriteString(string address, string value)value的长度为偶数

另一种方式读取字符串数据,代码如下:

  CsPlcMC PLC = new CsPlcMC();
private void ReadMachineName(string IP, int Port)
        {          
            if (PLC.Connect(IP, Convert.ToInt16(Port.ToString().Trim())))
            {
                short[] READ = new short[10];
                if (PLC.ReadBlocks(CsPlcMC.eAddress.R, 32210, ref READ))//地址
                {                  
                    byte[] READ1 = new byte[20];
                    //將數據轉換成machine名稱,
                    for (int i = 0; i < 20; i = i + 2)
                    {
                        //READ1[i] = (byte)READ[i];
                        string qw = READ[i / 2].ToString("X4");

                         READ1[i] = Convert.ToByte(qw.Substring(2, 2), 16);
                        READ1[i + 1] = Convert.ToByte(qw.Substring(0, 2), 16);
                    }
                    textBox3.Text = (Convert.ToString(System.Text.Encoding.ASCII.GetString(READ1))).Trim();
                    PLC.Disconnect();                                       
                }              
            }
        }

写入int数据,代码如下:

 int y, mon, d, h, min, s;
private void WriteTime(String IP, int Port)
        {       
            y = DateTime.Now.Year;
            mon = DateTime.Now.Month;
            d = DateTime.Now.Day;
            h = DateTime.Now.Hour;
            min = DateTime.Now.Minute;
            s = DateTime.Now.Second;
            if (PLC.Connect(IP, Convert.ToInt16(Port.ToString().Trim())))
            {
             

你可能感兴趣的:(C#,PLC通讯,c#,三菱PLC网络通信)