用C语言实现PLC和上位机的串行通讯. - 选型软件全国巡讲策划方案.docVIP

用C语言实现PLC和上位机的串行通讯. - 选型软件全国巡讲策划方案.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用C语言实现PLC和上位机的串行通讯. - 选型软件全国巡讲策划方案

地址:北京海淀闵庄路3号 清华科技园·玉泉慧谷 电话:010 传真:0108008 用C语言实现PLC和上位机的串行通讯 作 者 :王红辉 关键词: 串行通信???帧???异步通信???寄存器 ? 1? 原理分析 ??? 本文以三菱MECLEC A系列PLC为例,讨论用C语言实现通讯的方法。 ??? (1) PLC串行通信 ??? 三菱A系列PLC串行通信模式,PLC中有2个RS-232异步通信串行接口,能方便用于双机、多机之间的通信,其通信模式有ASCII和RTU两种方式。ASCII模式下,信息是以冒号(:)字符表示帧的开始,CR(回车)、LF(换行)表示帧的结吏,换行符同时也起同步符作用,表示发送方已准备好接受即时应答。RTU(远程终端设备)模式下,帧的同步模拟同步报文来保持,即以字符间隔时间为起始位,若3.5个字符时间未收到新字符或帧尾,则刷新原值且以下-个接受到的字节为地址进行通信数据的接收。RTU报文的帧结构如表1所示。 ??? 本文以RTU模式为例加以分析。RTU模式下,采用标准为八个数据位(低位在前,高位在后)1个奇偶校验位和1个停止位。 ??? (2) UART基本特性分析 ??? 微机实现异步通信是依靠适配器来完成的,而后者又是以UART芯片,即通用异步收发器芯片为核心构成的。 IBM PC的异步通信适配器使用的UART芯片为INS 8250。它是40引脚双列直插式封装的可编程异步通信接口芯片。现将8250中几个寄存器介绍如下(端口地址仅以COM1为例) a) 线路控制寄存器(端口地址3FB) 此寄存器用来设置通信参数。各位作用如下所示: 位(Bit)??? 含义 ?0?字符长度(低位) ?1?字符长度(高位) ?2?停止位位数 ?3?奇偶校验允许 ?4?奇偶性选择 ?5?固定校验位选择 ?6?设置停顿 ?7?除数寄存器访问位 寄存器中字长的选择 位0?位1?字长 ?0?0?5 ?0?1?6 ?1?0?7 ?1?1?8 b) 线路状态寄存器(端口地址3FD) 此寄存器用来获得有关接收和发送数据的信息。各位作用如下所示 位(bit)????? 置为1时的含义 0?字符以接收到且放在接收缓冲寄存器中 1?接收缓冲寄存器中原有数据在读出之前 ?被新来数据破坏 2?输入字符奇偶校验错 3?输入字符停止位错 4?收到停顿信号(BREAK) 5?UART以准备好接受下一个新的待发送字符 6?待传送字符以发出 7?不用 c) 除数寄存器(高位字节端口地址3F9,地位字节端口地址3F8) 波特率??? 十六进制数? 低位字节?? 高位字节 2400 60H?? 0???? 60 4800 18H?? 0???? 18 9600 0CH?? 0???? 0C 2? 应用研究 我们在开发低成本集散系统中,研究了PLC与上位机IBM PC486之间的串行通信。 我们应用的PLC具有模拟量输入和输出以及内嵌PID控制算法等功能。在工程现场,PLC可针对被控制量的变化情况利用内嵌PID控制算法自动完成对调节回路中被控对象的控制。有时上位机需要了解现场参数,并进行PID算法的参数调整,这就要求PLC和上位机之间能进行通信。而数据传送采用的波特率为9600bps,二进制方式。通信口的程序清单如下: CommIni(int Baud Hi, int Baud Lo,int mode) { OutportB(Ox 3fb,Ox,8O);//允许访问除数寄存器,以改变波特率// OutportB(Ox 3f8,Baud Lo);//设置波特率低位// OutportB(Ox 3f9,Baud Hi);//设置波特率高位// OutportB(Ox 3fb,Mode);//设置为读写方式,Mode为1BH时,设置通信口为8个数据位,1个停止位,一个偶校验位// } 通信子程序清单如下: Comm(int IRT,int Comm Num, unsigned char Data[ ]) { int i, Count, j; switch(IRT) { case 1; for (I=0; IComm Num;I ++) { count=0 While(((inportB (Ox3fb)&Ox 01)=0) &(count1000) Count=count+1 If(Count=1000) { sound(10) delay(2) nosound( ); break: } else Comm Datal[1]inportB (Ox3f8); } break; Case2;

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档