签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
说明下,这个游戏(斗dizhu)是基于我1年多前的移植的,由于时间关系和Js调试编写的不方便,所以部分页面没有做实现。
经典wincc程序的完全效果可以参照我之前的帖子;
在移植中的踩过的一些坑说明,大家参照在做其他wincc unified项目的可以注意下
1、相较之前经典Wincc版本音效功能暂时无法实现,我已经实现能够切换音乐,但是wincc unified中一切换就就静音,所以这个功能暂时没法实现,有知道的大佬告知。
2、由于这个JavaScript脚本博途自带的函数有些有使用限制(却没有说明),加之有些错误没法再编译阶段报出来,虽然有代码片段功能,却没代码自动补全,写代码和调试速度真心有点慢(高手请忽略)
3、另外在尝试阶段因为直接采用将PLC中的变量拖到HMi变量表中出现一个问题,自动生成的变量中含有“{”或者“}”(也可能是含的“."太多了)(这个没有在验证了)居然在脚本系统中利用Tags这个无法找到相关变量。所以又手工建了不少变量,又重写了部分写好的函数。
4、这个JavaScript大部分是在服务器端执行的,(好像)没有是在客户端浏览器执行的(暂时没有详细验证),这点导致无法做出客户端的差异化。
5、画面中的控件没法组合编组,也没有选中后按水平、按垂直均匀分布;没法在布局中多选。这块增加了代码量
6、计划任务中不支持带有操作画面对象的函数,全局脚本中不支持部分函数(比如系统函数切换画面)。
总的来说感觉wincc unified 流行起来还需要一定时间,不过这个不需要客户端装什么软件真的是香,而且移动端(比如手机、pad)也支持。脚本还支持异步同步,做出来的动画效果应该是比之前经典wincc这些要好不少。
视频演示(wincc unified版):https://www.bilibili.com/video/BV15V411B77a
经典wincc 版本:https://www.bilibili.com/video/BV1cT4y1P7EP
基于上面的2 我中vscode中写了一个demo类以及部分预写代码可以实现代码补全、代码片段、实时报错(这个不是很完善)等功能,比如我输入trace,然后回车即可出现下面的代码,效率还是有所提升
食用方法就是在vscode中先编写代码,然后复制到博途中即可。
演示效果:vscode4winccunifiedgif.wmv
如果大家比较感兴趣,后续我会将这个三个demo分享出来。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1675678&b_id=5&s_id=0&num=12
2、由于这个JavaScript脚本博途自带的函数有些有使用限制(却没有说明),加之有些错误没法再编译阶段报出来,需要有代码片段功能,却没代码自动补全,写代码和调试速度真心有点慢(高手请忽略)
不用放demo。 给大家讲一下思路吧。 比如, 图片怎么布置, 刷新。
有点意思哦,不错不错
不错
我目前使用UNIFEID中遇到一些问题,比如在编译时,提示有错误 ,但是不告知错误在哪,这一点很不方便
另外楼主说的连接PLC变量是不是有问题?我现在还在做画面中,还没有连接PLC变量,希望这块不要有问题。
就是看中了它可以实现多平台访问这点。希望能够稳定
做的很棒,感谢分享
感谢楼主分享
高手啊,见识了
厉害,可以讲一下思路让大家学习学习
我提到的变量问题只是针对使用脚本出现的,普通组态连接变量没有异常。至于查找脚本编译报错这种可以通过这个西家自带RTILtraceViewe来实现部分,在安装目录下.\Siemens\Automation\WinCCUnified\bin\
高手,长见识了。
好吧,大家对思路都比较感兴趣。具体如下
第一部分 PLC端
1 、实现逻辑判定和出牌是否允许全部在PLC端实现,主要函数可以参考这下面这个文件(这个是经典wincc、的,同样适用于wincc Unified版)。
PLC以及WinCC中部分函数说明.pdf,
2、最核心的最主要的就是根据出牌的张数来枚举判定牌的类型,然后返回牌的类型以及为了方便判断大小,利用了一套计算将选择合规的牌进行了和运算。
其他PLC端代码请参照文件,需要注意的是识别牌类型里面我用的背景数据有重复,因为正常你只能是一种张数来判定,不存在既是3张,又是4张。这点算是合理利用,否在在300plc中可能数据块超过大小。
3、洗牌实现原理(FB11)是每次从(剩余)牌堆中随机抽取一张放到新牌堆里面,循环遍历直到将牌堆完全转移到新牌堆里。
4、发牌原理:这个很简单,以为上面洗牌已经随机了所这里采取的直接每人17张一次性到位
5、齐牌:将手牌按照从小到大排序(FB12,采用的冒泡算法)这里排序了是方便玩家查看,和后面计算。
第二部分 Wincc端大部分适用于经典Wincc和UNIfied.(请注意经典Wincc和UNIfied版本中函数名称可能有点不一样,编程语言差异可能函数数量也有差异)
1、wincc (unified)端动态化实现,主要是利用plc端数据结构中牌的状态、以及脚本来实现的。如果不嫌麻烦可以给每一张牌编写脚本,这个效率有点低,所以我没有采用。因为wincc(Unified)不支持运行时动态创建对象和绑定事件,所以我不得不先创建好20*5+3个牌的图形对象。
2、 实际创建过程,我分了5组,每次先创建一个(比如a_0)并在里面写好需要的脚本(每个脚本一模一样)然后直接复制,wincc会自动命名为a_1、a_2、.......
3、经典Wincc版本和UNIfied在创建图片对象时候有点区别,经典Wincc我采用的脚本返回图片,这样我真的能达到只创建一个图片对象,但是Unified我利用脚本返回设置的方式有点问题,所以这里我用了图形列表,导致我这里手动修改了20*5次,还好这个相对简单。
4、这种有个核心的函数GetRowColByObjectName。这个实现根据传进去的对象名称返回Row,Col,其中Row代表玩家或者已出牌。Col代表牌对应的张数。
其他很多函数都依赖比如GetPokerStatusByRowCol等,需要注意的函数实现根据变量的命名来写,且变量命名要有一定规则,否则类似GetPokerStatusByRowCol这类的函数将无任何意义。
5、针对画面布局,经典版本大部分是我手动调整的,因为其支持编组以及水平、垂直均分。但是Unified全部是利用脚本来实现的布局,不支持编组和均分,手动调整略麻烦。
6、画面刷新主要是依赖画面每次加载初次刷新布局,和在属性中周期调用实现,另外每次点击出牌和不出按钮也动态刷新一次。
7、动态显示主要是依赖Row中牌的总张数与Col的值来进行比较,来实现隐藏于显示。
8、至于当前已出和上一轮已出,依赖于PLC数据结构中的loc的值。
9、经典版本的音效实现采用的调用外部程序发送命令来实现。Unified版本未实现
不错,学习了。
学习了,感谢分享。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录