在汇编语言程序设计中,主程序与子程序之间进行参数传递的方法有哪些

在汇编语言程序设计中,主程序与子程序之间进行参数传递的方法有哪些,第1张

汇编语言中主程序与子程序脊如参数传递的方法有以下几种:

1.寄存器法

寄存器法就是樱液启将入口参数和出口参数存放在约定的寄存器中。

优点:埋派数据传递书读快、编程较方便、节省内存单元。

缺点:当传递参数过多时候,由于寄存器个数有限,及寄存器的频繁使用,将导致寄存器不足。

适用:参数较少的子程序

2。约定单元法:

约定单元法顾名思义是吧入口参数和出口参数都放在事先约定好的单元中

优点:不占用寄存器、参数个数任意、每个子程序要处理的数据和送出的结构都有独立的存储单元

缺点:但用一定数量的存储单元,增加编程中对变量定义的难度

3.堆栈法

堆栈法是利用堆栈来传递参数的。

优点:参数不占用寄存器,和存储单元。参数存放在公共堆栈区,处理完后客恢复。参数个数一般不限

缺点:由于参数和子程序混杂在一起,存取参数时候必须小心计算它在堆栈中的位置。要注意断点的保存和恢复。

4.地址表法

这种方法是把参数组成的一张参数表放在某个存储区中,然后只要主程序和子程序约定好这个存储区的首地址和存放的内容,在主程序中将参数传递给地址表,在子程序中根据地址表给定的参数就可以完成 *** 作。

传递方式有:

1、利用寄存器传递。比轿伏如返回单个函数值(整数、布尔值)时,用ax 寄存器。

2、利用栈传递。

3、利用全局变量传递。

4、利用磁盘文件戚帆岩传递。高御

S7-200通信最经济的方式就是采用PPI协议和自由口通信协议。对于S7-200之间进行通信,PPI协议又更适合——它比自由口通信的编程更简单!下面就对这个PPI通信进行说明——以2台S7-200通信为例,做一个实例。

设备配置:1台S7-200 CPU 226CN的PLC、 1台S7-200 CPU 224XP的PLC

硬件连接:原则上需要配备1条紫色的Profibus电缆、2个黑色的Profibus-DP接头。如果需要在PLC通信时对所有在线的PLC进行监控/编程 *** 作而不占用另外的通信口(也就是说,假如所有PLC用端口PROT1进行PPI通信,而现在要对所有PLC依次编程/监控,但又不想占用这些PLC的端口PROT0——端口PROT0可能已作它用),那么必须在其中1台PLC采用带编程口的Profibus-DP接头。所以说,带编程口的Profibus-DP接头在整个网络中只需要一个就可以了。这样,也就可以在某一台PLC处对在网的其它PLC进行编程/监控。

引脚分配:

........S7--200 CPU上的通讯端口是符合欧洲标准EN 50170中PROFIBUS标准的RS--485兼容9针D型连接器。下表列出了为通讯端口提供物理连接的连接器,并描述了通讯端口的针脚分配。下面是S7-200的通信接口——D型9孔母头的引脚定义。

网络电缆的偏压电阻和终端电阻

为了能够把多个设备很容易地连接到网络中,西门子公司提供两种网络连接器:一种标准网络连接器(引脚分配如表7-7所示)和一种带编程接口的连接器,后者允许您在配枝不影响现有网络连接的情况下,再连接一个肢卖敏编程站或者一个HMI设备到网络中。带编程接口的连接器将S7--200的所有信号(包括电源引脚)传到编程接口。这种连接器对于那些从S7--200取电源的设备(例如TD200)尤为有用。两种连接器都有两组螺钉连接端子,可以用来连接输入连接电缆和输出连接电缆。两种连接器也都有网络偏置和终端匹配的选择开关。典型的网络连接器偏置和终端如图所示:

........处于中间节点的从站在不工作时可以断电。

PROFIBUS电缆的接法

