- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于C#如何使用Prodave(实战DllImport)
SIEMENS
严格意义上讲,此文不算OPC的范畴。起因是,另一个项目的PLC强人说,OPC慢,
用prodave吧,好,用就用吧,装好Prodave看是看其英文资料,虽然英文不好,但好在
这里英文
很简单。好了,上网查了点资料,这里还要感谢几个朋友的帮忙,让我对于C#与C++
的数据结构有了更进一步的认识,也学会了使用DllImport
在本文的开头,我要说明下,Prodave是西门子的通信方式,即使我提供了Prodave6.dll,
您不注册也是没用用的,所以请使用西门子的安装程序,哪里下载?自己百度一下。不
要来问我哪里下载Prodave6.dll,也不要问我为什么程序会报错说没有注册dll
下面开始进入正文。
(1)上来第一个函数,就是连接PLC的LoadConnection_ex6,在说明书里描述如下:
LoadConnection_ex6
ThebasicLoadConnection_ex6functioninitializestheadapter,checksifthe
driverisloaded,initializestheaddresses thathavebeenassignedparametersand
activatestheselectedinterface.
LoadConnection_ex6isusedtosetupatransportconnectionviaMPI/PB- orIP
addresses(TCP/IPprotocol)
intLoadConnection_ex6(intConNr,char*pAccessPoint,intConTableLen,
CON_TABLE_TYPE*pConTable);
Parameters
ConNr
[in]Numberoftheconnection(max.64connections).
pAccessPoint
[in]accesspoint(zero-terminated)ofthedriverused,e.g.S7ONLINEfortheMPI
driveror0(default).
ConTableLen
[in]lengthofthetableofconnectionsprovidedbytheuserinbytes
pConTable
[in]pointertoaddresslistofconnectedusers;‘Adr==0’ istakenastheendmarkof
thelist.
#pragmapack(1)
typedefunion{
unsignedcharMpi;//MPI/PB stationaddress(2)
unsignedcharIp[4];//IPaddress ()
unsignedcharMac[6];//MACaddress(08-00-06-01-AA-BB)
}CON_ADR_TYPE;
typedefstruct{
CON_ADR_TYPEAdr;//connectionaddress
unsignedcharAdrType;//Typeofaddress: MPI/PB(1),IP(2),MAC(3)
unsignedcharSlotNr;//Slotnumber
unsignedcharRackNr;//Racknumber
}CON_TABLE_TYPE;
1
SIEMENS
#pragmapack(1)
好吧,起先其他的转换网上都有,不难,但是出现了union共用体,恩C#没有这个概
念。怎么办?起先,参考网上的资料,采用
[StructLayout(LayoutKind.Explicit)]
structS1
{
[FieldOffset(0)]
inta;
[FieldOffset(0)]
intb;
}
类似这样的布局,再加上类似[MarshalAs(UnmanagedType.ByValArray,SizeConst=6)]的声
明。
但是,最终单纯的使用2个数组作为“共用体”字段的话是可以通过编译的,但是再加上
文档评论(0)