C#实现上位机与欧姆龙PLC的通信文档格式.docx
- 文档编号:20429100
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:13
- 大小:404.74KB
C#实现上位机与欧姆龙PLC的通信文档格式.docx
《C#实现上位机与欧姆龙PLC的通信文档格式.docx》由会员分享,可在线阅读,更多相关《C#实现上位机与欧姆龙PLC的通信文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
下面我先把我写的FCS校验码贴出来吧.
代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
namespace异或测试
{
publicpartialclassForm1:
Form
{
publicForm1()
InitializeComponent();
}
privatevoidbutton1_Click(objectsender,EventArgse)
stringstr=textBox1.Text;
Int16[]a=newInt16[str.Length];
//将字符串中的一个个字符.分离出来.并保存
for(inti=0;
i<
str.Length;
i++)
a[i]=Convert.ToInt16(str[i]);
Int16FCS=0;
FCS=(Int16)(FCS^a[i]);
//异或计算FCS码
stringstr_FCS;
//把计算出来的FCS码再转成字符串
str_FCS=FCS.ToString("
x2"
);
textBox2.Text=str_FCS;
}
写的不太好.就当自己测试的时候用了。
特别要注意的是.PLC在运行状态是不能向DM区写数据的。
必要的时候我们可以通过向PLC发送不同指令来改变其工作模式。
指令如下:
模式的改变
PROGRAM@00SC0050*
MONITOR@00SC0252*
RUN@00SC0353*
"
00"
是站號
最基本的东西已经说得比较清楚了.下面把代码也贴出来吧.同样代码也写的比较乱.让内行人见笑了。
大体上看一共就用了这几个事件。
下面是其具体的代码:
本人做的是一个恒压供水的项目.这里只是一个产品的测试.故有很多地方还不严谨.思路不是很清楚.我感觉这也我一周弄出来的.还是比较不错的
usingSystem.IO.Ports;
namespaceWindowsFormsApplication2
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls=false;
//关闭线程检查
privatevoidForm1_Load(objectsender,EventArgse)
{//窗口载入时.自动搜索可用的串口
stringbuffer;
comboBox1.Items.Clear();
20;
try
buffer="
COM"
+i.ToString();
serialPort1.PortName=buffer;
serialPort1.Open();
comboBox1.Items.Add(buffer);
serialPort1.Close();
catch{}
serialPort1.WriteLine("
MONITOR@00SC0252*"
+"
\r"
//让PLC工作在监视模式下
//serialPort1.WriteLine("
@00WD0201000050*"
privatevoidserialPort1_DataReceived(objectsender,SerialDataReceivedEventArgse)
//串口接受事件所触发执行
if(radioButton1.Checked)
//如果处于运行状态.则接受的字符串只显示在接受数据去
//高级功能中的接受面板不予显示
stringstr=serialPort1.ReadExisting();
//接受到的字符
stringstr1;
//通道1的字符
//stringstr2;
//通道2的字符//该设备没有外接
stringstr3;
//通道3的字符
//stringstr4;
//通道4的字符//该设备没有外接
stringstr_Z_S_PLC;
//转速的字符PLC模块所采集的
str1=str.Substring(8,2);
catch
str1="
;
S_Y_1.Text=str1;
Application.DoEvents();
//System.Threading.Thread.Sleep(100);
str3=str.Substring(12,2);
str3="
S_Y_3.Text=str3;
/******************/
//让线程在此休眠100MS.以便处理
//其他线程的事情。
//这对刷屏.text属性用比较大的作用
S_Y_2.Text="
60"
S_Y_4.Text="
str_Z_S_PLC=str.Substring(15,3);
str_Z_S_PLC="
//str_Z_S_PLC=str.Substring(15,3);
S_B_Z_S.Text=str_Z_S_PLC;
else
stringstr_gaoji=serialPort1.ReadExisting();
textBox1.AppendText(str_gaoji);
privatevoidbutton2_Click(objectsender,EventArgse)
//高级功能中的发送按钮所执行的功能
if(serialPort1.IsOpen)
{
//若串口为打开状态则.发送命令
serialPort1.WriteLine(textBox2.Text);
MessageBox.Show("
数据写入有错"
"
错误"
//打开串口按钮执行的功能
//若串口原状态是开.再按一次则关闭穿口
button1.Text="
打开串口"
ovalShape1.FillColor=Color.Gray;
串口关闭错误"
//若串口状态原先是关闭.则按一次打开串口
serialPort1.PortName=comboBox1.Text;
关闭串口"
ovalShape1.FillColor=Color.GreenYellow;
串口打开错误"
privatevoidtimer1_Tick(objectsender,EventArgse)
//每隔1S.上位机给PLC发送一条指令
//PLC返回一条指令.用于刷新.各采集的数据
if(serialPort1.IsOpen&
radioButton1.Checked)
@00RD0100000354*"
else
privatevoidtrackBar1_Scroll(objectsender,EventArgse)
trackBar1.Minimum=0;
trackBar1.Maximum=0xff;
if(radioButton2.Checked)
{//首先要改变PLC的工作模式
PROGRAM@00SC0050*"
Int16value;
//value用于保存滑动条的当前值
value=(Int16)trackBar1.Value;
//获取value值
//系统状态监测
if(value>
0xee)
label10.BackColor=Color.Red;
label8.BackColor=Color.Lime;
label9.BackColor=Color.Lime;
elseif(value<
0x10)
label10.BackColor=Color.Lime;
label9.BackColor=Color.Red;
S_B_Z_S.Text=value.ToString();
//将滑动条的整型值转换成字符串
stringvalue1=value.ToString("
x4"
).ToUpper();
//FCS校验
intFCS=0;
stringContant;
//指令前面固定的字符
Contant="
@00WD0102"
Int16[]a=newInt16[Contant.Length];
//将字符串中的一个个字符.分离出来.并保存
Int16[]a1=newInt16[value1.Length];
Contant.Length;
a[i]=Convert.ToInt16(Contant[i]);
value1.Length;
a1[i]=Convert.ToInt16(value1[i]);
FCS=(Int16)(FCS^a[i]);
FCS=(Int16)(FCS^a1[i]);
stringSend_V=Contant+value1+str_FCS+"
*\r"
serialPort1.WriteLine(Send_V);
//向PLC的DM201去写1234.能让PLC受上位机控制
@00WD0201123454*"
System.Threading.Thread.Sleep(100);
RUN@00SC0353*"
else{}
privatevoidradioButton1_CheckedChanged(objectsender,EventArgse)
{//选择编程模式
//要把PLCDM201清零.让其受自动工作
//选择运行模式时要把PLC状态转换成运行模式
//再次选择运行状态时.
注释的比较清楚了.就不用我多说了.如果有不清楚的.或对这个比较感兴趣的可以联系我.QQ2584925121.最好是发邮件联系。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 实现 上位 欧姆 PLC 通信
![提示](https://static.bdocx.com/images/bang_tan.gif)