........PROFIBUS电缆,紫色,只有两根线在里面,一根红的一根绿的,然后外面有屏蔽层,接线的时候,要把屏蔽层接好,不能和里面的电线接触到,要分清楚进去的和出去的线分别是哪个,假如是一串的,就是一根总线下去,中间不断地接入分站,这个是很常用的方法,在总线的两头的两个接头,线都要接在进去的那个孔里,不能是出的那个孔,然后这两个两头的接头,要把它们的开关置为ON状态,这时候就只有进去的那个接线是通的,而出去的那个接线是断的,其余中间的接头,都置为OFF,它们的进出两个接线都是通的(我觉得德国人真的是和我们的思维不同,我觉得应该是OFF表示关闭吧,他偏设置ON为关闭,搞不懂)。这就是线的接法,接好了线以后呢,还要用万用表量一量,看这个线是不是通的。假如你这根线上只有一个接头,你量它的收发两个针上面的电阻值,假如是220欧姆,那么就是对的,假如你这根线已经做好了,连了一串的接口,你就要从一端开始逐个检查了。第一个单独接线的接口,是ON状态,然后你把邻近的第一个接口的开关也置为ON,那么这个接口以后的部分就断了(出口的线已经被关掉了啊~)现在测最边上,就是单线接的那个接口,之后的东西一直都是测这个接口,测它的收发两个针,和刚才一样,假如电阻是110欧姆(被并联了),那么这段线路就是通的,然后把中间刚才那个改动为ON的接口改回到OFF,然后是下一个接口改为ON,。。。。。。就这么测下去,哪个的电阻不是110欧姆了,就是那一段历枝的线路出问题了。

........PROFIBUS网络电缆(西门子产品号:6XV1 830-0EH10),波特率为100Kbps以下时也可使用普通双绞线(截面积不小0.22平方毫米)。 原则上绿色接RS485信号负(对应Profibus接头的A1)、红色接RS485信号正(对应Profibus接头的B1)。当然,统一反着接也可以——绿色接RS485信号正(对应Profibus接头的B1)、红色接RS485信号负(对应Profibus接头的A1)。不要交叉就行。

Profibus-DP现场总线电缆电缆:用于Siemens公司支持的Profibus-DP总线系统。

●能够对应12Mbps的高速传送,充分发挥PROFIBUS-DP的功能。

●铝箔PET带和高密度编织的双层屏蔽使抗干扰性能出色,通信的传送质量稳定。

●护套使用了柔软性和耐油、耐热性能良好的无铅聚氯乙烯混合物。

●护套的颜色以紫色(RAL001)为标准色。

........德国LAPP UNITRONICO BUS L2/FIP:实心裸铜丝导体,2芯绞合成对,芯线颜色为红+绿。 铝箔屏蔽后加裸铜丝编织,PVC外护套,阻燃,符合VDE 0472第804部份,B类试验(IEC 332.1),紫色(RAL4001)。

........传输速率决定允许的总线电缆最大长度如下:

PROFIBUS-DP 1.5MBit/s=最长200m

(SIMATIC网) 12.0MBit/s=最长100m

工厂通讯处理层 1.0MBit/s=最长200m

2.5MBit/s=最长200m

........上述参数适用于PROFIBUS-DP及PROFIBUS—FMS总线电缆。

........国产普通屏蔽电缆也可以替代PROFIBUS电缆,没有问题,实践证明是可以用的。这样说吧,使用是没有问题的,但是是要有些请提条件的,比如西门子给出的多大速率下对应多大的通讯距离,西门子DP电缆没有问题,但是国产屏蔽电缆就有可能不能用到这么长的通讯距离。要选用质量好的国产屏蔽电缆。

........为了保证信号的稳定要在DP网络的两端接电阻,3和8脚接220电阻,3和VP引脚接390电阻,8脚和DGND脚接390电阻。如果有RS485连接器,就不用自己加终端电阻,RS485连接器中已经自带终端电阻了。

.......国产屏蔽电缆抗干扰的能力应该要若一些,如果是电磁环境很差的地方,例如有交交变频系统等,建议使用profibus-dp电缆。比较重要的系统中,对通讯安全非常严格的话,建议还是使用西门子的profibus-dp电缆。

