基本信息
源码名称:C#写的欧姆龙PLC通讯程序
源码大小:0.07M
文件格式:.rar
开发语言:C#
更新时间:2021-08-14
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559
本次赞助数额为: 3 元×
微信扫码支付:3 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button4_Click(object sender, EventArgs e)
{
this.Close(); //关闭窗体
}
private void Form1_Load(object sender, EventArgs e)
{
radioButton1.Checked = true;
serialPort1.PortName = comboBox1.Text;
}
private void button5_Click(object sender, EventArgs e)
{
if(serialPort1.IsOpen == false)
{
serialPort1.Open();
button5.Text = "关闭串口";
pictureBox2.Image = PLC_COM.Properties.Resources.low;
}
else
{
serialPort1.Close();
button5.Text = "打开串口";
pictureBox2.Image = PLC_COM.Properties.Resources.high;
}
}
#region 读取数据,功能演示只读取一个字的数据
private void button2_Click(object sender, EventArgs e) //读取数据
{
string SendStr = "";
string ReadData = "";
string Addr = "0000"; //数据地址
string RTUaddr = "00"; //PLC 站号
Addr = textBox1.Text.Trim();
RTUaddr = comboBox2.Text.Trim();
if(serialPort1.IsOpen==false)
{
MessageBox.Show("请打开串口!");
return;
}
SendStr = "@" RTUaddr "RD" Addr "0001"; //只读取一个地址的数据,修改最后的数,可一次读取多个数据
SendStr = SendStr FCS(SendStr) "*" '\r';
ReadData = COM2CPM2A(SendStr);
textBox2.Text = ReadData.Trim().Substring(7,4);
}
#endregion
#region 写数据 DM
private void button3_Click(object sender, EventArgs e)
{
string SendStr = "";
string WriteData = "";
string SendData = "";
string Addr = ""; //数据地址
string RTUaddr = ""; //PLC 站号
Addr = textBox1.Text.ToString().Trim();
RTUaddr = comboBox2.Text.Trim();
SendData = textBox2.Text.Trim();
if (serialPort1.IsOpen == false)
{
MessageBox.Show("请打开串口!");
return;
}
SendStr = "@" RTUaddr "WD" Addr SendData; //只读取一个地址的数据,修改最后的数,可一次读取多个数据
SendStr = SendStr FCS(SendStr) "*" '\r';
WriteData = COM2CPM2A(SendStr);
}
#endregion
private string COM2CPM2A(string Value2)
{
string weibu="";
char[] SendBuffer = new char[50];
char[] ReadBuffer = new char[50];
for (int i = 0; i < 50;i )
{
ReadBuffer[i] =' ';
}
SendBuffer = Value2.ToCharArray();
serialPort1.Write(SendBuffer,0,SendBuffer.Length);
Thread.Sleep(10);
do
{
Thread.Sleep(5);
} while (serialPort1.BytesToRead < 11); //等待接收所有的数据
Thread.Sleep(20);
serialPort1.Read(ReadBuffer, 0, serialPort1.BytesToRead);
string instring =new string(ReadBuffer) ;
weibu = instring.Substring(5,2);
switch(weibu)
{
case "00":
//MsgBox "正常完成", , "提示信息"
MessageBox.Show( "正常完成!");
break;
case "01":
//MsgBox "在RUN模式下不可执行", , "提示信息"
MessageBox.Show("在RUN模式下不可执行!");
break;
case "02":
MessageBox.Show( "在MONITOR模式下不可执行");
break;
case "04":
MessageBox.Show( "地址越界");
break;
case "0B":
MessageBox.Show("在PROGRAM模式下不可执行");
break;
case "13":
MessageBox.Show( "FCS错误");
break;
case "14":
MessageBox.Show ("格式错误");
break;
case "15":
MessageBox.Show ("入口号数据错误");
break;
case "16":
MessageBox.Show ("命令不支持");
break;
case "18":
MessageBox.Show ("帧长度错误");
break;
case "19":
MessageBox.Show ("不可执行");
break;
case "23":
MessageBox.Show ("用户存储区写保护");
break;
case "A3":
MessageBox.Show("由于数据传送中FCS错误而终止");
break;
case "A4":
MessageBox.Show("由于数据传送中格式错误而终止");
break;
case "A5":
MessageBox.Show( "由于数据传送中入口号数据错误而终止");
break;
case "A8":
MessageBox.Show( "由于数据传送中帧长错误而终止");
break;
default:
MessageBox.Show( "未知错误");
break;
}
return instring;
}
#region 设置PLC运行模式 监视模式
private void radioButton_Enter(object sender, EventArgs e)
{
string SendStr = "";
string ReadStr = "";
string RunModel = "";
RunModel = "03";
if (serialPort1.IsOpen == false)
{
MessageBox.Show("请打开串口!");
return;
}
if(radioButton1.Focused)
{
RunModel = "03";
}
else if (radioButton2.Focused)
{
RunModel = "02";
}
else if (radioButton3.Focused)
{
RunModel = "00";
}
SendStr = "@" comboBox2.Text.Trim() "SC" RunModel; ;
SendStr = SendStr FCS(SendStr) "*" "\r";
ReadStr = COM2CPM2A(SendStr);
}
#endregion
private void button1_Click(object sender, EventArgs e)
{
string SendStr = "";
string ReadStr = "";
if (serialPort1.IsOpen == false)
{
MessageBox.Show("请打开串口!");
return;
}
SendStr = "@" comboBox2.Text.Trim() "TS" "LSLLHD";
SendStr = SendStr FCS(SendStr) "*" "\r";
ReadStr = CPM2A(SendStr);
if (ReadStr == SendStr)
{
MessageBox.Show("与PLC通讯正常!");
}
else
{
MessageBox.Show("通讯异常!" ReadStr);
}
}
private string FCS(String Value)
{
int i, f;
byte[] x;
f = 0;
for (i = 0; i < Value.Length; i )
{
x = ASCIIEncoding.ASCII.GetBytes(Value.Substring(i, 1));
f = f ^ (int)x[0];
}
return f.ToString("X");
}
private string CPM2A(string inStr) //无消息提示发送函数
{
char[] SendBuffer;
char[] ReadBuffer;
int length = 0;
SendBuffer = inStr.ToCharArray();
serialPort1.Write(SendBuffer, 0, SendBuffer.Length);
do
{
Thread.Sleep(5);
} while (serialPort1.BytesToRead < 11); //等待接收所有的数据
Thread.Sleep(20);
length = serialPort1.BytesToRead;
ReadBuffer = new char[length];
serialPort1.Read(ReadBuffer, 0, length);
string instring = new string(ReadBuffer);
return instring;
}
private void button9_Click(object sender, EventArgs e)
{
string SendStr = "";
string ReadStr = "";
string RunModel = "";
if (serialPort1.IsOpen == false)
{
MessageBox.Show("请打开串口!");
return;
}
SendStr = "@" comboBox2.Text.Trim() "MS";
SendStr = SendStr FCS(SendStr) "*" "\r";
ReadStr = CPM2A(SendStr);
RunModel = ReadStr.Substring(7,2);
if (RunModel == "00")
{
radioButton3.Focus();
}
else if(RunModel == "02")
{
radioButton1.Focus();
}
else if (RunModel == "03")
{
radioButton2.Focus();
}
}
private void button8_Click(object sender, EventArgs e)
{
string SendStr = "";
string ReadStr = "";
string ReadData = "";
string AddrWord = "";
string AddrBit = "";
int bitx = 0; //字中查询的位的位置
int datax =0 ; //返回的数据
if (serialPort1.IsOpen == false)
{
MessageBox.Show("请打开串口!");
return;
}
AddrWord = textBox3.Text.Substring(0,4);
AddrBit = textBox3.Text.Substring(4,2);
SendStr = "@" comboBox2.Text.Trim() "RR" AddrWord "0001";
SendStr = SendStr FCS(SendStr) "*" "\r";
ReadStr = CPM2A(SendStr);
ReadData = ReadStr.Substring(7, 4);
bitx = Convert.ToInt16(AddrBit);
datax = Convert.ToInt16(ReadData);
datax = (datax >> bitx) & 0x01;
if (datax == 1)
{
pictureBox1.Image = PLC_COM.Properties.Resources.high;
}
else
{
pictureBox1.Image = PLC_COM.Properties.Resources.low;
}
}
private void button6_Click(object sender, EventArgs e)
{
string SendStr = "";
string ReadStr = "";
if (serialPort1.IsOpen == false)
{
MessageBox.Show("请打开串口!");
return;
}
SendStr = "@" comboBox2.Text.Trim() "KS" "CIO " textBox3.Text.Trim();
SendStr = SendStr FCS(SendStr) "*" "\r";
ReadStr = COM2CPM2A(SendStr);
}
private void button7_Click(object sender, EventArgs e)
{
string SendStr = "";
string ReadStr = "";
string ReadData = "";
if (serialPort1.IsOpen == false)
{
MessageBox.Show("请打开串口!");
return;
}
SendStr = "@" comboBox2.Text.Trim() "KR" "CIO " textBox3.Text.Trim();
SendStr = SendStr FCS(SendStr) "*" "\r";
ReadStr = COM2CPM2A(SendStr);
}