c#通过网线读取三菱PLC数据

一、写入PLC数据

public static bool PlcWrite(int adres, int count, string SendData)
		{
            if (Sys.PlcComUse == 0)
                return true;

            string s_adres = (adres + Sys.PlcBaseAddress).ToString("0#####");
            string s_count = count.ToString("X").PadLeft(4, '0');
			
			string hdr = "500000FF03FF00";
			string s_data = "000A14010000D*" + s_adres + s_count + SendData;
			string n = (s_data.Length.ToString("X")).PadLeft(4, '0');
			
			string dtfram = (hdr + n + s_data);
			byte[] msg = Encoding.ASCII.GetBytes(dtfram);
            plcCom.txtSend.Text = "ABC";
            Application.DoEvents();
            if (Sys.Deb != 0)
				return true;
			int byteSend = Sock.Send(msg);
			System.Text.Encoding encoding = System.Text.Encoding.UTF8;
			string smsg = encoding.GetString(msg);
			
			System.DateTime Stime = DateTime.Now;
			TimeSpan Ctime = new TimeSpan(10000000); 
			do
			{
				TimeSpan Ptime = (DateTime.Now - Stime);	
				if (Ptime > Ctime)	
				{
					MessageBox.Show("PLC comm. time out error.");
					return false;
				}
				Application.DoEvents();
			} while (Sock.Available == 0);

			int byteRec = Sock.Receive(RcvBytes);
			string rcvstr = System.Text.Encoding.UTF8.GetString(RcvBytes);
			plcCom.txtRcv.Text = rcvstr;
			string emsg = rcvstr.Substring(18, 4);	
            if (emsg != "0000")
            {
                plcCom.txtRcv.Text += "error code " + emsg;
                MessageBox.Show("PLC comm. data error. " + emsg);
            }
			
            return true;

		}

二、读取PLC数据

public static bool PlcRead(int adres, int count, ref string ReadData)
		{
            if (Sys.PlcComUse == 0)
                return true;

            PlcReadBusy = true;
            string s_adres = (adres + Sys.PlcBaseAddress).ToString("0#####");
            string s_count = count.ToString("0###");
			
			string hdr = "500000FF03FF00";
			string s_data = "000A04010000D*" + s_adres + s_count;
			string n = (s_data.Length.ToString("X")).PadLeft(4, '0');
			
			string dtfram = (hdr + n + s_data);
			byte[] msg = Encoding.ASCII.GetBytes(dtfram);
            if (Sys.Deb != 0)
            {
                PlcReadBusy = false;
                return true;
            }
            int byteSend = Sock.Send(msg);
			System.Text.Encoding encoding = System.Text.Encoding.UTF8;
			string smsg = encoding.GetString(msg);
			
			System.DateTime Stime = DateTime.Now;
			TimeSpan Ctime = new TimeSpan(10000000); 
			do
			{
				TimeSpan Ptime = (DateTime.Now - Stime);	
				if (Ptime > Ctime)	
				{
					MessageBox.Show("PLC comm. time out error.");
                    PlcReadBusy = false;
                    return false;
				}
				Application.DoEvents();
			} while (Sock.Available == 0);

			int byteRec = Sock.Receive(RcvBytes);
			ReadData = System.Text.Encoding.UTF8.GetString(RcvBytes);
			plcCom.txtRcv.Text = ReadData;
			string emsg = ReadData.Substring(18, 4);
            if (emsg != "0000")
            {
                plcCom.txtRcv.Text += "error code " + emsg;
                PlcReadBusy = false;
                return false;
            }
            ReadData = ReadData.Substring(22);  
            PlcReadBusy = false;
            return true;
		}
	}



 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mushroom_lb

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

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

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

打赏作者

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

抵扣说明:

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

余额充值