浙大中控站间通讯学习标注版_第1页
浙大中控站间通讯学习标注版_第2页
浙大中控站间通讯学习标注版_第3页
浙大中控站间通讯学习标注版_第4页
浙大中控站间通讯学习标注版_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、控制方案的设计控制方案的设计高级组态维护培训班一、编程小案例两种方法的比较:组态中实现:精度高程序中实现:灵活控制站间的数据交换控制站间的数据交换 对于一个较大的系统,往往无法做到将程序需要调用的位号集中在一个控制站中。这里,就需要进行数据的站间调用。控制站间的数据交换 为了实现在控制站间交换数据,每个控制站开辟了一片共享数据区,用以存放共享数据。数据区内有128*4个字节描述为 LONG g_msg128 (在SCControl中数据类型为DWORD)。为了最灵活经济的使用这片数据区,系统定义了一系列函数处理各种数据类型从数据区的放入和取出。通过sendmsg和getmsg执行发送和接收工作

2、。 控制站间的数据交换 假如现在系统中有4个控制站,其中2号站需要调用1号站的一些数据,那么,让我们一起来看看实现数据交换的步骤控制站间的数据交换 首先,在1号站内编制一段程序,通过程序把需要被调用的数据存放在本站点的数据共享区中,然后把这些共享数据发送到系统的过程控制网上。 这一次的数据发送是采用广播式的发送,也就是不特别指明发送到哪一个控制站中。 以上为被调用数据的站点上进行的操作。控制站间的数据交换 接着,在接受数据的2号控制站中我们也要编制一段程序,将指定的1号控制站发送的数据接收到本站点中。 接收过来的数据可以在本站点中任意使用。控制站间的数据交换 例子:地址为2的控制站中有以下的一

3、些数据需要在地址为4的控制站中使用,这些数据分别是:地址2号控制站中氧化炉温度TI-101,空气流量FI-101,反应罐液位LI-101,电机1状态DI-101,电机2状态DI-102,电机3状态DI-103,电机4状态DI-104。如何实现? 控制站间的数据交换 根据系统规定,模拟量位号在系统内以2字节的半浮点(sfloat)数据类型存放,开关量以布尔(bool)数据类型存放。对于g_msg变量,每一个g_msg分别可以利用它的高16位和低16位存放2个半浮点型或整型的2字节变量;若是布尔型的数据,g_msg的每一位可以存放一个布尔量,也就是每个g_msg变量可以存放32个布尔量(开关量);

4、对于像浮点型(float)这样的本身就占用4个字节的变量,每个g_msg只能存放一个。控制站间的数据交换 经分析,需要发送的数据有模拟量位号3个,开关量位号4个。 在这里,根据题目要求,我们使用两个g_msg变量,其中的一个g_msg存放题目中要求的2个模拟量位号,正好占用了4个字节,另一个g_msg存放题目中的另一个模拟量位号(2个字节)和4个开关量(4位)。 控制站间的数据交换发送: 那么,在地址为2的控制站中,编写一段程序,程序中,将个模拟量和个开关量分别存放在个g_msg变量中,为了方便起见,程序中使用了g_msg0和g_msg1 。然后将这两个g_msg发送出去。控制站间的数据交换

5、Setsfloat函数是向长整数中放sfloat数据的函数。 y=setsfloat(长整型数据,半浮点数据,或); 长整型数据为被写的数据源, 半浮点的数据为所需存放的数据, 表示在长整型数据的低位上存放数据, 表示在长整型数据的高位上存放数据。 函数运算的结果就是向长整数中放sfloat数据。控制站间的数据交换 Setbit函数是向长整数中放bool数据的函数。 y=setbit(长整型数据,bool数据,0、131); 长整型数据为被写的数据源, bool数据为所需存放的数据, 0、131表示在长整型数据的哪一位上存放数据, 函数运算的结果就是向长整数中放bool数据。控制站间的数据交换

