首页 上一页 1 2 3 下一页 尾页

用1500plc及hmi制作随机抽奖程序 点击:5812 | 回复:58



小古gg

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:4帖 | 9回
  • 年度积分:385
  • 历史总积分:2078
  • 注册:2018年6月08日
发表于:2021-12-25 01:10:08
楼主

    今年马上结束了,单位又要举行年会,抽奖活动必不可少,制作一个抽奖软件一般都是IT人员的工作,身为一个工控人,怎么能谦让呢,今年用西门子1500plc+HMI制作一个抽奖程序,年会现场没有硬件,于是使用西门子的plcsim仿真加电脑屏幕投影。

使用软件版本TIA15.1

功能:随机抽取人名,随机抽奖,被抽取的人和奖品不在出现,最后可将结果保存在电子表格内,抽奖人数最大99人,

画面一,欢迎界面

1.JPG

画面2-设置人名和奖品画面

画面三-抽奖画面

触摸屏和plc程序代码:(详细可下载附件查看)

//Check_Fild

Dim FSO ,Myfile  'FSO:访问系统文件的一个对象,Myfile:访问文件

Set FSO=CreateObject("scripting.filesystemobject")   '创建访问系统文件

If FSO.FileExists("C:\Storage Card SD\Logs\2021NewYearParty.csv")=True Then     '如果存在文件

Call Write_Date'调用write_date函数

Else

Set Myfile=FSO.CreateTextFile("C:\Storage Card SD\Logs\2021NewYearParty.csv")'利用creat方法创建文件,并将对象返回到Myfile中

Myfile.WriteLine "编号,时间,人名,奖品"'利用writeline函数对新建的文件写入表头

Myfile.Close'关闭文件

Call Write_Date'调用write_date函数

Set Myfile=Nothing'释放对象

End If

Set FSO=Nothing


End Sub


//Delete_File

Dim FSO

Set FSO=CreateObject("scripting.filesystemobject")

If FSO.FileExists("C:\Storage Card SD\Logs\2021NewYearParty.csv")=True Then    '检查如果文件存在,然后

FSO.DeleteFile ("C:\Storage Card SD\Logs\2021NewYearParty.csv") '删除文件

End If

Set FSO=Nothing

End Sub



//Write_Date

Dim FSO,MyFile   'FSO:访问系统文件的一个对象,Myfile:访问的文件

Set FSO=CreateObject("scripting.filesystemobject")   'set语句创建访问系统的对象并用set进行对象引用

Set MyFile=FSO.OpenTextFile("C:\Storage Card SD\Logs\2021NewYearParty.csv",8)'利用OpenTextFile函数打开指定文件,并用Myfile进行对象引用

                                                 'OpenTextFile参数说明:(“文件路径”,打开模式【1:只读 2:写 8:在最后一行写入】)

MyFile.WriteLine MyFile.Line-1&","&Time()&","&SmartTags("HMI_随机人名显示")&","&SmartTags("HMI_随机奖品名显示")

                                                                '将编号、时间、人名、奖品名变量写入到Excel文件中

MyFile.Close'关闭文件

Set FSO=Nothing'释放对象

Set MyFile=Nothing



End Sub

//开机时初始化

IF "FirstScan" THEN

    #抽奖次数 := 99;

    #中奖人 := 101;

    "确认" := 1;

    "复位提示" := 1;

END_IF;


//复位中奖人单和奖品名背景色

