书签 分享 收藏 举报 版权申诉 / 25
上传文档赚钱

类型PC与三菱PLC串口通讯课件.pptx

  • 上传人(卖家):三亚风情
  • 文档编号:2477636
  • 上传时间:2022-04-23
  • 格式:PPTX
  • 页数:25
  • 大小:1.17MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《PC与三菱PLC串口通讯课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    PC 三菱 PLC 串口 通讯 课件
    资源描述:

    1、PC与三菱与三菱PLC串口通讯实例串口通讯实例简介简介PC与PLC之间的通讯,按硬件接口分类主要分为串口通讯和网口通讯:RS-232CRS-422ARS-485UDP串口通讯串口通讯TCP网口通讯目录目录 010203040506三菱PLC数据操作元件三菱PLC元件首地址PLC数据类型和储存格式PC与三菱PLC串口通讯操作SCI与三菱PLC串口通讯流程程序实现 1.三菱三菱PLC数据操作对象元件数据操作对象元件1.三菱三菱PLC操作元件分为位元件和字元件操作元件分为位元件和字元件 位元件主要有:X、Y、M、S、T、C. 字元件主要有:D.2.元件说明元件说明 输入继电器”X”是可编程控制器从外

    2、部的输入开关接受信号的窗口(只能读不能写,输入寄存器必须由外部信号驱动); 输出继电器”Y”是可编程控制器驱动外部负载的窗口; 辅助继电器”M”是可编程控制器内部辅助继电器软元件; 状态”S”是可编程控制器内部状态继电器软元件; 定时器”T”是可编程控制器定时溢出软元件; 计数器”C”是可编程控制器计数溢出软元件; 数据寄存器”D”是可编程控制器保存数据的软元件(FX系列可编程控制器的数据寄存器是16位(最高位是正负位),组合2个寄存器可以处理32位(最高位是正负位)的数值)。2.三菱三菱PLC元件首地址元件首地址读取读取PLC主要内部元件地址如下:主要内部元件地址如下: D:address*

    3、2+1000H; M:address*2+0100H; X:address+0080H; Y:address+00A0H; T:address+00C0H; C:address*2+01C0H; S:address*3; .注意:address为十进制数. 例1:D0的地址为 0*2+1000H算一算:算一算: 1.D123的地址? 2.M40的地址? 3.Y13的地址?1000H+123*2=1000H+F6H=10F6H0100H+40*2=0100H+50H=0150H00A0H+13=00A0H+DH=00ADH3.PLC数据类型数据类型 和储存格式和储存格式数据类型表数据类型表数据类

    4、型代码字长(位)输入范围二进制位bool10或1字节byte80255字word16065535双字Dword320(232-1)字符Char8ASCII码313F带符号的整数int16-3276832767带符号的双字长整型Dint32-231(2-1)实数Real32.2.PLC数据储存格式数据储存格式 整数整数(int型型) 三菱PLC 普通数据为int型(-3276832767) 如: PLC寄存器数据格式:0、1.32766、32767、 32768、 32769、 65535 实际数据: 0、1.32766、32767、-32768、-32767、-1 读取PLC的数据为: 34

    5、30 30 30 38 30 30 30 8000H -32768 浮点数浮点数(real型型32位位) 读取PLC的数据为: 32 33 42 39 46 43 33 44 3DFCB923H 转换成二进制:0011 1101 1111 1100 1011 1001 0010 0011 0:判断正负数(0为正数;1为负数) 011 1101 1:指数 111 1100 1011 1001 0010 0011:数值3.PLC数据类型储存格式数据类型储存格式 21 4 3 2 13.PLC数据类型和储存格式数据类型和储存格式 指数:011 1101 1b=123d 123-127=-4 PLC在

    6、储存数值时,第一位都为1,所以不保存在数据里,在分析数据时要加上1. 数值:1111 1100 1011 1001 0010 0011 =1*1/(24)+1*1/(25)+1*1/(25)+1*1/(25)+1*1/(25)+1*1/(25)+0*1/(25)+.1*/(227) =0.1234 3.举一反三举一反三 1.把12.34转换成PLC写入的数据? 2.把0.79转换成PLC写入的数据?41 31 37 30 34 35 34 3137 30 33 44 34 41 33 464.PC与与PLC串口通讯操作串口通讯操作一.对位元件和字元件状态读操作 发送格式:发送格式: 命令格式:

    7、 STX CMD0 ADD LEN EXT CHK 解释: 起始符 读命令 元件起始位 个数 停止符 校验码 数字代码格式: 0 x02 0 x30 . . 0 x03 . 0 x30是读操作指令; CMDD是读位元件或字元件的4位起始地址,高位先发,低位后发,以ASCII码的格式发送; LEN是一次读取位元件或字元件的字节个数,最多可以读取0 xff个字节的元件,以ASCII码的格式发送; CHK是两位和校验,将CMD0,ADD,LEN,EXT三项进行和累计,将和累计的最低位两位转化为ASCII。4.PC与与PLC串口通讯操作串口通讯操作 响应格式:响应格式: 响应信息格式: STX DAT

    8、A ETX CHK 解释: 起始符 返回的数据 停止符 校验码 数字代码格式: 0 x02 . 0 x03 . DATA为我们前面读取的数据(读取DATA数据时遵循低位先发,高位后发的原则,所以我们解析数据的时候需要注意高低位的转换); CHK位DATA,EXT两项和累计的最后两位转化为ASCII码。例2:读取D2寄存器的数据 读取码:0 x30 D2 的寄存器地址:2*2+1000H=1004H (0 x31、0 x30、0 x30、0 x34) 个数:0 x30、0 x34 校验码:30+31+30+30+34+30+34+03=15C (0 x35、0 x43) 发送数据:0 x02 0

    9、 x30 0 x31 0 x30 0 x30 0 x34 0 x30 0 x34 0 x03 0 x35 0 x43 响应:0 x02 0 x32 0 x34 0 x42 0 x39 0 x46 0 x43 0 x33 0 x44 0 x03 0 x45 0 x34 0.1234 练练手:1.读取D123寄存器的数据? 2.读取Y13的值?02 30 31 30 46 36 30 34 03 37 34 17. 1002 30 30 30 41 44 30 31 03 37 39 返回:02 30 32 03 36 35 0000 1000 4.PC与与PLC串口通讯操作串口通讯操作二.对位元

    10、件和字元件状态写操作 发送格式:发送格式: 命令格式: STX CMD1 ADD LEN DATA EXT CHK 解释: 起始符 写命令 元件起始地址 位数 写入的数据 停止符 校验码 数字代码: 0 x02 0 x31 . . . 0 x03 . 0 x31是写操作指令; DATA是待写入PLC缓冲区的数据,低位先发,高位后发,以ASCII码的形似发送; 其他的和读指令一样。响应格式:响应格式: 返回06,表示写入成功; 返回15,表示写入失败。 例3:把12.23写入D10寄存器里 写命令:0 x31 首地址:10*2+1000H=1014H (0 x31、0 x30、0 x31、0 x

    11、34) 个数:0 x30、0 x34 写入的数据:0 x31、0 x32、0 x41、0 x46、0 x34、0 x33、0 x34、0 x314.PC与与PLC串口通讯操作串口通讯操作校验码:31+31+30+31+34+30+34+31+32+41+46+34+33+34+31+03 =314H (0 x31、0 x34)发送数据:0 x02 0 x31 0 x31 0 x30 0 x31 0 x34 0 x30 0 x34 0 x31 0 x32 0 x41 0 x46 0 x34 0 x33 0 x34 0 x31 0 x03 0 x31 0 x34如果响应反馈是06表示写入成功,否则

    12、写入失败。练练手:1.把1.2写入寄存器D6的的数据? 2.把1写入Y1寄存器中? Y1: 0000 0000 02 31 30 30 41 31 30 31 30 32 03 43 39 02 31 31 30 30 43 30 34 31 32 41 46 34 33 34 31 03 31 345.SCI与三菱与三菱PLC串口通讯流程串口通讯流程一一.设置变量设置变量 写入变量:首地址、写入个数、校验码、发送的数据、接受数据. 读取变量:首地址、读取个数、校验码、读取的数据.二二.把操作把操作PLC的指令赋值给变量的指令赋值给变量 新建一个脚本,把要操作PLC的命令赋值给发送的数据。三三

    13、.发送赋值的变量给发送赋值的变量给PLC 1.新建一个串口算子 设置发送数据的变量、设置发送数据格式:ASCII编码、字符串格式。 2.配置串口参数 波特率:9600 停止位:1 奇偶校验:偶 数据位:7四四.接受接受PLC响应的数据响应的数据 新建一个脚本,解析响应的数据。6.程序实现程序实现一一.读数据操作读数据操作 1.读取设置读取设置 CustomVar.Fx_Raddr=0 /读取首地址 小于255 CustomVar.Fx_Rnum=2 /读取个数 小于16 2.转换成发送数据格式转换成发送数据格式 var s=0201003 /02和03为十六进制ASCII(02H:Ctrl+B

    14、;03H:Ctrl+PauseBreak) var temp= new Array(); /创建一个数组 temp.length=4; /设置数组长度 Ra=(CustomVar.Fx_Raddr*2).toString(16).toUpperCase(); /首地址转换成十六进制字符串 if(Ra.length2) /少于两位补0 Ra=0+Ra; Rn=(CustomVar.Fx_Rnum*4).toString(16).toUpperCase(); /个数转换成十六进制字符串 if(Rn.length2) /少于两位补0 Rn=0+Rn; a=Ra+Rn;6.程序实现程序实现for(i=

    15、0;i4;i+) if(parseInt(a.substr(i,1),16)=9) /09加48;AF加55(0的ASCII码30H,30H转换十进制为48; A的ASCII码41H,41H转换十进制为55) tempi=parseInt(a.substr(i,1),16)+48; else tempi=parseInt(a.substr(i,1),16)+55; a=(48+49+48+3+temp0+temp1+temp2+temp3).toString(16); /数据值累加并转换成十六进制字符CustomVar.Fx_Rchk=a.substr(a.length-2,2).toUppe

    16、rCase(); /取后两位作为和校验CustomVar.Fx_RS=s.substr(0,4)+Ra+Rn+s.substr(4,1)+CustomVar.Fx_Rchk; /发送的字符串6.程序实现程序实现3.转换响应返回的数据转换响应返回的数据 var temp=new Array(); temp.length=CustomVar.Fx_Rnum*8; for(i=0;iCustomVar.Fx_Rnum*8;i+) if(串口_2.DataArray1+i=57) /判断接收的每位数据是否小于等于57 tempi=(串口_2.DataArrayi+1-0 x30).toString(1

    17、6).toUpperCase(); /把接收的数据转换成十六 进制字符串 else tempi=(串口_2.DataArrayi+1-0 x30-0 x7).toString(16).toUpperCase(); for(i2=0;i2CustomVar.Fx_Rnum;i2+) a=temp2+i2*8+temp3+i2*8+temp0+i2*8+temp1+i2*8+temp6+i2*8+ temp7+i2*8+temp4+i2*8+temp5+i2*8; /把字符串累加 CustomVar.Fx_Ri2=HextoReal(a); /调用函数,并赋值赋值 6.程序实现程序实现 /.把取出

    18、的十六进制转换成实属函数 function HextoReal(h) var i3,i4,i5,i6,b,b1,s,e,m,m1; h=h.substr(4,4)+h.substr(0,4); /低四位先发,高四位后发 b=; for(i3=0;i38;i3+) /把十六进制转换成实数 tempi3=parseInt(h.substr(i3,1),16); for(i4=0;i48;i4+) /把实数转换成二进制 b1=tempi4.toString(2); for(i5=b1.length;i54;i5+) b1=0+b1; /补码 b=b+b1; 6.程序实现程序实现 s=b.substr

    19、(0,1); /正负数值 e=parseInt(b.substr(1,8),2)-127; /计算指数 m=1+b.substr(9); /获取数值 m1=0; for(i6=0;i624;i6+) /把二进制数值转换成实数 m1=m1+m.substr(i6,1)*Math.pow(2,-i6)*Math.pow(2,e); /把二进制转换成实数 if(s=1) /判断正负数 m1=-m1; CustomVar.Read_D1=m1; return(m1)6.程序实现程序实现二二.写数据操作写数据操作 1.变量赋值变量赋值 CustomVar.Fx_Waddr=0 /写入首地址 小于255

    20、CustomVar.Fx_Wnum=2 /写入个数 小于16 CustomVar.Fx_W0=12.34 /写入的数据 0表示第一个数据,1表示第二个数据 CustomVar.Fx_W1=0.1234 2.转换成发送数据格式转换成发送数据格式 var s=0211003 /02和03为02H的ASCII(02H:Ctrl+B;03H:Ctrl+PauseBreak) var temp= new Array(); /创建一个数组 temp.length=4+8*CustomVar.Fx_Wnum; / 首地址+个数+8*数据个数 Wa=(CustomVar.Fx_Waddr*2).toStrin

    21、g(16).toUpperCase();/首地址转换成十六进制字符 if(Wa.length2) /首地址字符长度小于2时,在字符前面加0 Wa=0+Wa; Wn=(CustomVar.Fx_Wnum*4).toString(16).toUpperCase(); /个数转换成十六进制字符6.程序实现程序实现 if(Wn.length2) /个数字符长度小于2时,在字符前面加0 Wn=0+Wn;Wv=;for(i3=0;i3CustomVar.Fx_Wnum;i3+) Wv=Wv+RealtoHex(CustomVar.Fx_Wi3); /把要写入的数据转换成十六进制a=Wa+Wn+Wv;n=0

    22、;for(i=0;ia.length;i+) /把字符转换成ASCII码,把ASCII转换成十进制数值 if(parseInt(a.substr(i,1),16)=9) tempi=parseInt(a.substr(i,1),16)+48; /09加48;AF加55(0的ASCII码30H,30H转换十进制为48; A的ASCII码41H,41H转换十进制为55) 6.程序实现程序实现else tempi=parseInt(a.substr(i,1),16)+55; n=n+tempi; /数据值累加a1=(49+49+48+3+n).toString(16); /计算和校验,并转换成十六进

    23、制字符串CustomVar.Fx_Wchk=a1.substr(a1.length-2,2).toUpperCase(); /取后两位值CustomVar.Fx_WS=s.substr(0,4)+a+s.substr(4,1)+CustomVar.Fx_Wchk; /发送的字符串6.程序实现程序实现/.实数转换成十六进制function RealtoHex(n) var bl; bl=false;m2=0; m=Math.abs(n).toString(2); /转换成二进制 for(i=0;i24;i+) m1=m.substr(i,1); if(m1=.) /寻找小数点的位置 bl=tru

    24、e; m2=i; m5=m2-1 m3=m.substr(1,m2-1)+m.substr(m2+1,23-m2); /把小数点去掉 6.程序实现程序实现 if(Math.abs(n)1) /判断绝对值是否小于1; for(i4=0;i4Math.abs(n)&Math.abs(n)1/Math.pow(2,(i4+1) m5=-i4-1; break; /在这个范围内退出 if(m2=1&m.substr(i,1)=1) m3=m.substr(i+1,23); break; /找到“1”退出 6.程序实现程序实现 e=(m5+127).toString(2); for(i1=e.length;i1=0) /确定正负数,正数位0,负数为1 b=0+e+m3; else b=1+e+m3; h=; for(i2=0;i28;i2+) /把二进制转换成十六进制 h=h+parseInt(b.substr(i2*4,4),2).toString(16).toUpperCase(); h=h.substr(4,4)+h.substr(0,4); /先发n+1寄存器,后发n寄存器 h=h.substr(2,2)+h.substr(0,2)+h.substr(6,2)+h.substr(4,2) /先发第四位,后发高四位 return(h);

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:PC与三菱PLC串口通讯课件.pptx
    链接地址:https://www.163wenku.com/p-2477636.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库