技术论坛

移植一个扑克游戏踩过WinCC Unified脚本系统(Javascrip t)的一些坑以及利用VScode编写代码技巧

作者 主题
游侠

经验值: 379
发帖数: 19
精华帖: 0
主题:【分享】移植一个扑克游戏踩过WinCC Unified脚本系统(Javascrip t)的一些坑以及利用VScode编写代码技巧
推荐帖


只看楼主 楼主 2021-01-31 02:14:44

说明下,这个游戏(斗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

至圣

经验值: 23745
发帖数: 3385
精华帖: 52
回复:在移植一个程序中的踩过WinCC Unified脚本系统(Javascrip t)的一些坑以及利用VScode编写代码演示


只看楼主 1楼 2021-01-31 08:51:35
以下是引用keepdoing在2021-01-31 02:14:44的发言 >楼主

说明下,这个游戏(斗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分享出来。

不用放demo。 给大家讲一下思路吧。 比如, 图片怎么布置, 刷新。


不忘初心
以下网友喜欢您的帖子:

  
侠士

经验值: 1800
发帖数: 234
精华帖: 0
回复:在移植一个程序中的踩过WinCC Unified脚本系统(Javascrip t)的一些坑以及利用VScode编写代码演示


只看楼主 2楼 2021-01-31 13:56:53

有点意思哦,不错不错


活到老,学到老
以下网友喜欢您的帖子:

  
游侠

经验值: 318
发帖数: 20
精华帖: 0
回复:移植一个扑克游戏踩过WinCC Unified脚本系统(Javascrip t)的一些坑以及利用VScode编写代码技巧


只看楼主 3楼 2021-02-01 14:07:59

不错

我目前使用UNIFEID中遇到一些问题,比如在编译时,提示有错误 ,但是不告知错误在哪,这一点很不方便


另外楼主说的连接PLC变量是不是有问题?我现在还在做画面中,还没有连接PLC变量,希望这块不要有问题。


就是看中了它可以实现多平台访问这点。希望能够稳定


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 3706
发帖数: 556
精华帖: 0
回复:移植一个扑克游戏踩过WinCC Unified脚本系统(Javascrip t)的一些坑以及利用VScode编写代码技巧


只看楼主 4楼 2021-02-02 08:09:12

做的很棒,感谢分享


 
以下网友喜欢您的帖子:

  
至圣

经验值: 18416
发帖数: 2409
精华帖: 1
回复:移植一个扑克游戏踩过WinCC Unified脚本系统(Javascrip t)的一些坑以及利用VScode编写代码技巧


只看楼主 5楼 2021-02-02 10:51:25

感谢楼主分享


 
以下网友喜欢您的帖子:

  
至圣

经验值: 18926
发帖数: 2108
精华帖: 0
回复:移植一个扑克游戏踩过WinCC Unified脚本系统(Javascrip t)的一些坑以及利用VScode编写代码技巧


只看楼主 6楼 2021-02-02 12:42:22

高手啊,见识了


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 3279
发帖数: 310
精华帖: 8
回复:移植一个扑克游戏踩过WinCC Unified脚本系统(Javascrip t)的一些坑以及利用VScode编写代码技巧


只看楼主 7楼 2021-02-02 17:55:59

厉害,可以讲一下思路让大家学习学习


有事联系邮箱 203161926@qq.com
以下网友喜欢您的帖子:

  
游侠

经验值: 379
发帖数: 19
精华帖: 0
回复:移植一个扑克游戏踩过WinCC Unified脚本系统(Javascrip t)的一些坑以及利用VScode编写代码技巧


只看楼主 楼主 8楼 2021-02-03 07:33:36
以下是引用南方少年在2021-02-01 14:07:59的发言 >3楼

不错

我目前使用UNIFEID中遇到一些问题,比如在编译时,提示有错误 ,但是不告知错误在哪,这一点很不方便


另外楼主说的连接PLC变量是不是有问题?我现在还在做画面中,还没有连接PLC变量,希望这块不要有问题。


就是看中了它可以实现多平台访问这点。希望能够稳定

我提到的变量问题只是针对使用脚本出现的,普通组态连接变量没有异常。至于查找脚本编译报错这种可以通过这个西家自带RTILtraceViewe来实现部分,在安装目录下.\Siemens\Automation\WinCCUnified\bin\


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2317
发帖数: 222
精华帖: 0
回复:移植一个扑克游戏踩过WinCC Unified脚本系统(Javascrip t)的一些坑以及利用VScode编写代码技巧


只看楼主 9楼 2021-02-03 07:46:59

高手,长见识了。


认真学习,努力做事
以下网友喜欢您的帖子:

  
游侠

经验值: 379
发帖数: 19
精华帖: 0
回复:移植一个扑克游戏踩过WinCC Unified脚本系统(Javascrip t)的一些坑以及利用VScode编写代码技巧


只看楼主 楼主 10楼 2021-02-03 08:44:12
以下是引用匆匆又三年在2021-02-02 17:55:59的发言 >7楼

厉害,可以讲一下思路让大家学习学习

好吧,大家对思路都比较感兴趣。具体如下

第一部分 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版本未实现






 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2576
发帖数: 79
精华帖: 2
回复:移植一个扑克游戏踩过WinCC Unified脚本系统(Javascrip t)的一些坑以及利用VScode编写代码技巧


只看楼主 11楼 2021-02-14 09:36:05

不错,学习了。


别低估专业,别高估自己,精进的人生,从敬畏专业开始。
以下网友喜欢您的帖子:

  
至圣

经验值: 10584
发帖数: 1796
精华帖: 0
回复:移植一个扑克游戏踩过WinCC Unified脚本系统(Javascrip t)的一些坑以及利用VScode编写代码技巧


只看楼主 12楼 2021-02-25 22:28:54


            

 学习了,感谢分享。           


 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
移植一个扑克游戏踩过WinCC Unified脚本系统(JavaScript)的一些坑以及利用VScode编写代码技巧
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。