MCGS软件与MCS51单片机多机通信的几种方法

合集下载

MCGS与PLC的通信方法

MCGS与PLC的通信方法

MCGS与PLC的通信方法MCGS(Machine Control & Graphic System)是一种人机界面和监控系统,而PLC(Programmable Logic Controller)则是一种可编程逻辑控制器。

MCGS和PLC可以通过多种通信方法实现数据的交互和控制指令的传输。

下面将详细介绍MCGS与PLC的通信方法。

1.RS232串口通信:RS232串口通信是一种常见的MCGS与PLC通信方式。

MCGS和PLC分别通过串口线连接,使用串口通信协议进行数据的传输。

RS232串口通信速率较低,但简单、稳定且易于实现。

2.RS485串口通信:RS485串口通信是一种多点通信方式,适用于多个PLC与一个MCGS之间的通信。

MCGS作为主站,PLC作为从站。

RS485串口通信速率较高,可实现快速数据传输。

3.网口通信:网口通信是一种基于以太网的通信方式,实现了MCGS与PLC之间的远程通信。

通过网口通信,MCGS可以连接到PLC所在的局域网或广域网,并实现数据的实时传输和控制指令的发送。

4.MODBUS通信:MODBUS是一种通用的串行通信协议,常用于MCGS与PLC之间的通信。

MODBUS可以通过RS485串口通信或网口通信实现,支持多种数据类型,包括寄存器读写、线圈状态读写等。

5. OPC通信:OPC(OLE for Process Control)是一种开放的标准,用于实现不同设备和软件之间的通信。

MCGS和PLC可以通过OPC通信实现数据的共享和交互,实现高效的生产监控与控制。

6.移动通信:随着移动互联网的普及,MCGS与PLC之间也可以通过移动通信方式实现远程监控和控制。

通过移动数据通信网络(如4G、5G等),MCGS可以连接到PLC所在的远程设备,并实时获取数据和发送控制指令。

需要注意的是,不同的通信方式适用于不同的应用场景,具体的选择应根据实际需求和系统要求进行。

此外,通信时需确保通信设备的参数设置正确,如波特率、数据位、校验位等。

MCS51系列单片机双机并行互连的实现方法

MCS51系列单片机双机并行互连的实现方法

MCS51系列单片机双机并行互连的实现方法介绍了在同一系统内,MCS51系列两单片机之间采用单向并行通信接口、主从双向并行通信接口、无主从双向并行通信操作实现双机互连的方法,分析了在每一种通信接口工作方式下数据传送的特点。

在三种并行通信接口为单片机应用系统扩充硬件资源的设计提供了新的途径。

由于MCS51系列单片机具有性能稳定、工作可*、价格低廉等特点,因此其应用相当广泛。

一个MCS51系列的单片机(如Atmel89cxx)内部包含有RAM、FLASH ROM、两个或者三个16位的定时器/计数器、一个通用异步串行通信控制器(UART)等多种资源。

但即便如此,在一些相对复杂的单片机应用系统中,仅仅一个单片机资源还是不够的,因此而常常需要扩充I/O接口、定时器/计数器、串行通信接口、RAM、ROM等。

采用通用的标准器件进行扩充是通常的做法,但将单片机本身作为一个通用的扩充器件来使用,也不失为一个好的方法。

在这种情况下,一个系统中就使用了两个或两个以上的单片机,而单片机之间就要通过互连来进行数据通信。

MCS51系列的单片机(以下简称单片机)都带有串口,利用串口进行互连通信极为方便,其各种连接方式在许多书籍和资料上都有介绍,在此不再重述。

但如果系统要求扩充的资源是对外连接的串口,或对相互之间的数据传送有一定的速度要求,则单片机的串口就不能用作系统内两单片机的通信接口了。

所幸的是,单片机的并行端口也能相互连接来进行数据通信。

根据单片机端口内部结构的特点,这些端口的端口线可以直接相连,从而使两单片机之间并行通信接口的实现不用另外的硬件电路设备。

