我在做一个项目,有14个阀门,阀门的操作按钮打算放入弹窗进行操作。
由于阀门比较多,所以我打算做一个公共窗口,点击哪个阀门,就把哪个阀门的一些变量赋值进去。
以下是我点击阀门的脚本:
opensubwnd(阀门操作窗口,0,0,200,160,49) 注:这是弹窗
VLV_NAME="#1排泥阀(净水器A)" 注:这是在弹窗中显示阀门名称
VLV_KZL=JA_PNV1_SDK 注:这是阀门的开关指令,等于1时开发出开指令,等于0时发出关指令
VLV_KFB=净水器A排泥阀1开反馈 注:这是阀门的开反馈信号
VLV_GFB=净水器A排泥阀1关反馈 注:这是阀门的关反馈信号
注:左边的是内部变量,右边的是PLC的物理地址。
目前测试,所有的信号都能在弹窗中读出来,但是无法写下去。
弹窗中有一个开关阀按钮,“开阀”按钮做的是VLV_KZL置1的功能,“关阀”按钮做的是VLV_KZL置0的功能。
实际测试下来,点击“开阀”按钮,VLV_KZL会置1,但是JA_PNV1_SDK没有变化;点击“关阀”按钮同样如此。
请问各位大神,我哪里边设置的不对?或者提供更好的方法?
我要实现的功能就是点击“开阀”,能让变量JA_PNV1_SDK置1,点击“关阀”,能让变量JA_PNV1_SDK置0,当然,前提就是我这个窗口是一个公共窗口,不是该阀门的专属弹窗。
工程文件如下:
楼主最近还看过
可能存在的问题:
1. 没找到你说的VLV_KZL=JA_PNV1_SDK脚本,是在PLC里?而且必须写成JA_PNV1_SDK=VLV_KZL才行。这个脚本都没有,JA_PNV1_SDK当然不会在你按下VLV_KZL按钮时改变。
2. 主画面里最上方那两个1和0按钮应该是调试时放上的吧,这两个按钮做的是错的,本身就是不让JA_PNV1_SDK改变,要删掉。
3. 你应该是通过PLC来控制阀门的,JA_PNV1_SDK设备变量,你用的是读写方式,如果PLC程序某个地方逻辑有问题置0了,也是有可能造成JA_PNV1_SDK不因VLV_KZL而改变,所以,这个通道连接最好用只写方式,然后在屏幕里看看按下VLV_KZL按钮后,在屏幕上看看JA_PNV1_SDK的值是否会改变。非要用读写方式也可以,那就要检查你的PLC程序了,对PLC来说,这只是个输入开关量,也就是只读的,设置成读写就必须确保逻辑任何地方不要写变量进去。 这问题同样适用于你那些其他阀门的开关变量。
4. 看工程和描述的功能似乎对不上,我猜你是想每个阀门放个控制按钮,按下后弹出的个阀门控制窗口,然后根据按钮的不同,分别产生不同的开关信号送到PLC,是这样吗?觉得更好做法是在主画面里就放一个按钮,弹出控制窗口,然后再弹出的窗口里分别放置不同的阀门开关按钮来控制。一定要用公共弹窗的方式,就要有变量赋值脚本来区分,如JA_PNV1_SDK=VLV_KZL,你弹窗里没有这些脚本。
回复内容:
对: ozoner 可能存在的问题:1. 没找到你说的VLV_KZL=JA... 内容的回复!
-------------------------
右击阀门,点事件,脚本在mousedown的事件脚本里。
您说的第2点,那个确实是调试用的,我就是想测试下,我JA_PNV1_SDK改变后,VLV_NAME会不会改变,事实证明,会改变的。
您说的第3点:我目前没有连接PLC,都是仿真的,所以还不存在PLC影响JA_PNV1_SDK的可能性。
您说的第4点:是我的备选方案,如果这个问题无法解决,我只能选择您说的这种方法,但是目前还是想试试我目前的做法,这样操作人员可以想开哪个阀门的时候,直接点击该阀门图标就可以弹出操作窗口了。而且我目前的做法适用于阀门特别多的情况,如果有100个阀门的话,还是我目前的方法比较省事。
回复内容:
对: rlfeifei 回复内容:对: ozoner 可能存在的问题:1. ... 内容的回复!
-------------------------
搞了半天只是在仿真运行,你那些变量都是要连到PLC,电脑上仿真模拟运行肯定是不灵的,一定要在真正的触摸屏里调试,而且要连上PLC。 工程里用到硬件就要用,不能靠仿真的。仿真不是真正的调试,和实际会有区别的。除了简单的逻辑和运算以及界面设计,其他从来不用什么仿真来测试,结果一定不可靠。
而且,阀门事件脚本那么写实在搞不清你的控制逻辑是啥, 没有哪个脚本是让开关量JA_PNV1_SDK改变的, 所以原来是什么就还是什么。 你的逻辑看上去感觉又像是由PLC来控制开关,不是屏幕按钮,矛盾多多。 不十分清楚到底想如何操作的。
总之,你的脚本写的看不出什么地方是让JA_PNV1_SDK改变,没有让它改变的指令,当然就不会改变。