




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本人最近做了一个上位机与欧姆龙PLC通信的系统。与大家分享分享心得吧!废话不多说,先看看实际的效果图吧!由于本人能力有限,请大家多多指正吧!要想做好上位机,就必须搞好通信问题。欧姆龙PLC与上位机通信采用的是Host Link协议。下面就先来介绍介绍Host Link协议。使用Host Link协议要注意以下几点:(1) 通信线的连线,RS232口接线。一般使用无握手信号连线,无握手信号连线仅需要3根线,1根地线,2根信号线:发送线TXD,接受线RXD。(2) 通信参数的设置,一般我们Visual Stdio中选用控件Serial Port,在其属性中选择波特率9600,数据位7位,偶检验,2个停止位。在调试的时候可以用串口助手先进行调试,调试明白了再开始写上位机也不迟。(3) Host Link协议的格式,一般包括起始符,单元号,正文,FCS检验码,结束符。起始符都是,一般你的上位机控制的只有一个下位机,那么你的单元号就是00,正文内容是举一个例子,比如说00WD0100123456*CR,是起始符,00是单元号,WD0100表示向DM区0100,写入数据,写入的就是1234(写的是字符,传入PLC中自动变成16进制的1234),56是FCS校验,FCS校验就是校验码前面所有的字符按其ASCII码异或,结果是两位的。在写上位机之前你也可以现写一个FCS校验器,反正后续的代码总是要写的。*CR是结束符,*比较容易打出来,CR就是回车键,程序中表现时可以用”r”来表示。再比如说00RD0100000156*CR是向DM0100开始的数据区,连续读0001个数据,在这里也就是连续读一个数据。当然你给PLC发一个数据,如果格式正确,PLC也会响应你一个数据,见下表。在这里讲一下返回的状态码,根据状态码,我们可以知道发送的数据有没有出现错误。正常情况下,返回的只能是00,如果不是00,请根据上表,自己修改错误。下面我先把我写的FCS校验码贴出来吧,代码如下: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 异或测试 public partial class Form1 : Form public Form1() InitializeComponent(); private void button1_Click(object sender, EventArgs e) string str = textBox1.Text; Int16 a = new Int16str.Length;/将字符串中的一个个字符,分离出来,并保存 for (int i = 0; i str.Length; i+) ai = Convert.ToInt16(stri); Int16 FCS=0; for (int i = 0; i str.Length; i+) FCS =(Int16)( FCS ai);/异或计算FCS码 string str_FCS;/把计算出来的FCS码再转成字符串 str_FCS = FCS.ToString(x2); textBox2.Text = str_FCS; 写的不太好,就当自己测试的时候用了。特别要注意的是,PLC在运行状态是不能向DM区写数据的。必要的时候我们可以通过向PLC发送不同指令来改变其工作模式。指令如下:模式的改变PROGRAM 00SC0050*MONITOR 00SC0252*RUN 00SC0353*00是站號最基本的东西已经说得比较清楚了,下面把代码也贴出来吧,同样代码也写的比较乱,让内行人见笑了。大体上看一共就用了这几个事件。下面是其具体的代码:本人做的是一个恒压供水的项目,这里只是一个产品的测试,故有很多地方还不严谨,思路不是很清楚,我感觉这也我一周弄出来的,还是比较不错的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;using System.IO.Ports;namespace WindowsFormsApplication2 public partial class Form1 : Form public Form1() InitializeComponent(); System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; /关闭线程检查 private void Form1_Load(object sender, EventArgs e) /窗口载入时,自动搜索可用的串口 string buffer; comboBox1.Items.Clear(); for (int i = 0; i 0xee) label10.BackColor = Color.Red; label8.BackColor = Color.Lime; label9.BackColor = Color.Lime; else if (value 0x10) label10.BackColor = Color.Lime; label8.BackColor = Color.Lime; label9.BackColor = Color.Red; else label10.BackColor = Color.Lime; label8.BackColor = Color.Lime; label9.BackColor = Color.Lime; S_B_Z_S.Text = value.ToString(); /将滑动条的整型值转换成字符串 string value1 = value.ToString(x4).ToUpper(); /FCS校验 int FCS = 0; string Contant;/指令前面固定的字符 Contant = 00WD0102; Int16 a = new Int16Contant.Length;/将字符串中的一个个字符,分离出来,并保存 Int16 a1 = new Int16value1.Length; for (int i = 0; i Contant.Length; i+) ai = Convert.ToInt16(Contanti); for (int i = 0; i value1.Length; i+) a1i = Convert.ToInt16(value1i); for (int i = 0; i Contant.Length; i+) FCS = (Int16)(FCS ai);/异或计算FCS码 for (int i = 0; i value1.Length; i+) FCS = (Int16)(FCS a1i);/异或计算FCS码 string str_FCS;/把计算出来的FCS码再转成字符串 str_FCS = FCS.ToString(x2); string Send_V = Contant + value1 + str_FCS + *r; serialPort1.WriteLine(Send_V); /向PLC的DM201去写1234,能让PLC受上位机控制 serialPort1.WriteLine(00WD0201123454* + r); System.Threading.Thread.Sleep(100); serialPort1.WriteLine(RUN 00SC0353* + r); else private void radioButton1_CheckedChanged(object sender, EventArgs e) if (radioButton1.Checked) /选择编程模式 serialPort1.WriteLine(PROGRAM 00SC0050* + r); /要把PLC DM201清零,让其受自动工作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年生态旅游可持续发展规划与管理旅游目的地生态旅游发展规划报告
- 智能电网在2025年能源行业中的应用与产业生态构建报告
- 智能设备配对管理制度
- 大公司工厂绩效管理制度
- 印刷厂安全生产管理制度
- 婦產科仪器设备管理制度
- 护理制度流程化管理制度
- 客服办公室设备管理制度
- 春季鱼塘开口管理制度
- 产品销售群规定管理制度
- 托克逊县宝源长石矿厂新疆托克逊县桑树园子南山铜矿3万吨/年采矿项目环评报告
- 陕西省西安高中2025届高二化学第二学期期末达标检测试题含解析
- 2025年江西报业传媒集团有限责任公司招聘笔试冲刺题(带答案解析)
- (2025)《公共基础知识》试真题库与答案
- 江西省南昌市第一中学教育集团2023-2024学年八年级下学期数学期末试卷(含答案)
- 瓦斯抽采考试题库及答案
- 2025年班组长个人职业素养知识竞赛考试题库500题(含答案)
- 网络题库财务会计知识竞赛1000题(仅供自行学习使用)
- 教研员考试题库及答案
- 关于卫生院“十五五”发展规划(完整本)
- 地生中考模拟试题及答案
评论
0/150
提交评论