........上面是官方提到的硬件连接方式, 在实际中,我们可能因为使用情况不同(临时使用、实验使用、同一个电控柜内使用等),手边没有现成的Profibus电缆和Profibus-DP接头。那么,在这种情况下就需要自己制作了。下面就简单说一下制作方法:

1、不带编程口的通信线制作:

........有多少个PLC就买多少个D型9针公头,然后买需要长度的Profibus电缆(实在没有,买屏蔽双绞线也可以,不过抗干扰性没那么好哟;近距离的话,随便用什么线连接都可以,哪怕是2根单股导线,也没问题)。通过电缆,把这些D型9针公头的3脚依次连接在一起,把这些D型9针公头的8脚也依次连接在一起。接线的时候注意点,不要接错了——笔者就因为疏忽大意接错线,导致查了几个小时的故障才发现接线错了(首先怀疑线错了,用万用表打,没发现问题,晕哟,可能是遇见鬼了;最后把线全拆了,重新焊接即恢复正常)。

........如果通信存在问题,那么建议把这些D型9针公头的5脚也接在一起,强制低电位相等。如果有屏蔽线的话,就接上屏蔽线。屏蔽层接到每台设备的外壳并最后接大地。

........至于终端电阻和偏置电阻,距离短的话,就可以不接了。不过,虽然不接,也得了解其原理——终端电阻和偏置电阻如17楼图示。因为PROFIBUS的连接电缆通常采用TYPE A标准,其中的电缆阻抗值最大为165欧,390/220/390的等效电阻是170,是为了实现阻抗匹配。当没有通讯进行时,终端电阻可以保证信号线间的电压差。通常加载在终端的电压为5V,390/220/390使得两信号线点的电压值分别为1.95和3.05V,是理想的静态电压(差分)。

........官方的PROFIBUS接头有进线和出线2个口,采用官方的PROFIBUS接头接线时需要注意:“首站”和“末站”都接进线。

........其实“首站”和“末站”接出也能通信的,但是为了保证通讯的稳定,“首站”和“末站”都要把终端电阻置为ON,这时如果还把“首站”和“末站”接出线,那么“首站”和“末站”都被终端掉了。所以西门子规定:“首站”和“末站”都接进线。

2、带编程口的通信线制作:

........先制作不带编程口的通信线,然后再找一个D型9孔母头,与其中一台PLC的D型9针公头一对一连接:1-1,2-2,3-3,4-4,5-5,6-6,7-7,8-8,9-9。PLC编程电缆(多主站电缆)连接那个D型9孔母头。这样,电脑就可以监控那台PLC了。同时,因为同时也连接到了网内所有PLC,所以也可以监控网内所有PLC。

........注意:无论是否采用西门子原装的总线电缆和接头,如果是不带编程口,那么就只能监控到1台PLC而监控不到在网的其它PLC————例如,1台PLC采用端口PORT1与其他PLC进行通信,而编程电缆连接到了这台PLC的端口PORT0,那么在电脑上是无法监控到在网的其它PLC的。因为,电脑的编程电缆的通信线3,8脚和在网的其它PLC都不存在物理连接嘛。

采用了不带编程口的通信线,PLC插在不是联网那个通信口上监控,只能看到1台PLC:

采用了带编程口的通信线,PLC插在联网那个通信口上监控,能看到在网的所有PLC:

不过,最好只搜索设定的波特率就可以了,不要搜索所有波特率,否则可能出现问题:

要监控在网的哪台PLC,需要打开相应的PLC程序,然后搜索出所有的PLC,再把光标置于相应的PLC上,点击“确定”。然后可以下载和监控那台PLC:

如果电脑上当前PLC程序和“通信”的当前地址的PLC的程序不同,是无法监控该PLC的。

如果电脑上当前PLC程序“系统块”中的地址和“通信”的当前地址不同,那么将无法下载:

下面就来针对dingqw1234网友的要求做一个实例:1台CPU 226CN 作为主站,1台CPU 224XP作为从站,要把CPU 224XP的输入点数据全部传到CPU 226CN里面。

一、硬件连接:

........按照上面所说的方法,用到编程口的通信电缆把CPU 226CN和CPU 224XP的端口PORT1连接起来。当然,这个连接口可以随意组合,不过,根据不同的情况,可能会影响到程序的编制——如果同一台PLC的2个编程口的地址不同(要连接多个通信设备或不同的用途,就需要把2个通信口设置为不同的地址),那么就可能会影响到程序的编制。

