最简单AB高计的4倍频就没有了。不说硬件了。说软件。没有带参数调用,重复的事情变成麻烦。
楼上的W问过我。我也问过他。为了下面这个事情。
下面程序开始
ORGANIZATION_BLOCK 主程序:OB1
TITLE=程序注释
BEGIN
Network 1
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=子程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK 星角启动:SBR1
TITLE=程序目的:
// 仅使用一个触点控制星三角启动的三个输出线圈。达到普遍的转换过程。
// 一个子程序允许通过多次调用,控制多个电机进行启动。
//
// 适用范围:
// 仅建议在主程序中无条件调用。用有条件调用也可,但不推荐。
//
// 程序接口:
// 启动 用这个触点控制电机的运行。
// 设定值 启动时间。单位毫秒。
// 间隔 启动过后,经历间隔时间进入运行。单位毫秒。
//
// 过程值 程序运行需要的一个双字的储存空间。用户不要修改此值。
// 主线圈;启动圈;运行圈。对应的输出,控制接触器。
//
// 执行过程:
// 【启动】端未接通时子程序一直进行内部跳转。
// 【启动】端接通,随即【启动圈】和【主线圈】同时接通。
// 经过【设定值】时间后,启动圈断开,主线圈保留。
// 经过【间隔】时间后,【主线圈】和【运行圈】同时接通。
// 运行线圈接通后,大部分程序也再跳转。消耗很少的执行时间。
// 【启动】端随时断开,输出点即时断开。
//
// 补充说明:
// 本程序免费使用。也许不会适用于你的程序。当由于任何原因不适用时,程序作者不负有责任。请用户仔细复核程序内容,再继续使用。
//
// 程序密码:XJQD
//
VAR_INPUT
启动:BOOL; // 触点接通,电机通电。触点断开,电机断电。
设定值:DINT; // 启动的通电时间。毫秒单位。
间隔:DINT; // 启动断开和运转接通之间的间隔时间。不包含在设定值内。
END_VAR
VAR_IN_OUT
过程值:DINT; // 程序运行需要。
主线圈:BOOL; // 主接触器控制
启动圈:BOOL; // 启动接触器控制
运行圈:BOOL; // 运行接触器控制
END_VAR
VAR
当前值:DINT;
间隔当前:DINT;
END_VAR
BEGIN
Network 1
LDN L0.0
R L13.0, 3
CRET
Network 2
LD L13.0
JMP 0
Network 3
LD SM0.0
BITIM LD9
= L13.0
= L13.1
Network 4
LBL 0
Network 5
LD L13.2
JMP 1
Network 6
LD L0.0
CITIM LD9, LD14
MOVD LD1, LD18
+D LD5, LD18
Network 7
LDD>= LD14, LD1
R L13.1, 1
Network 8
LDD>= LD14, LD18
= L13.2
Network 9
LBL 1
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
END_INTERRUPT_BLOCK
上面程序结束。
他说看看有时间的时候实现给我。
我的程序只是一常规的星三角启动。设定启动时间,启动和运行之间的转换间隙时间安排好输入输出。一次性做好。然后以后再增加电机就增加调用和再安排一次地址就可以了。不要重新编程。100个电机启动都是这样做。
我不排除能做出来,但那应该非常骨灰级了。
№183楼的<芳>不要说谎噢!事实上是我看你于<jdc456>网友的 《三菱PLC 的调用指令如何用啊,请高人指点》主题下跟帖时在问:“有没有人可以用FX仿做西门子的带参数调用程序?”所以我才对你这个问题做了回复。哪里是“楼上的W问过”你哟?
事实证据在此:
我估计117楼的用200只是用到了“肉”里,没有钻到骨头里。
我只(仅仅)用过三菱的1S1N2N西门子的200四种PLC。但是我可以说,我已经来到过这些PLC里面的一个区域,这个区域是一个极少人来到过的地方,起码在编过程的人之中有90%的人不会来到这种地方。
所以我说一句彻底的:200的可以做到的1S1N2N做不到。
三菱用485BD与两线制设备通讯有个问题,三菱的技术叫回拨,不太好用,与四线制设备好像没问题。
总之还是功能上应该说各有所长,看你喜欢用哪个。
在第179楼帖子出来时我就想说点反对的意见,但是顾虑到有的网友会从感情的角度看问题,误解我在吹虚三菱FX系列PLC。我不得不再次重申我本来的观点是各个有影响力的PLC品牌各自都有不同的优点,同时,各自也都有一些不足!
对于三菱的不足我曾经也向经销三菱品牌PLC的经销商揭露过它的不实宣传!譬如2000年的时候,我就揭露过三菱(那时还是进口的日货)FX1S系列PLC的1mS计时器T63是“伪累计型”的;也揭露过FX1S系列PLC《使用手册》中关于“定时中断”功能的虚假宣传!
但是,一码归一码,在对待科学技术的态度上,正确的态度是“实事求是”!
我反对180楼芳季的一些论点!我说三菱FX系列PLC的的脉冲功能比西门子的好!请网友们不要误解我是在为三菱做宣传。我是实事求是的用数据来说话:FX系列里面的低档次的FX1S的脉冲功能指标就要比西门子S7-200系列中的从低到高4个档次分系列CPU221/CPU222/CPU224/CPU226的脉冲输出功能指标要高几倍。FX1s脉冲输出频率范围为1Hz~100000Hz(100KHz),而西门子S7-200CPU221/CPU222/CPU224/CPU226脉冲输出频率最高只能到20KHz;西门子S7-200 CPU221/CPU222/CPU224/CPU226这4个档次的脉冲输出都只有2路,但FX系列里的FX3U有3路最高达100KHz的脉冲输出可以方便简易的实现3轴独立的定位功能。
我不期望每个周期能读到连续的数,因为这是不可能的。我只希望每当读的时候数据是最新鲜的。
可以这样实验。
程序开始,读当前值;用一号循环延迟扫描时间;然后读当前值;用二号循环继续延迟扫描时间;然后读当前值;用三号循环继续延迟扫描时间;执行PLS等指令;执行读当前值;用四号循环继续延迟扫描时间;执行读当前值。然后扫描结束。
这样的实验就最具说服力了。同一个扫描周期不同时间读当前值一共5次,或者可以更多。看有多少个次数读出来的是相同的。如果全部不同。那么我相信刷新是实时的。
我没有做以上实验。但是我有做另外一个实验:
用一个边缘指令调用一个子程序。子程序里面就用8000执行PLS指令。完了。监控当前值。第一次触发执行时脉冲已经按照意愿工作了。可是当前值就是0。一直到脉冲发完了,还是0 。直到我再次触发子程序。才有当前脉冲值出来。
<芳季>『用一个一个边缘指令调用一个子程序。子程序里面就用8000执行PLS指令。完了。监控当前值。第一次触发执行时脉冲已经按照意愿工作了。可是当前值就是0。一直到脉冲发完了,还是0 。直到我再次触发子程序。才有当前脉冲值出来。』实际上是没有遵守三菱的编程规矩或者说是犯了一个错误!
还有<芳季>在64楼提到的在FOR循环指令的运用中设定循环参数,『三菱的一下载就死定了』也是他自己违背了三菱编程的规矩,一个有错误的程序当然是『一下载就死定』啦!!任何编程语言都是有一些规矩的,西门子的编程语言也不例外,它也有它自己的一些语法约定(或称规矩)。假如你不遵守西门子编程语言的规矩,把在三菱编程语言中的某些指令的规矩用到西门子PLC的编程中去同样也会出现差错的!
今天我抽空设计了一个实验片断,可以用来证明FX1s中D8140(同样的方法也可以适用于D8141/D8142/D8143)中的数据是即时刷新的,没有<芳季>说的那个“断点”!
下面是我的实验程序之运行监视图片: