




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
作者 曹志日期 2021-2-版本
1635楼使用 VisualC#实现与TWINCATPLCcontrol变量的通讯概述使用VisualC#软件,实现通过对TWINCATPLCcontrol中的变量(boolintstring类型)进行和修改文件名 文件说PLCPLCcontrolC#C#备注关键字:通过高级语言对PLC免责 通过定时方式来控制PLC程序中变量的读 通过通知方式来控制PLC程序中变量的读 通过c#程序和赋值PLC程序中的1个布尔打开PLC在变量定义区定义一个名称为Bool1的bool运行PLC程序.打开VisualC#2008Express新建Windows.在资源管理器中这个库文件是BECKHOFFC#PLC进行连接和修改在资源管理器中导入库文件,点击,如图1其具体路径为“安装盘:\TwinCAT\ADSApi\.NET\v2.0.50727”;对于ce系统其路径为“安装盘:\TwinCAT\ADSApi\CompactFramework\v2.0”。完毕后如图一所示出现usingTwinCAT.Ads;usingSystem.IO;winform界面设计上画一个textbox和一个在c#编程区2个变publicpartialclassForm1:{privateintprivateTcAdsadsprivatevoidForm1_Load(objectsender,System.EventArgs{ads=newTcAds();{adshbool1=ads}catch(Exception{}}该段程序作用是新建一个TcAds的实例ads并调用该connect方法与(run-time1)进行连接。并使用句柄hbool1接受PLC程序中的BUTTON1TEXT属性改为“read”botton控点击运行中的运切到plccontrol中观察当前bool1.C#Text中显示的bool状态应该与Plc程序中的bool1相同C#winform17将这个button2的textprivatevoidbutton2_Click(objectsender,EventArgs{{ads}catch(Exception{}}19.同时将PLCRUN可以看到当前的PLC状态时C#点击Write切换到PLC程序后,我们发现PLC程序中的BOOL变量的值由TRUE转换成FALSE通过c#程序和赋值PLC程序中的1个整形变1.在PLC1int运行PLC程序C#1个在c#1并使用句柄hint1接受PLC程序中的切回PLCint1Text2中的数值应该和我们在PLCcontrol通过句柄将值赋入到plcin1中ads.WriteAny(hint1,这时候PLC中INT10C#WRITEPLCINTC#程序中通过c#程序和赋值PLC程序中的1个双精度浮点在PLCCONTROL中添加一个LREAL类型的变量运行PLCC#TEXTBOXprivateint并使用句柄hreal1接受PLC程序中的hlreal1=adstextBox3.Text=ads.ReadAny(hlreal1,C#read修改PLC程序中LREALC#READ下面对LREAL类型的变量值进行输C#LREALads.WriteAny(hlreal1,可以看到PLC程序中LREAL通过c#程序读赋值PLC程序中的1个字符在Plccontrol中定义一个stringstr1运行PLC程序在窗体界面设计中添加一个textbox在c#1使用句柄对PLC程序中的hstr1 ads {5..在PLC程序对str1进行赋值C#程序中按readads.WriteAny(hstr1,textBox3.Text,newint[]{5C#textbox3中的字符串输入到PLC程序中write后,可以看到PLCSTRING通过c#程序和赋值PLC程序中的1个结构在PLCCONTROLDatatypes选项卡,新建一个结构体命名TcomplexStruct,如图所示:2个元素,分别是BOOL类型的BOOLVAL和STRING3,在PLC的MAIN函数中这个结构体4,LOG-IN,运行PLC5C#2个TEXTBOX5.在C#程序编写中添加添加一个,并一个结构体类型的类[StructLayout(LayoutKind.Sequential,Pack=1)] publicclassComplexStruct{publicboolboolVal;[MarshalAs(UnmanagedType.ByValTStr,SizeConst=6)]publicstringstringVal="";[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]publicint[]dintArr=newint[4];}C#privatevoidFillStructControls(ComplexStruct{textBox4.Text=structure.boolVal.ToString();textBox5.Text=structure.stringVal;}privateinthcomplexStruct;在Form1_LoadhcomplexStruct=ads 编写从PLC中结构体元素值的C#语句FillStructControls((ComplexStruct)ads点击运行C#这时候我们可以再PLC在C#程序中重新点击read,C#PLCprivateComplexStruct{ComplexStructstructure=newComplexStruct();structure.boolVal=Boolean.Parse(textBox4.Text);structure.stringVal=textBox5.Text;return}ads.WriteAny(hcomplexStruct,GetStructFromControls());\可以看到PLC通过c#程序和赋值PLC程序中的1个数在PLC14个元素的数组变量作为结构体的元素,并赋予初值。publicint[]dintArr=new.编写从PLC中结构体数组值的C#语句textBox6.Text=String.Format("{0:d},{1:d},{2:d},{3:d}", 在C#程序中编写一个将读入的数组元素写到C#ComplexStructstructure=newString[]stringArr=textBox6.Text.Split(newchar[]{','});for(inti=0;i<stringArr.Length;i++)structure.dintArr[i]=在C#点击通过定时方式来控制PLC程序中变量的在C#程序界面设计中,添加2privatevoidbutton3_Click(objectsender,EventArgse){timer1.Enabled=true;button3.Enabled=false;button4.Enabled=true;}privatevoidbutton4_Click(objectsender,EventArgs{timer1.Enabled=false;button3.Enabled=button4.Enabled=}privatevoidtimer1_Tick(objectsender,EventArgs{textBox1.Text=ads.ReadAny(hbool1,textBox2.Text=ads.ReadAny(hint1,typeof(int)).ToString();textBox4.Text=ads.ReadAny(hlreal1,textBox3.Text=ads.ReadAny(hstr1,typeof(String),new{5}点击TIME修改PLC切回C#可以发现在下一个周期内C#通过通知方式来控制PLC程序中变量的 通知方式ADS客户端向ADS服务器发送ADSC#2个BOTTON2个控件的TEXTNotificationONNotificationSystem.CollectionsusingprivateArrayList创建一个ads_AdsNotificationEx方法用来处理变量参privatevoidads_AdsNotificationEx(objectsender,AdsNotificationExEventArgse){TextBoxtextBox=(TextBox)e.UserData;Typetype=e.Value.GetType();if(type==typeof(string)||type.IsPrimitive)textBox.Text=e.Value.ToString();elseif(type==typeof(ComplexStruct))}在FORM_LOAD中处理的函ads.AdsNotificationEx+=newbutton4.Enabled=BUTTON4在通知中将变量到ADS客户privatevoidbutton3_Click(objectsender,EventArgs{{//registerAdsTransMode.OnChange,100,0,textBox2,typeof(int)));AdsTransMode.OnChange,100,0,textBox1,typeof(Boolean)));AdsTransMode.OnChange,100,0,textBox3,typeof(String),newint[]{5})); ",AdsTransMode.OnChange,100,0,textBox5,typeof(ComplexStruct)));}catch(Exception{}button4.Enabled=button3.Enabled=}BUTTON3,BUTTON3,BUTTON4BUTTON4(取消通知方式)的按键响应privatevoidbutton4_Click(object
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙教版八年级下册科学3.1 空气与氧气 第2课时 课件
- 二零二五年度外派至合作伙伴企业的技术培训合同
- 二零二五年度影视演员违约责任合同
- 二零二五年度企业员工供应链管理与物流优化培训协议
- 二零二五年度影视衍生品著作权授权协议
- 二零二五年度旅游线路代理合作协议范本
- 二零二五年度商铺租赁保证金缴纳及退还合同
- 2025年度方合同在生物制药研发与生产过程中的知识产权协议
- 2025年度曲面玻璃定制设计与施工合同
- 二零二五年度工程项目合同解除及工程款项结算协议
- 学习解读2023年涉税专业服务基本准则和职业道德守则课件
- 产品承诺书格式 小红书食用农产品承诺书
- 淮北市事业单位考试历年真题
- 比亚迪秦Pro说明书
- 仁爱英语八年级下册导学案全册
- 电工基础知识(全面)
- 马克思主义社会科学方法论重点习题
- 危险作业安全知识培训
- 统编版《道德与法治》四年级下册第7课《我们的衣食之源》教学课件(第1课时)
- 少儿美术绘本教案课件-3-6岁 《100层巴士》
- 钢筋原材质量证明书
评论
0/150
提交评论