二、PLC地址分配:

........编程软件TEP 7 MicroWIN分配的地址固定是0;程序中PLC的默认地址为2,这个我们要修改;因为该系统中没有其它设备,例如人机界面/触摸屏,这里就把CPU 226CN的PROT0口的地址设为1,把CPU 226CN的PROT1口的地址设为2,把CPU 224XP的PROT0口的地址设为3,把CPU 224XP的PROT1口的地址设为4。

........当然,每个PLC的2个端口可以设置为相同的地址,这样的好处是:当一个通信口坏掉时,可以插到另外一个通信口,而不用更改主站PLC的程序。

........把每个PLC的2个端口设置为不相同的地址,笔者认为这样做没有什么好处(如果你知道,请告诉笔者,多谢!),只有坏处:当一个通信口坏掉时,插到另外一个通信口,需要更改与这台PLC通信的主站PLC的程序。不过这个例子中笔者这样分配地址,是做个实验而已。

三、编程:

........针对上面的控制要求,从站CPU 224XP就不需要编程了,只需要把CPU 224XP的PROT0口的地址设为3,把CPU 224XP的PROT1口的地址设为4并下载系统块就可以了。这个步骤就不赘述了,地址设置方法请参阅对CPU 226CN的设置。

........下面是对主站CPU 226CN进行编程和系统块地址设置的步骤。该例中,采用PPI协议进行通信(比自由口通信要简单得多),而且采用指令向导来编程(比直接设置特殊存储器SMB、调用NETR和NETW指令要简单得多)。

........点“设置PG/PC接口”,选中“PC/PPI Cable(PPI)”,点“属性”,在“本地连接”中选择你的编程程电缆的类型——COM1、COM2或是USB;在PPI中勾选“高级PPI”——非西门子官方电缆就不要选了,即使选了也不支持。点击“确定”——“确定”。

........把编程电缆插到每个PLC,对每个PLC设置指定的地址和设置统一的波特率——如果电缆质量不好,非原装电缆,波特率设置不要过高。先点“通信”,然后双击“双击刷新”。搜索到PLC地址后,设置好当前PLC地址。然后修改系统块中的PLC端口,按照预设的地址进行修改。最后下载系统块,把PLC相应端口设置为预设的地址。这个 *** 作比较简单,我就不在贴图赘述了。

........把编程电缆插回到D型9孔母头。点击“通信”,取消勾选“搜索所有波特率”,然后双击“双击刷新”:

把光标移动到要监控/下载的PLC上面。如果要编226CN主站,移到地址2,如上图。

点击“工具”——“指令向导”,选择“NETR/NETW”,点击“下一步”:

选择需要配置的 *** 作数量(这个例子为1),点击“下一步”:

选择主站的通信口(本例为端口1),点击“下一步”:

选择读还是写(本例为读),选择读几个数据(本例读2个数据,IB0-IB1;对于226CN的输入,应当读3个数据,IB0-IB2,共24个输入),选择PLC的地址(本例为4):

说明:

如果您在配置NETR,指定以下内容:

- 数据存储在本地 PLC 中的位置。有效 *** 作数:VB、IB、QB、MB、LB。

- 从远程 PLC 读取数据的位置。有效 *** 作数:VB、IB、QB、MB、LB。

如果您在配置 NETW,指定以下内容:

- 数据存储在本地 PLC 中的位置。有效 *** 作数:VB、IB、QB、MB、LB。

- 向远程 PLC 写入数据的位置。有效 *** 作数:VB、IB、QB、MB、LB。

点击“下一步”:

至此,向导完成。

然后在组程序中调用生成的加密子程序:

然后,下载该程序到PLC中即可。

然后监控程序,如果错误输出为1,那么是有问题的,表示通信不成功。如下图,M0.1的值为1:

只有错误输出为0,通信才是成功的(网络读写成功),如下图:

通信成功以后,重站PLC的输入就被读取到主站的VB存储器中了:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12551893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存