基于这种情况,设计时,可根据不同的使用要求,来采用不同的并行连接方法。

下面介绍在两个单片机之间进行三种并行通信接口的实现方法。

1 单向并行通信接口的实现在应用中,如果只需一个单片机向另一个单片机传送数据,则可以采用单向并行通信接口方式,这种方式较为简单。

图1所示为单向并行通信接口的组成方法。

MCGS与PLC的通讯

MCGS与PLC的通讯

NO:
钟)
任务实施11
钟)任务一.任务要求
运用MCGS构建界面,按下界面上起动按
钮电机启动运行;按下停止,电机停止。

可能出现的问题:
1.程序编写出现问题
2.不会链接动画
3.电机不能起动
教师进行示范对整个过程进行讲解
1.建好动画
学生自己构建界面,
编写程序,
机的控制

行讨论
做好笔记
2.建立实时数据
3.进行数据与动画的链接
4.与PLC进行通讯明关量
5.编写程序
拓展任务.运用变频器对PLC进行控制,要求正转起动时低速,反转时高速。

1.设置变频器参数
2.构建界面
3.链接动画
4.链接PLC
5.编写程序进一步熟悉流程明确程序的编写自行完成任务。

MCGS和PLC设备的通讯的实现及例程

MCGS和PLC设备的通讯的实现及例程

图24 工作台窗口
2013-7-11 32
谢谢大家!
2013-7-11
33
2013-7-11 5
图2 设备组态窗口
2013-7-11 6
单击工具栏上的 工具箱 按钮将弹出如图3所示的设 备工具箱窗口,需要说明的 是,在MCGS中PLC设备是 作为子设备挂在串口父设备 下的,因此在向设备组态窗 口中添加PLC设备前,必须 先添加一个串口父设备,当 直接用串口进行本地通讯时 ,我们添加”串口通讯父设 备”,因此双击其中的串口 通讯父设备,在设备组态窗 口中添加一个串口通讯设备 ,如图4: 图3 设备工具箱
2013-7-11
20
MCGS操作举例
我们现在以一个实验天塔之光开发一个监控制界面为例,整 体介绍一下怎样开发一个MCGS组态监控系统. I/O地址分配情况: 输入 I0.0-------启动按钮 I0.1-------停止按钮
2013-7-11
输出 Q0.0-------L1 Q0.1-------L2 Q0.2-------L3 Q0.3-------L4 Q0.4-------L5 Q0.5-------L6 Q0.6-------L7 Q0.7-------L8 Q1.0------ L9
2013-7-11 23
第二步,在实时数据库中建立如图17的实时数据对象
图17 天塔之光实例的数据对象
2013-7-11
24
第三步,如图18设置串口父设备的通讯参数.
图18 串口父设备设备属性设置对话框
2013-7-11
25
第四步,为PLC设备创建如图19所示的连接通道
图19 天塔之光实例的PLC通道
21
第一步,在图15的工作台窗口中单击”用户窗口”标签,然

组态王与单片机多机串口通信的设计方案

组态王与单片机多机串口通信的设计方案

组态王与单片机多机串口通信的设计1 引言随着工业化要求提高,分布式系统发展以及控制设备与监控设备之间通讯需要,组态软件设计的监控系统逐步普及。