6、 Sendmsg为设置向其他控制站发消息的数目的函数。 sendmsg(所需发送msg的数量);控制站间的数据交换g_msg0 = 0;g_msg1 = 0;g_msg0 = setsfloat( g_msg0 , _TAG(TI-101).PV, 0); g_msg0 = setsfloat( g_msg0 , _TAG(FI-101).PV, 1); g_msg1 = setsfloat( g_msg1 , _TAG(LI-101).PV, 1); g_msg1 = setbit( g_msg1 , _TAG(DI-101).PV, 0); g_msg1 = setbit( g_msg1

7、, _TAG(DI-102).PV, 1); g_msg1 = setbit( g_msg1 , _TAG(DI-103).PV, 2); g_msg1 = setbit( g_msg1 , _TAG(DI-104).PV, 3); sendmsg(2);控制站间的数据交换 SETSFLOST模块的功能是在输入的32位DWORD型变量的指定位置设置16位的SFLOAT值,再赋给输出值。其中,SFLOAT型在计算机中以定点法存储,在指定位置设置后,整体以DWORD型传送。控制站间的数据交换输入引脚X上连接了一个DWORD变量,输入引脚SF上连接的就示需要在其他站点上被调用的数据位号,输入引脚SE

8、RIAL上连接的数字表示该半浮点位号在双字的g_msg变量中存放的位置序号(0表示放在低16位,1表示放在高16位)。将所需的数据存储在DWORD变量指定位置后,将数值改变后的DWORD变量从输出引脚Y输出。 SETBIT模块的功能与前面的模块类似,是在输入的DWORD型值的指定位置设置开关数据,再赋给输出值。也就是,在已存在的DWORD型值的某一位上设置开关数据,其余不变,然后输出。控制站间的数据交换输入引脚X上连接了一个DWORD变量,输入引脚Q上连接的就示需要在其他站点上被调用的数据位号,输入引脚SERIAL上连接的数字表示该布尔型位号在双字的g_msg变量中存放的位置序号(0表示放在最

9、低位,31表示放在最高位)。将所需的数据存储在DWORD变量指定位置后,将数值改变后的DWORD变量从输出引脚Y输出。SENDMSG模块的功能是通知发送消息的个数。SIZE定义消息的个数,消息内容放在g_msg中。控制站间的数据交换控制站间的数据交换接收: 接着我们需要在接受数据的站点地址4号控制站编写接受数据的程序。本站点需要接受的数据就是地址2号控制站发送出来的两个g_msg变量g_msg0和g_msg1 。 控制站间的数据交换Getmsg为从其他控制站取消息的函数。y = getmsg(控制站地址,所接收的msg号);控制站间的数据交换 Getsfloat为从长整数中取半浮点数的函数。

10、y= getsfloat(长整型数据, 或); 长整型数据为取数据的数据源,一般的,就是我们从其它控制站中取来的数据。 表示从长整型数据的低位上取数据, 表示从长整型数据的高位上取数据。 控制站间的数据交换 Getbit函数是从长整数中取BOOL数据的函数。 y=getbit(长整型数据, 0、131); 长整型数据为取数据的数据源,一般的,就是我们从其它控制站中取来的数据, 0、131表示从长整型数据的哪一位上取数据。控制站间的数据交换 long msg0,msg1;sfloat TI101,FI101,LI101;bool DI101,DI102,DI103,DI104;msg0=getm

11、sg(2,0);msg1=getmsg(2,1);TI101=getsfloat(msg0,0);FI101=getsfloat(msg0,1);LI101=getsfloat(msg1,1);DI101=getbit(msg1,0);DI102=getbit(msg1,1);DI103=getbit(msg1,2);DI104=getbit(msg1,3);控制站间的数据交换GETMSG模块的功能是从其他控制站取传送过来的消息。STATION引脚为控制站号,填写控制站的地址。SERIAL引脚为消息序号,填写所接受的msg序号。MSG引脚输出的是接受到的消息。控制站间的数据交换 GETSFLO

12、ST模块的功能是从输入的32位DWORD型值的指定位置取16位的SFLOAT型值。其中,在计算机中,SFLOAT型用定点表示法表示。SERIAL=0,取低16位;SERIAL=1,取高16位。 控制站间的数据交换输入引脚X上连接了一个DWORD变量,即为取数据的数据源。输入引脚SERIAL上连接的数字表示从双字的变量中取半浮点数的位置序号(0表示从低16位取数,1表示从高16位取数)。取出的半浮点数从输出引脚Y输出。 GETBIT模块的功能与前面的模块类似,是从输入的DWORD型值的指定位置取BOOL数 。控制站间的数据交换输入引脚X上连接了一个DWORD变量,即为取数据的数据源。输入引脚SE