IF "抽奖重新开始" THEN

    FOR #i := 0 TO 99 DO

        "HMI".中奖人名变色[#i] := 0;

        "HMI".中奖奖品变色[#i] := 0;

    END_FOR;

IF #人数 > 99 THEN    //抽奖人数不能大于99人

    #人数 := 0;

    #中奖人 := 103;   //103表示人数超上限

    

END_IF;


#R_TRIG_Instance_2(CLK:=#RESET OR "FirstScan" , //数列复位

                   Q=>#R_TRIG_Instance_2.Q);

IF #R_TRIG_Instance_2.Q THEN                    

    FOR #j := 0 TO 109 DO

        #站队[#j] := #j + 1;

    END_FOR;

    #n := 20;

    #中奖人 := 102;       //102代码表示请抽奖

    #抽奖次数 := 0;

    "抽奖" := 0;

END_IF;



FOR #i := 0 TO 99 DO                     //序列重新排队

    IF #站队[#i] > #站队[#i + 1] THEN

        #战队temp := #站队[#i];

        #站队[#i] := #站队[#i + 1];

        #站队[#i + 1] := #战队temp;

    END_IF;

END_FOR;



#R_TRIG_Instance(CLK:=#抽奖,               //点击抽奖

                 Q=>#R_TRIG_Instance.Q);

IF #R_TRIG_Instance.Q THEN

    #中奖人 := #站队[#n];

    #n_timp := #n;

END_IF;


#中奖人名 := "抽奖人名单".中奖人名单[#中奖人 - 1];


#随机人 := #站队[#n];


#R_TRIG_Instance_1(CLK := #确认,               //对抽奖结果确认

                   Q => #R_TRIG_Instance_1.Q);

IF #R_TRIG_Instance_1.Q THEN

    #站队[#n_timp] := 100;

    #中奖人 := 102;           //等待抽奖

    #抽奖次数 := #抽奖次数 + 1;

END_IF;


#n := #n + 1;//随机数,因博图中无随机数,所以采取让n快速自增的方法。

IF #n >= #人数 - #抽奖次数 THEN

  #n := 0;

END_IF;



IF #抽奖次数 >= #人数 THEN     //抽奖次数大于人数时,提示抽奖结束

    #中奖人 := 101;            //101表示抽奖结束

END_IF;



END_IF;

//中奖人单背景变色

IF "中奖人" < 100 THEN

    IF "抽奖" = 1 THEN

        #j := "中奖人";

        "HMI".中奖人名变色[#j] := 1;

    END_IF;

    #n:= "中奖人";

    IF "再给次机会"=1 THEN

      

        "HMI".中奖人名变色[#n] := 0;

    END_IF;

END_IF;


//中奖奖品名背景变色

IF "中奖名" < 100 THEN

    IF "抽奖_JP" = 1 THEN

        #j := "中奖名";

        "HMI".中奖奖品变色[#j] := 1;

    END_IF;

    #n := "中奖名";

    IF "再给次机会_JP" = 1 THEN

        

        "HMI".中奖奖品变色[#n] := 0;

    END_IF;

END_IF;


//HMI显示块

//"随机显示人名"

IF "抽奖" = 0 THEN

    "HMI".随机人名显示 := "抽奖人名单".中奖人名单["随机人" - 1];

ELSE

    "HMI".随机人名显示 := "抽奖人名单".中奖人名单[ "中奖人"- 1];

END_IF;


//"随机显示奖品名"

IF "抽奖_JP" = 0 THEN

    "HMI".随机奖品名显示 := "奖品名单".中奖人名单["随机奖品" - 1];

ELSE

    "HMI".随机奖品名显示 := "奖品名单".中奖人名单["中奖名"- 1];

END_IF;


//检查人名单是否有重名

FOR #a := 0 TO 98 DO

    FOR #b := #a+1 TO 99 DO

        IF "抽奖人名单".中奖人名单[#a] = "抽奖人名单".中奖人名单[#b]

            AND "抽奖人名单".中奖人名单[#a] <> #no_name THEN

            "抽奖人名单".中奖人名 := "抽奖人名单".中奖人名单[104];

            "HMI".相同人名报警 := 1;

      //  ELSE

         

        END_IF;

    END_FOR;

END_FOR;

IF "抽奖人名单".中奖人名 <> "抽奖人名单".中奖人名单[104] THEN

    "HMI".相同人名报警 := 0;

END_IF;


//统计人名单人数

#c := 0;

FOR #d := 0 TO 99 DO

    IF "抽奖人名单".中奖人名单[#d] <> #no_name THEN

        #c := #c + 1;

    END_IF;

END_FOR;

"人数" := #c;


//统计奖品数量

#e := 0;

FOR #d := 0 TO 99 DO

    IF "奖品名单".中奖人名单[#d] <> #no_name THEN

        #e := #e + 1;

    END_IF;

END_FOR;

"奖品数" := #e;


//如果奖品数量低于人数,则报警

IF "奖品数" < "人数" THEN

    "HMI".奖品少报警 := 1;

ELSE

    "HMI".奖品少报警 := 0;

END_IF;


IF #奖品数 > 99 THEN    //奖品数不能大于99人

    #奖品数 := 0;

    #中奖名 := 103;   //103表示数量超上限

    

END_IF;


#R_TRIG_Instance_2(CLK:=#RESET OR "FirstScan" , //数列复位

                   Q=>#R_TRIG_Instance_2.Q);

IF #R_TRIG_Instance_2.Q THEN                    

    FOR #j := 0 TO 109 DO

        #站队[#j] := #j + 1;

    END_FOR;

    #n := 20;

    #中奖名 := 102;       //102代码表示请抽奖

    #抽奖次数 := 0;

    "抽奖_JP" := 0;

END_IF;



FOR #i := 0 TO 99 DO                     //序列重新排队

    IF #站队[#i] > #站队[#i + 1] THEN

        #战队temp := #站队[#i];

        #站队[#i] := #站队[#i + 1];

        #站队[#i + 1] := #战队temp;

    END_IF;

END_FOR;



#R_TRIG_Instance(CLK:=#抽奖,               //点击抽奖

                 Q=>#R_TRIG_Instance.Q);

IF #R_TRIG_Instance.Q THEN

    #中奖名 := #站队[#n];

    #n_timp := #n;

END_IF;


#中奖人名 := "奖品名单".中奖人名单[#中奖名 - 1];


#随机奖品 := #站队[#n];


#R_TRIG_Instance_1(CLK := #确认,               //对抽奖结果确认

                   Q => #R_TRIG_Instance_1.Q);

IF #R_TRIG_Instance_1.Q THEN

    #站队[#n_timp] := 100;

    #中奖名 := 102;           //等待抽奖

    #抽奖次数 := #抽奖次数 + 1;

END_IF;


#n := #n + 1;//随机数,因博图中无随机数,所以采取让n快速自增的方法(大约1s自增一千次)。

IF #n >= #奖品数 - #抽奖次数 THEN

  #n := 0;

END_IF;



IF #抽奖次数 >= #奖品数 THEN     //抽奖次数大于人数时,提示抽奖结束

    #中奖名 := 101;            //101表示抽奖结束

END_IF;


//开机时初始化

IF "FirstScan" THEN

    #抽奖次数 := 99;

    #中奖名 := 101;

    "确认_JP" := 1;

    "复位提示" := 1;

END_IF;



正在下载,请等待……
下载附件需5积分!



楼主最近还看过



fighting2021

  • [管理员]
  • 精华:4帖
  • 求助:4帖
  • 帖子:1023帖 | 7244回
  • 年度积分:1284
  • 历史总积分:18892
  • 注册:2008年11月11日
发表于:2021-12-27 09:10:38
1楼

感谢大神分享

yecao

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 254回
  • 年度积分:68
  • 历史总积分:5511
  • 注册:2003年8月07日
发表于:2021-12-30 10:14:10
2楼

一直想用随机数写个简单的,谢谢了。

芽菜@技术豆

  • 精华:0帖
  • 求助:4帖
  • 帖子:23帖 | 326回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2021-12-30 10:59:29
3楼

太牛了大神!


yecao

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 254回
  • 年度积分:68
  • 历史总积分:5511
  • 注册:2003年8月07日
发表于:2021-12-30 14:43:41
4楼

楼主,用户名和密码是什么?

待我称王 封你为后i

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 34回
  • 年度积分:0
  • 历史总积分:50
  • 注册:2021年5月06日
发表于:2021-12-31 19:43:53
5楼

谢谢楼主分享

小古gg

  • 精华:1帖
  • 求助:0帖
  • 帖子:4帖 | 9回
  • 年度积分:385
  • 历史总积分:2078
  • 注册:2018年6月08日
发表于:2022-01-02 11:21:06
6楼

回复内容:

对:yecao 一直想用随机数写个简单的,谢谢了。     内容的回复:

plc做的都是伪随机

小古gg

  • 精华:1帖
  • 求助:0帖
  • 帖子:4帖 | 9回
  • 年度积分:385
  • 历史总积分:2078
  • 注册:2018年6月08日
发表于:2022-01-02 11:23:16
7楼

回复内容:

对:yecao 楼主,用户名和密码是什么?     内容的回复:

账户密码都是engineer 可以修改成自己的,有疑问可以留言 看到了会及时回复的

小草VIP

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2009年8月08日
发表于:2022-01-02 16:46:22
8楼

大神厉害啊

小古gg

  • 精华:1帖
  • 求助:0帖
  • 帖子:4帖 | 9回
  • 年度积分:385
  • 历史总积分:2078
  • 注册:2018年6月08日
发表于:2022-01-03 15:06:55
9楼

有朋友反应 仿真运行时 点击记录抽奖结果或复位时报错,报警窗口指向了建文件的那行代码,原因可能是电脑安全设置的太高 电脑不让其他软件对c盘建立文件夹,处理方法是人为建立个文件夹,路径为C:\Storage Card SD\Logs

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 83回
  • 年度积分:0
  • 历史总积分:83
  • 注册:2008年1月20日
发表于:2022-01-06 12:46:25
10楼

2022年钱包鼓鼓,国泰安康!

=晴天=

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 15回
  • 年度积分:0
  • 历史总积分:45
  • 注册:2018年10月31日
发表于:2022-01-07 09:45:45
11楼

大神厉害啊

laoge

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 145回
  • 年度积分:0
  • 历史总积分:142
  • 注册:2021年12月10日
发表于:2022-01-10 20:38:01
12楼

学习了,感谢大神!

就这样毁了

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 22回
  • 年度积分:30
  • 历史总积分:285
  • 注册:2018年10月17日
发表于:2022-01-19 19:56:50
13楼

这个好,支持下!  新手必读葵花宝典,太强了

silky_56

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 1828回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2003年8月15日
发表于:2022-01-22 18:37:48
14楼

感谢楼主分享!

laoge

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 145回
  • 年度积分:0
  • 历史总积分:142
  • 注册:2021年12月10日
发表于:2022-01-26 08:57:57
15楼

谢谢分享,下载学习一下。

Lonely_99

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2508回
  • 年度积分:0
  • 历史总积分:115
  • 注册:2014年10月29日
发表于:2022-01-26 10:29:18
16楼

感谢大神分享

何涛

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 275回
  • 年度积分:25
  • 历史总积分:111
  • 注册:2020年9月26日
发表于:2022-01-27 13:11:23
17楼

大神厉害呀,谢谢分享

小古gg

  • 精华:1帖
  • 求助:0帖
  • 帖子:4帖 | 9回
  • 年度积分:385
  • 历史总积分:2078
  • 注册:2018年6月08日
发表于:2022-02-10 15:54:25
18楼

有朋友下载后编译出错,原因可能是博图版本低导致,hmi用到了vb,博图高级版及以上才支持vb

lizhendongg

  • 精华:0帖
  • 求助:1帖
  • 帖子:12帖 | 482回
  • 年度积分:307
  • 历史总积分:2109
  • 注册:2016年9月12日
发表于:2022-02-11 16:51:01
19楼

太好了,谢谢了

wqwww520

  • 精华:0帖
  • 求助:0帖
  • 帖子:16帖 | 390回
  • 年度积分:44
  • 历史总积分:1806
  • 注册:2011年10月04日
发表于:2022-02-12 08:52:14
20楼

感谢大神分享


热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 3 下一页 尾页