现在组态软件繁多,比如KingVieW(组态王>、MCGS、W inCC等。

KingView软件基于Microsoft Windows XP,NT/2000操作系统.具有友好的人机操作界面、强大的IO设备端口驱动能力,可与各种PLC、智能仪表、智能模块、板卡、变频器等实时通讯。

由于在检测大量模拟量的工业现场使用PLC与组态软件通讯势必增加产品成本。

而单片机接口丰富,与A/D转换模块组合可以完成相同的工作,并且系统可靠、成本低。

2 组态王与单片机的串口通讯方法目前,组态王与单片机的通信多是通过动态数据交换(DDE>或通过自己开发通讯驱动程序完成。

DDE是Windows平台上的一个完整的通信协议,组态王通过该协议与其他应用程序交换数据。

但不可靠和非实时。

而自己开发通讯驱动程序会带来设计困难,增加系统开发周期,可行性不高。

组态王专门提供一种与单片机多机串口通信方法,可满足大多数系统需求。

3 PC机与单片机的硬件接口电路图1为上位PC机与下位单片机80C51的连接电路。

PC机与单片机本身都自带串行通讯接口,但由于在分布式系统中PC机与各单片机的分布不集中,不能利用RS-232通讯传输,只能改用RS-485。

RS-485采用差分式传输信号,最大传输距离为1 219 m.最大传输速率为10 Mb/s.对同时出现的两条信号线A、B的干扰有较强的抑制能力。

当两条线绞在一起时,被通信各种分布参数耦合过来的干扰信号可平均地分配到这两条线上,因此对RS-485的差分式传输线路而言,用双绞线可获得较强的抗干扰能力。

RS-485采用二线与四线平衡传输方式,二线制可实现真正的多点双向通信,但需要在传输线上接电阻(约120 Ω>。

由于80C51系列单片机STC89C52串行接口的,TTL电气特性与RS-485电气特性不相符,STC89C52不能与RS-485直接连接,需要电气转换。

昆仑通态人机界面与单片机通信实战教程二:脚本驱动的设计

昆仑通态人机界面与单片机通信实战教程二:脚本驱动的设计

昆仑通态⼈机界⾯与单⽚机通信实战教程⼆:脚本驱动的设计⼤家好,我是『芯知识学堂』的SingleYork,前⾯给⼤家介绍了“昆仑通态⼈机界⾯与单⽚机通信实战教程⼀:⼯程界⾯的设计”,今天笔者就要来给⼤家介绍“昆仑通态⼈机界⾯与单⽚机通信实战教程⼆:脚本驱动的设其实昆仑通态的软件也⾃带了很多标准设备的驱动,如:西门⼦PLC的驱动、三菱PLC的驱动等,直接加载驱动就可以⽤了,但是对于我们⾃⼰开发的单⽚机板的话,就需要⾃⼰编写驱动了。

⼀说到脚本驱动,⾃然就⽀持标准的modbus协议,也⽀持⾃定义协议,对于我们这些不是很复杂的设备来说,个⼈觉得,没必要去深⼊研究modbus协议,尤其是菜鸟,⾃定义协议可能会更加实⽤,所以,笔者重点给⼤家介绍“⾃动义协议”。

我们先来看⼀下,我们之前设计好的HDMI⼯程:从这个HDMI⼯程中我们可以看到,⼀共有14个输⼊状态、12个输出状态和12个输出控制,其中:14个输⼊状态可以⽤2个字节(BYTE),按位操作来实现状态的显⽰;12个输出状态也可以⽤2个字节(BYTE),按位操作来实现状态的显⽰;12个输出控制,我们可以也可以⽤2个字节(BYTE)来按位控制,也可以⽤12个BYTE来按控制,只是按位操作来控制的话,可能操作会⿇烦⼀些,为了操作简单,我们就⽤12个BYTE来实现控制吧;这样⼀来,我们就可以制定以下通信协议:(1)触摸屏读指令(0x80:⼀次性读取多个数据)格式(⼗六进制):主机发送(触摸屏):帧头(2)+ 长度(1)+ 功能码(1)+ 起始地址(2)+和校验(从长度位开始累加)从机应答(单⽚机):帧头(2)+ 长度(1)+ 功能码(1)+ 数据⼀(输⼊状态⼀:X00-X07)+数据⼆(输⼊状态⼆:X10-X17)+ 数据三(输出状态⼀:Y00-T07))+ 数据四(输出状态⼆:Y10-X17)+和校验(从例:主机发送:37 73 04 80 0000 84从机返回:5A A5 06 80 00 00 00 00 86(2)触摸屏写指令(0x81:写单个寄存器操作)格式(⼗六进制):主机发送(触摸屏):帧头(2)+ 长度(1)+ 功能码(1)+ 寄存器地址(2)+寄存器值(2)+和校验(从长度位开始累加)例:37 73 06 81 0000 0001 88写指令从机就不设置单独的返回指令了,在写完之后,可以通过读指令来查询状态来判断有没有写成功。

51单片机串口多机通信的实现和编程

51单片机串口多机通信的实现和编程

51 单片机串口多机通信的实现和编程
一、51 单片机的主从模式,首先要设定工作方式3:(主从模式+波特率可变)
SCON 串口功能寄存器:SM0=1;SM1=1(工作方式3)
注:主机和从机都要为工作方式3。

【工作方式2 (SM0 SM1 :1 0):串行口为11 位异步通信接口。

发送或接收
一帧信息包括1 位起始位0、8 位数据位、1 位可编程位、1 位停止位1。


送数据:发送前,先根据通信协议由软件设置TB8 为奇偶校验位或数据标识位,然后将要发送的数据写入SBUF,即能启动发送器。

发送过程是由执行任何一条以SBUF 为目的寄存器的指令而启动的,把8 位数据装入SBUF,
同时还把TB8 装到发送移位寄存器的第9 位上,然后从TXD(P3.1)端口输出
一帧数据。

接收数据:先置REN=1,使串行口为允许接收状态,同时还要将RI 清0。

然后再根据SM2 的状态和所接收到的RB8 的状态决定此串行口在
信息到来后是否置R1=1,并申请中断,通知CPU 接收数据。

当SM2=0 时,
不管RB8 为0 还是为1,都置RI=1,此串行口将接收发送来的信息。


SM2=1 时,且RB8=1,表示在多机通信情况下,接收的信息为地址帧, 此时
置RI=1,串行口将接收发来的地址。

当SM2=1 时,且RB8=0,表示在多机通
信情况下,接收的信息为数据帧, 但不是发给本从机的,此时RI 不置为1,。

单片机与昆仑通态通讯

单片机与昆仑通态通讯

/***********************************************备注:modbus RTU协议,rs485通讯单片机为从机PLC或者PC为上位机*********************************************/#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit rx_led=P0^0;//接收指示灯sbit tx_led=P0^1;//发送指示灯sbit ctrl_485=P3^2;//485接发发送转换控制sbit dm=P1^4;sbit wm=P1^5;sbit led_cs=P1^6;sbit b7=P2^7;//波特率设置位unsigned int crc=0;uchar sendBuf[20],receive_count=0,a[10];uchar send_count= 0,send_num=0,addr_dip=0;uchar aaa,bbb;uint crc16(unsigned char *puchMsg, unsigned int usDataLen);void beginsend(void);void check_modbus(void);void display(uint date);void delay(uint z);uchar code duan[]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7C,0x39,0x5E,0x79,0x71 };//此数组为!!! 0~9 A B C D E F !!!uchar code wei[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};//此数组表示数码管显示的位数void display(uint date) //num 表示在第几位显示words 表示显示的字符{P2=duan[date/100];P1=wei[0];delay(1);P1=0xff;P2=duan[date%100/10];P1=wei[1];delay(1);P1=0xff;P2=duan[date%10];P1=wei[2];delay(1);}/*************延时*****************/void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=113;y>0;y--);}/************串口初始化*****************/ void uart_init(void){TMOD=0x20;//定时器1,模式2SCON=0x50;//串口通讯方式1TH1=0xfd;//波特率9600TL1=0xfd;if(b7==1)PCON=0x00;elsePCON=0x80;TI=0;//发送中断标志位清零RI=0;//接收中断标志位清零TR1=1;//启动定时器1EA=1;ES=1;}/**************定时器0初始化**************/ void timer0_init(void){TMOD=TMOD&0xf0;TMOD=TMOD|0x01;TH0=0; //16位定时计数器TL0=0;ET0=1; //允许定时器中断}void main(void){dm=0;wm=0;led_cs=1;uart_init();timer0_init();ctrl_485=0;//先置为接收while(1){RI=0;delay(1);rx_led=1;tx_led=1;if(P2^0==0)bbb++;if(bbb==10)aaa++;display(aaa);}}void beginsend(void){ctrl_485=1; //开始置位发送状态 TI=0;send_count = 0;SBUF = sendBuf[0];send_num--;}void time0() interrupt 1///定时器中断{TR0=0;RI=0;check_modbus();receive_count=0;}void ser() interrupt 4{if(TI){if(send_count < send_num){TI=0;tx_led=0;SBUF = sendBuf[++send_count]; }else{receive_count=0;ctrl_485=0;TI=0;}else if(RI){RI=0;rx_led=0;TR0=1;a[receive_count++]=SBUF;TH0=0xf4;TL0=0x1e;}}void check_modbus(void){uchar di,addr;if(receive_count>7)////////////////////address 03 00 00 00 01 crc crc{receive_count=0;crc=crc16(a,6);addr=1; //仪表栈号设置为1// addr=P2>>4;// addr=~(addr&0x0f);// addr=addr&0x0f;// di=~(P2&0X0f);// di=di&0x0f;di=aaa;if(a[0]==addr&&a[1]==0x03&&(crc==((a[7]&0x00ff)|(0xff00&(a[6]<<8))))) {sendBuf[0]=a[0];sendBuf[1]=a[1];sendBuf[2]=0x02; //数据长度为2sendBuf[3]=0x00;//数据高八位为0sendBuf[4]=di; //数据低八位为P2口数据crc=crc16(sendBuf,5); //计算5个数据的CRC校验码sendBuf[5]=crc>>8;sendBuf[6]=crc&0xff;send_num=7;beginsend();}}}/***********************CRC校验*************************/ // CRC 高位字节值表unsigned char code auchCRCHi[260] = {0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40} ;// CRC低位字节值表unsigned char code auchCRCLo[260] = {0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,0x43, 0x83, 0x41, 0x81, 0x80, 0x40} ;unsigned int crc16(unsigned char *puchMsg, unsigned int usDataLen) {unsigned char uchCRCHi = 0xFF ; //* 高CRC字节初始化unsigned char uchCRCLo = 0xFF ; //* 低CRC 字节初始化unsigned long uIndex ; // CRC循环中的索引while (usDataLen--) // 传输消息缓冲区{uIndex = uchCRCHi ^ *puchMsg++ ; // 计算CRCuchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;uchCRCLo = auchCRCLo[uIndex] ;}return (uchCRCHi << 8 | uchCRCLo);}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MCGS软件与MCS51单片机多机通信的几种方法Multi-machineSerialCommunicationMethodbetweenConfigurationSoftwareMCG SandMCS51SCMLiaoningMechanicAndElectricityProfessionTechnologyAcademy InformationInstrumentliunaPostcode:118002[摘要]MCGS是目前较常见的一种工业控制通用组态软件,可以利用它十分方便地构成了分布式系统的监控画面,动态显示控制设备的运行状态、实时、历时曲线和报表、上下限报警等。

在该系统中对于由多个MCS51单片机控制的下位机仪表,其工作由MCMulti-machine Serial Communicat io n Method between Configuration Software MCGS and MCS51 SCM Liaoning Mechanic And Electricity Profession Technology Ac ad emy Information Instrument liunaPostcode:118002[摘要] MCGS是目前较常见的一种工业控制通用组态软件,可以利用它十分方便地构成了分布式系统的监控画面,动态显示控制设备的运行状态、实时、历时曲线和报表、上下限报警等。

在该系统中对于由多个MCS51单片机控制的下位机仪表,其工作由MCGS远程监控,充分利用计算机的资源进行各种管理。

那么对于MCGS与MCS51单片机多机组成的系统如何设计其通信方式,本文介绍几种工程中可用的通信方法。

[abstract] MCGS is the normal industry configuration software. We can use it to consist apicture of DCS system , it can display the device’s dynamic moving state, the moment 、history curves and reports、high and low alarm。

In the system more MCS51 SCM is under control, the MCGS remote control the SCM, the method can use the pc’s source to manage the matter. So how to design multi-machine serial communication method between configuration software MCGS and MCS51 SCM, the article introduce some communication method.[keywords] Configuration Software VB SCM multi –machine Serial Communication Fuction OLE一、引言在工业控制领域中,分布式监控系统常常采用计算机机为上位机、单片机做下位机的系统,这是一种经济、可靠、真观、合理的控制方式。

组态软件MCGS是目前较常见的一种工业控制通用组态软件,是开发工程一非常有效的上位机工具软件,下位机采用单片机来开发的仪表,则具有计量精度高,功耗低,稳定可靠,成本低等特点。

组态软件MCGS与MCS51单片机的通迅方法一般有三种:一、单片机通过PLC、采集板卡、智能模块等设备实现通信;二、通过采用VB编制通信服务程序,利用串口通讯控件与单片机进行多机通信, 利用OLE功能在服务程序和MCGS之间进行数据交换,从而实行了MCGS与单片机的多机通信。

;三、通过使用MCGS嵌入版的串行口通迅函数进行PC机与单片机多机通信。

前者实现简单,只需对的PLC或板卡做相应的设置即可;而后两种经济实用,省去了PLC、板卡、智能模块等设备,节约了资金,但是需要有一定的编程知识。

二、通信方法1. PLC、板卡、智能模块方式本文的实例为PC上位机与一级下位机OMRON系列PLC的通信。

它与计算机之间的通信采用的是串行通信。

PLC是以微处理器为基础,综合自动控制技术和通信技术发展起来的一种通用的工业自动控制装置,它具有体积小,功能强,程序设计简单,灵活通用,维护方便等一系列的优点,特别是它的高可靠性和较强的适应恶劣工业环境的能力,使它成为大规模控制工程的理想下位机。

OMRON系列中型PLC有SYSMAC C200HX系例,拥有多种接口数字量输入,数字量输出,模拟量输入,模拟输出等,它带有两个RS-232接口,可通过RS-232C /RS-485转接器,挂在RS-485总线上,上位机PC通过转换器与总线相连,即构成具有分布式控制系统的远传数据采集网,其它仪表设备,只要是标准串口都可以类似方式直接或间接与系统连接。

在组态软件MCGS中,欧姆龙PLC设备必须挂接在串口父设备下,串口父设备在“通用设备”目录中。

串口父设备用来设置通信参数和通信端口。

通信参数必须设置成与PLC的设置一样。

否则就无法通信。

欧姆龙PLC常用的通信参数:波特率9600,2位停止位,偶校验,7位数据位。

通迅的主动权在上位计算机,通信时必须由计算机按要求向PLC的HOST LINK 发出通信命令,然后才能由HOST LINK送回响应信号。

2. 自制控件的OLE方式MCGS用Active DLL构件的方式来实现设备驱动程序,通过规范的OLE接口挂接到MCGS中,使其构成一个整体,所以MCGS把设备驱动程序叫做设备驱动构件。

由于设备驱动构件和MCGS运行在同一个进程内,故设备构件的运行速度快,可靠性高,不存在传统DD E方式连接设备驱动时的数据流通不畅和数据传输速度慢等问题。

同时,OLE是一个可扩充的开放标准,用于实现不同软件之间的相互操作,而不管软件本身是使用什么编程语言。

因此,只要遵守MCGS的接口规范,可以使用VB、VC、Delphi等语言来编制MCGS的设备驱动程序。

鉴于Visual B as ic 通用性和简单性,可以使用VB来开发MCGS的设备驱动程序.由于VB5.0以上版本是以二进制码来编译执行程序,其运行速度已接近VC,完全能满足设备驱动构件所需的速度要求。

MCGS设备构件的实现方法和原理与标准VB的ActiveDLL完全一致,但MCGS 规定了一套接口规范,只有遵守这些接口规范的ActiveDLL才能用作MCGS的设备驱动构件。

MCGS设备驱动构件必须具有如下5个属性和8个方法:属性:DevType 标识设备的类型属性:DevStyle 标识设备的类别属性:DevChannel 标识设备的通道个数属性:DevBaseIO 标识设备所用IO的基地址属性:DevIONumber 标识设备所用IO地址的个数方法:GetDevName 读取设备构件类型名称方法:GetDevHelp 调用设备构件的在线帮助内容方法:SetDevPage 调用设备的内部属性页方法:InitNewDev 初试化设备的初始值方法:GetChlType 读取设备构件各通道的数据类型和注释方法:InitDevRun 运行时对设备进行初始化工作方法:RunDevCommand 执行指定的设备命令方法:CollectDevDat 定时操作设备,采集或输出数据开发MCGS设备驱动的过程,实际上就是根据设备的特性和含义来完成8个方法功能的编程过程。

编写通讯子设备驱动程序时,主要使用的就是对串行端口进行操作。

MCGS根据驱动程序的实现特点,充分运用32操作系统多任务多线程的优势,把复杂的对串行端口的设置、初始化和读写操作全部封装在MCGS提供的串行通讯父设备中,在通讯子设备驱动程序中只需调用父设备提供的标准串口读写函数,即可完成各种功能通讯子设备驱动程序的开发编程工作。

常用的函数有:ComOutDat、ComAllInDat、ComOutInDat等。

下面以一个5个通道的接口卡为例,接口卡的跳线设置为:单端输入、0~5V输入量程、数码转换方式为单极性,要求本设备构件能对5个通道的数据进行采集。

利用MCGS的高级开发向导,生成一个独立设备驱动设备的源程序;假定工程名设为:MYPROGRAM,类型名设为:我的工程;把属性DevChannel中的值改为5;把接口GetChlType 中的代码改为:Dim i As LongFor i = 0 To 4Dat(i) = 2msg(i) = "AD输入"+format$(I+1,”0”)Next i在接口CollectDevDat中编制如下程序代码:Dim i as Long, high as Long, l ow as LongFor i=0 to 4Outp mHandle, DevBaseIO, i ‘设置AD通道Outp mHandle, DevBaseIO+1, 0 ‘启动AD转换Do ‘等待AD转换结束If Inp(mHandle, DevBaseIO + 2) < 128 Then Exit DoLoophigh = Inp(mHandle, DevBaseIO + 2) And &HF‘读高4位low = Inp(mHandle, DevBaseIO + 3) ‘读低8位dd(i) =( h * 256 + l)*5000/4096 ‘转换为mV数Next i编译工程,得到DLL文件MYPROGRAM.dll,把该文件拷贝到MCGS的program\drivers目录下,即可完成本设备构件的编程工作。

设备只需连在相应的串行口既可。

在MCGS组态环境中,即可在设备管理窗口中使用新开发的设备。

计算机串行口是计算机和其它设备通讯时最常用的一种通讯接口,一个串行口可以挂接多个通讯设备(如一个RS485总线上可挂接255个ADAM通讯模块,但它们共用一个串口父设备),为适应计算机串行口的多种操作方式,MCGS组态软件特采用在串口通讯父设备下挂接多个通讯子设备的一种通讯设备处理机制,各个子设备继承一些父设备的公有属性,同时又具有自己的私有属性。

在实际操作时,MCGS提供一个串口通讯父设备构件和多个通讯子设备构件,串口通讯父设备构件完成对串口的基本操作和参数设置,通讯子设备构件则为串行口实际挂接设备的驱动程序。

将下位机单片机仪表设备组成单片机主从形式的多机通迅网络,然后将负责采集数据的主机单片机通过RS485总线连接到上位机PC的RS232接口,通过串行口通信方式将数据远传送到上位机,这样可以用计算机直接对远端仪表设备进行数据采集、检测、控制、诊断和故障调试等。

相关文档
最新文档