C# ModBus Tcp 直接读写PLC寄存器 | 您所在的位置:网站首页 › plc怎么实现读取g代码 › C# ModBus Tcp 直接读写PLC寄存器 |
C# ModBus Tcp 直接读写PLC寄存器
MODBUS通用数据帧: 具体modbus协议见pdf文档这里就不说了(下载包里有) 界面如下: 3.主界面部分: 内联代码片。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace ModbusTcp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /*具体详见modbus协议中文版.pdf 功能码说明(括号内为对应的16进制): 01(01):byte访问 读线圈 02(02):byte访问 读输入离散量 05(05):byte访问 写单个线圈 15(0F):byte访问 写多个线圈 03(03):16位byte访问 读多个寄存器 04(04):16位byte访问 读输入寄存器 06(06):16位byte访问 写单个寄存器 16(10):16位byte访问 写多个寄存器 23(17):16位byte访问 读/写多个寄存器 22(16):16位byte访问 屏蔽写寄存器 20(14):文件记录访问 读文件记录 21(15):文件记录访问 写文件记录 43(2B):封装接口 读设备识别码 */ private void button1_Click(object sender, EventArgs e) { //连接Tcp服务器 tcp.Connect(textBox1.Text, 502); } TCP tcp = new TCP(); private void Form1_Load(object sender, EventArgs e) { tcp.ChangeList += new TCP.ChangeFormList(f_ChangeList);//tcp通讯显示发送 tcp.ReturnFromPLC += new TCP.TcpStutas(f_TcpAtutas);//tcp通讯显示返回 } private void f_TcpAtutas(bool change) { Invoke(new Action(() =>{ richTextBox1.Text += tcp.STR + "***" + DateTime.Now.ToString("yyyy/mm/dd HH:mm:ss") + "\r\n"; } )); } private void f_ChangeList(bool change) { Invoke(new Action(() => { richTextBox2.Text += tcp.STR + "***" + DateTime.Now.ToString("yyyy/mm/dd HH:mm:ss") + "\r\n"; })); } /// /// 数据格式:0-6位:报文头;7位:功能码;8-9位:起始地址;10-11位:寄存器位数(读)/写入数据(写) /// byte[] data = new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x06, 0x00, 0x00, 0x00, 0x01 }; private void button2_Click(object sender, EventArgs e) { try { data[7] = GetHex(textBox2.Text); data[11] = GetHex(textBox3.Text); data[9] = GetHex(textBox4.Text); tcp.Send(data); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } /// /// 10转16 /// /// /// private byte GetHex(string msg) { byte hex = Convert.ToByte(msg); return hex; } private void timer1_Tick(object sender, EventArgs e) { if (tcp.isConnected) { button1.Enabled = false; textBox1.Enabled = false; } else { button1.Enabled = true; textBox1.Enabled = true; } } } } |
CopyRight 2018-2019 实验室设备网 版权所有 |