13、RIAL上连接的数字表示从双字的变量中取布尔数的位置序号(0表示从最低位取数,31表示从最高位取数) 。取出的布尔数从输出引脚Q输出。控制站间的数据交换控制站间的数据交换 数据从网络上接收到本控制站后,通过上面的方法将数据取出来放在指定的变量中以后,在本控制站就可以任意的调用这些数据的实时值了。这就是控制站之间数据调用的全过程。 控制站间的数据交换 数据区内有128*4个字节描述为 LONG g_msg128 (在SCControl中数据类型为DWORD)。通过sendmsg和getmsg执行发送和接收工作。 发送方编程将需要送出的数据送至缓冲区上网,不明确接收方,只管广播发送出去,接收方编程

14、接收。控制站间的数据交换 模拟量是半浮点,占16bit两个字节, g_msg是以4字节为基本单位的,故以上数据可组合成:TI-101点2字节,FI-101点2字节,共4个字节第一单元,LI-101点2字节,4个DI点占1字节,剩下1字节。若是浮点数,则32bit四字节,故半浮点小巧和节约资源,速度快些。例:4#站调用2#站 2#站发送氧化炉温度TI-101空气流量FI-101反应罐液位LI-101电机1状态DI-101电机2状态DI-102电机3状态DI-103电机4状态DI-104 4#站接收氧化炉温度TI-101空气流量FI-101反应罐液位LI-101电机1状态DI-101电机2状态DI

15、-102电机3状态DI-103电机4状态DI-104 数据组合2字节2字节指令g_msg02字节剩下1字节1字节只用了4位,还剩下4位g_msg1发送方发送方控制站间的数据交换剩下12bit可用控制站间的数据交换g_msg0 = 0;定义第1单元,4字节长整型DWORD;g_msg1 = 0;定义第2单元,4字节长整型DWORD;g_msg0 = setsfloat( g_msg0 , _TAG(“TI-101”).PV, 0);将TI-101.pv这个半浮点数放入g_msg0单元的低位,即低16位2字节;g_msg0 = setsfloat( g_msg0 , _TAG(“FI-101”).

16、PV, 1);将FI-101.pv这个半浮点数放入g_msg0单元的高位,即高16位2字节; g_msg1 = setsfloat( g_msg1 , _TAG(“LI-101”).PV, 1);将LI-101.pv这个半浮点数放入g_msg0单元的高位,即高16位2字节;g_msg1 = setbit( g_msg1 , _TAG(“DI-101”).PV, 0);将DI-101.PV放入g_msg0单元的bit0位;g_msg1 = setbit( g_msg1 , _TAG(DI-102).PV, 1);将DI-102.PV放入g_msg0单元的bit1位g_msg1 = setbit(

17、 g_msg1 , _TAG(DI-103).PV, 2);将DI-103.PV放入g_msg0单元的bit2位g_msg1 = setbit( g_msg1 , _TAG(DI-104).PV, 3);将DI-104.PV放入g_msg0单元的bit3位sendmsg(2);发出两个长整型数,广播至网络上广播至网络上。还剩下12个bit可备用.发送方控制站间的数据交换 这张图的功能与上页的语句实现的功能一样,是用功能块图的方式来实现。 以左边的P4-25功能块为例:X=g_msg1 长整型单元号为g_msg1;SF=LI-101 将半浮点数LI-101放入;SERIAL=1 放入高16位;Y

18、 =g_msg1 输出还是g_msg1; 以上边的P4-29功能块为例:X=g_msg1 长整型单元号为g_msg1;Q=DI-104 将布尔量DI-104放入;SERIAL=3 放入bit3单元;Y =g_msg1 输出还是g_msg1;发出两个长整数,广播到网络上。发送方接收方4#站要接收2#站发送出来的两个g_msg变量g_msg0和g_msg1 ,共两个DWORD。控制站间的数据交换接收方 long msg0,msg1; 定义长整数给2个通讯双字; sfloat TI101,FI101,LI101; 定义半浮点数给3个模拟量位号; bool DI101,DI102,DI103,DI104; 定义布尔量给4个开关量位号; msg0=getmsg(2,0); 将网络上广播的2#站的g_msg0捕捉来,赋值给msg0变量; msg1=getmsg

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论