<?xml version="1.0" encoding="gb2312"?><rss version="2.0"><channel><title>yzdatou</title><link></link><description></description><language>zh-cn</language><generator>Goodspeed Rss</generator><ttl>10</ttl><pubDate>Tue, 14 Oct 2008 15:42:19 GMT</pubDate><category></category><copyright></copyright><docs></docs><item><title>一段有意思的定时器代码</title><pubDate>Tue, 07 Oct 2008 20:17:51 GMT</pubDate><link>http://blog.cechinamag.com/yzdatou/134769/message.aspx</link><description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="7" Month="10" Year="2008"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;/span&gt;&lt;/st1:chsdate&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;亿万论坛里面有人贴出一段简单的代码，说有问题，源代码如下（我按照帖子内容，用&lt;span lang="EN-US"&gt;lad&lt;/span&gt;写的然后转换成&lt;span lang="EN-US"&gt;stl&lt;/span&gt;的&lt;span lang="EN-US"&gt;source&lt;/span&gt;代码）：&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;----------------------------------------------------------&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;NETWORK&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;TITLE =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AN&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;T&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;=&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;M&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0.0; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;NETWORK&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;TITLE =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;A&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;M&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0.0; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;L&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;S5T#1S; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SD&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;T&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;NETWORK&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;TITLE =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;A&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;T&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;JNB&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_001; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;L&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;MW&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;2; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;L&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;1; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+I&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;T&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;MW&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;2; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;_001: NOP&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.25"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;在&lt;span lang="EN-US"&gt;plcsim&lt;/span&gt;里面测试下，果然只见定时器一遍一遍的计时，说明定时器确实在反复的工作，然而计数器却不见动静；我对西门子的定时器指令一向比较发怵，每次用的时候都要看&lt;span lang="EN-US"&gt;help&lt;/span&gt;反复测试，于是查&lt;span lang="EN-US"&gt;help&lt;/span&gt;关于&lt;span lang="EN-US"&gt;sd&lt;/span&gt;指令的描述：&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;--( SD ) (On Delay Timer Coil) starts the specified timer with the &amp;lt;time value&amp;gt; if there is a positive edge on the RLO state. The signal state of the timer is "1" when the &amp;lt;time value&amp;gt; has elapsed without error and the RLO is still "1". When the RLO changes from "1" to "0" while the timer is running, the timer is reset. In this case, a scan for "1" always produces the result "0".&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.25"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;无非就是上升沿触发开始计时，时间到了以后若输入端还为&lt;span lang="EN-US"&gt;1&lt;/span&gt;则定时器输出为&lt;span lang="EN-US"&gt;1&lt;/span&gt;，否则被&lt;span lang="EN-US"&gt;reset&lt;/span&gt;掉；&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.25"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;试着把定时器&lt;span lang="EN-US"&gt;t0&lt;/span&gt;去&lt;span lang="EN-US"&gt;set&lt;/span&gt;一下&lt;span lang="EN-US"&gt;m0.1&lt;/span&gt;，然后用&lt;span lang="EN-US"&gt;m0.1&lt;/span&gt;带计数器，还是没动静；再试着用&lt;span lang="EN-US"&gt;plcsim&lt;/span&gt;的单步执行功能，终于发现问题了，把最后一个&lt;span lang="EN-US"&gt;network&lt;/span&gt;内容移到最前面就&lt;span lang="EN-US"&gt;ok&lt;/span&gt;了。我想，当定时器计时到了以后，程序继续往下执行，此时定时器输出状态并没有刷新，而是要等到下次扫描才能输出为&lt;span lang="EN-US"&gt;true&lt;/span&gt;，而原程序中计数部分是放在最后的，永远也没机会得到计数的机会鸟。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description><comments></comments><guid>http://blog.cechinamag.com/yzdatou/134769/message.aspx</guid><category>西门子 PLC/PAC</category><author></author></item><item><title>PLC里面做数据归档</title><pubDate>Tue, 07 Oct 2008 20:13:58 GMT</pubDate><link>http://blog.cechinamag.com/yzdatou/134768/message.aspx</link><description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="10" Month="9" Year="2008"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;/span&gt;&lt;/st1:chsdate&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;去年参加&lt;span lang="EN-US"&gt;rockwell&lt;/span&gt;的产品介绍会曾经听说了&lt;span lang="EN-US"&gt;ab&lt;/span&gt;的&lt;span lang="EN-US"&gt;plc&lt;/span&gt;所支持的存储卡越来越大，其中一个原因是数据归档的要求。而西门子的&lt;span lang="EN-US"&gt;300&lt;/span&gt;和&lt;span lang="EN-US"&gt;400&lt;/span&gt;似乎没有看到这样的功能。最近因为帮同事看了看&lt;span lang="EN-US"&gt;S7-200&lt;/span&gt;的手册，里面有一章是讲&lt;span lang="EN-US"&gt;200&lt;/span&gt;的数据归档功能，&lt;span lang="EN-US"&gt;200&lt;/span&gt;可以配置&lt;span lang="EN-US"&gt;4&lt;/span&gt;个独立的数据归档，记录最大&lt;span lang="EN-US"&gt;65535&lt;/span&gt;，那么按照每秒一条记录来算的话：&lt;span lang="EN-US"&gt;65535/60/60&lt;/span&gt;＝&lt;span lang="EN-US"&gt;18.2&lt;/span&gt;，也就是只能记录&lt;span lang="EN-US"&gt;18&lt;/span&gt;个小时。另外记录是存在&lt;span lang="EN-US"&gt;V&lt;/span&gt;区也就是内存里面的，可以指定写到存储卡的周期，太快了会影响到存储卡的寿命，手册里面宣称是&lt;span lang="EN-US"&gt;100&lt;/span&gt;万次，按照每分钟写一次来计算的话：&lt;span lang="EN-US"&gt;1000000/60/24&lt;/span&gt;＝&lt;span lang="EN-US"&gt;694&lt;/span&gt;天，&lt;span lang="EN-US"&gt;2&lt;/span&gt;年不到，所以还是放慢点好比如&lt;span lang="EN-US"&gt;10&lt;/span&gt;分钟。这点跟&lt;span lang="EN-US"&gt;300&lt;/span&gt;的&lt;span lang="EN-US"&gt;mmc&lt;/span&gt;卡也很象，手册里面说某些指令涉及到写存储卡的不能用的太频繁否则会导致卡的寿命缩短。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description><comments></comments><guid>http://blog.cechinamag.com/yzdatou/134768/message.aspx</guid><category>西门子 PLC/PAC</category><author></author></item><item><title>Wincc连接数据库</title><pubDate>Wed, 10 Sep 2008 20:21:57 GMT</pubDate><link>http://blog.cechinamag.com/yzdatou/120998/message.aspx</link><description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="25" Month="8" Year="2008"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;/span&gt;&lt;/st1:chsdate&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;一直想研究、学习这个问题，就是没有静下心来弄。前面也有网友问了这个问题，最近总算“心血来潮”有兴趣了。这个问题其实分成两个部分，一是&lt;span lang="EN-US"&gt;wincc&lt;/span&gt;连接外部数据库，例如&lt;span lang="EN-US"&gt;sqlserver&lt;/span&gt;、&lt;span lang="EN-US"&gt;access&lt;/span&gt;或者&lt;span lang="EN-US"&gt;oracle&lt;/span&gt;等，这样可以方便的把&lt;span lang="EN-US"&gt;wincc&lt;/span&gt;采集到的数据导出去；二是把&lt;span lang="EN-US"&gt;wincc&lt;/span&gt;的归档和报警数据查询并导出去；&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.25"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;Wincc&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;的&lt;span lang="EN-US"&gt;help&lt;/span&gt;里面有现成的例子解决了第一个问题，而论坛里面早有人发过帖子提供了相关资料，此外西门子出版的那本深入浅出&lt;span lang="EN-US"&gt;wincc&lt;/span&gt;也详细描述了这两个问题。认真拜读了下，发现很简单，需要了解的就是一点数据库知识和&lt;span lang="EN-US"&gt;ado&lt;/span&gt;对象的知识，幸亏&lt;span lang="EN-US"&gt;n&lt;/span&gt;年前曾经在&lt;span lang="EN-US"&gt;vb&lt;/span&gt;访问数据库方面下过一点功夫，所以很快就依葫芦画瓢搞定了第一个问题。顺便按照&lt;span lang="EN-US"&gt;help&lt;/span&gt;里面的例子又写了个&lt;span lang="EN-US"&gt;wincc&lt;/span&gt;写数据到&lt;span lang="EN-US"&gt;excel&lt;/span&gt;的代码。想修改下例子，即能创建一个&lt;span lang="EN-US"&gt;excle&lt;/span&gt;文件，却发现&lt;span lang="EN-US"&gt;excel&lt;/span&gt;对象的方法没有创建文件的方法，不行，于是去找其它对象发现只能创建文本文件，郁闷。后来想，干脆先创建一个&lt;span lang="EN-US"&gt;excel&lt;/span&gt;文件，然后代码里面先打开这个文件进行修改，最后&lt;span lang="EN-US"&gt;saveas&lt;/span&gt;成另外一个文件（用当时的时间命名保证文件名唯一性）不就可以了么，这样就比较实用了哈哈。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"&gt;然后开始研究第二个问题却费了点周折，我自以为是的想看看趋势数据库究竟是什么结构，却找不到表和数据，后来才发现资料上说趋势和报警归档数据是压缩的，是采用了特殊的&lt;span lang="EN-US"&gt;wincc oledb provider for sqlserver&lt;/span&gt;，并不是普通的&lt;span lang="EN-US"&gt;oledb for sqlserver&lt;/span&gt;。想想也有道理，归档数据必然是采用压缩算法进行存储，西门子应该是基于微软的&lt;span lang="EN-US"&gt;sqlserver&lt;/span&gt;做了二次开发。不过印象里面&lt;span lang="EN-US"&gt;wincc&lt;/span&gt;的归档数据库号称每秒能写&lt;span lang="EN-US"&gt;1&lt;/span&gt;万条记录，这点跟当前流行的实时数据库还是有差距的，西门子好像也一直没有所谓的实时数据库产品。连上了归档数据库后，却一直查询不到数据，很郁闷。后来总算查到了，发现时间不对，仔细对照后，终于明白了归档数据的时间是格林威治时间，跟咱的北京时间差了&lt;span lang="EN-US"&gt;8&lt;/span&gt;小时。后来在中国工控网论坛里面看到有强人发的帖子，人家早就发现了这点并贴出了源代码。我写了个北京时间和格林威治时间转换的模块，还挺罗嗦的。另外也试着把代码放在&lt;span lang="EN-US"&gt;vb&lt;/span&gt;和&lt;span lang="EN-US"&gt;wincc&lt;/span&gt;的&lt;span lang="EN-US"&gt;vbs&lt;/span&gt;里面执行，感觉还是放在&lt;span lang="EN-US"&gt;vb&lt;/span&gt;里面好一点，这样容易把代码封装好便于项目间通用。&lt;/span&gt;</description><comments></comments><guid>http://blog.cechinamag.com/yzdatou/120998/message.aspx</guid><category>西门子 工控软件</category><author></author></item><item><title>用opc连接s7－300</title><pubDate>Wed, 10 Sep 2008 20:21:25 GMT</pubDate><link>http://blog.cechinamag.com/yzdatou/120997/message.aspx</link><description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="21" Month="8" Year="2008"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;/span&gt;&lt;/st1:chsdate&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;之前看了些资料，也看了同事用&lt;span lang="EN-US"&gt;ifix&lt;/span&gt;走&lt;span lang="EN-US"&gt;opc&lt;/span&gt;连接&lt;span lang="EN-US"&gt;s7&lt;/span&gt;，感觉跟以前用&lt;span lang="EN-US"&gt;citect&lt;/span&gt;配通讯很类似，也是在&lt;span lang="EN-US"&gt;netpro&lt;/span&gt;里面建一个&lt;span lang="EN-US"&gt;pc station&lt;/span&gt;，然后&lt;span lang="EN-US"&gt;insert&lt;/span&gt;一个&lt;span lang="EN-US"&gt;ie general&lt;/span&gt;和一个&lt;span lang="EN-US"&gt;application&lt;/span&gt;。而用&lt;span lang="EN-US"&gt;opc&lt;/span&gt;的话不过是把&lt;span lang="EN-US"&gt;application&lt;/span&gt;改为&lt;span lang="EN-US"&gt;opc server&lt;/span&gt;。果然，折腾了一会就连上了。不过发现用西门子的&lt;span lang="EN-US"&gt;opc scout&lt;/span&gt;建立&lt;span lang="EN-US"&gt;db&lt;/span&gt;变量的话，必须和&lt;span lang="EN-US"&gt;plc&lt;/span&gt;连接起来在线扫描出&lt;span lang="EN-US"&gt;plc&lt;/span&gt;里面所有的&lt;span lang="EN-US"&gt;db&lt;/span&gt;，否则离线的话无法输入标签，这点不好啊。&lt;span lang="EN-US"&gt;M&lt;/span&gt;变量倒是可以随便敲的，不管是否在线。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;后来想脱离&lt;span lang="EN-US"&gt;simaticnet&lt;/span&gt;，于是去网上找了个&lt;span lang="EN-US"&gt;kepserver &lt;/span&gt;，这是个比较著名的&lt;span lang="EN-US"&gt;opc server&lt;/span&gt;，在我前面百度&lt;span lang="EN-US"&gt;opc&lt;/span&gt;资料的时候常常能看到有网友提到这个东东。安装时提示有很多厂家的驱动，我只选了&lt;span lang="EN-US"&gt;s7&lt;/span&gt;的&lt;span lang="EN-US"&gt;tcp&lt;/span&gt;－&lt;span lang="EN-US"&gt;ip&lt;/span&gt;驱动，运行起来，按照向导一步一步的配参数，很&lt;span lang="EN-US"&gt;easy&lt;/span&gt;，也是很轻松的就连上了&lt;span lang="EN-US"&gt;plc&lt;/span&gt;。看了下，居然还附带了一个&lt;span lang="EN-US"&gt;vb&lt;/span&gt;的&lt;span lang="EN-US"&gt;client&lt;/span&gt;例子，运行了下还不错，早知道就安装这个&lt;span lang="EN-US"&gt;kepserver&lt;/span&gt;来学习&lt;span lang="EN-US"&gt;vb&lt;/span&gt;编写&lt;span lang="EN-US"&gt;client&lt;/span&gt;了。而且看到网上说，&lt;span lang="EN-US"&gt;ab&lt;/span&gt;也推荐用&lt;span lang="EN-US"&gt;kepserver&lt;/span&gt;连接&lt;span lang="EN-US"&gt;ab&lt;/span&gt;以外厂家的&lt;span lang="EN-US"&gt;plc&lt;/span&gt;。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description><comments></comments><guid>http://blog.cechinamag.com/yzdatou/120997/message.aspx</guid><category>西门子 PLC/PAC</category><author></author></item><item><title>学习用VB编写OPC Client（6）</title><pubDate>Mon, 25 Aug 2008 20:39:08 GMT</pubDate><link>http://blog.cechinamag.com/yzdatou/116531/message.aspx</link><description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="2" Month="7" Year="2008"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;/span&gt;&lt;/st1:chsdate&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: blue; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;关于异步读写&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.25"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;有了前面同步读写的基础，异步读写就轻松多了。同样是在定时器事件里面启动&lt;span lang="EN-US"&gt;group&lt;/span&gt;的&lt;span lang="EN-US"&gt;asynchread&lt;/span&gt;方法，但是数据接收则是在&lt;span lang="EN-US"&gt;group&lt;/span&gt;的&lt;span lang="EN-US"&gt;asynchreadcomplete&lt;/span&gt;事件中，所以异步读就显得比较效率高点，发完请求以后就等着数据来了再触发接收事件，而这期间可以干点其它事情了。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.25"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;而所谓的订阅方式就更简单了，在&lt;span lang="EN-US"&gt;group&lt;/span&gt;的&lt;span lang="EN-US"&gt;datachange&lt;/span&gt;事件中等数据来就行了，根本就不用发数据请求出去，只要把&lt;span lang="EN-US"&gt;group&lt;/span&gt;的&lt;span lang="EN-US"&gt;isactive&lt;/span&gt;属性置为&lt;span lang="EN-US"&gt;true&lt;/span&gt;就可以了。不过我测试中发现，有时候该事件接收不到数据，而切换到同步或者异步再切换回来，订阅的数据就变化了，不理解啊。看来还是异步的方式在三者中可靠且完善点。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.25"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;关于异步写，看了写觉得差不多就偷懒不写代码测试了。毕竟碰到大批量数据写下去的情况几乎不会被我碰到吧。我的出发点还是立足于读数据出来转到其它地方去处理：或者入数据库，或者入&lt;span lang="EN-US"&gt;excel&lt;/span&gt;去打印等等。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.25"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;另外，顺便试了&lt;span lang="EN-US"&gt;opcserver&lt;/span&gt;的几个属性：启动时间，运行时间和版本号，发现还有有用的，可以查看&lt;span lang="EN-US"&gt;server&lt;/span&gt;的状态。而&lt;span lang="EN-US"&gt;item&lt;/span&gt;的几个属性也试了下，比如质量、时标，数据类型，但是其中一个工程单位的属性（&lt;span lang="EN-US"&gt;EUInfo&lt;/span&gt;）始终报错，很郁闷。换了&lt;span lang="EN-US"&gt;opcserver&lt;/span&gt;都一样。可用标准的&lt;span lang="EN-US"&gt;opcclient&lt;/span&gt;软件－&lt;span lang="EN-US"&gt;Factroy OPC Client&lt;/span&gt;却能够读取该属性，不晓得人家是怎么弄的（当然人家肯定是用&lt;span lang="EN-US"&gt;c&lt;/span&gt;之类写的吧，&lt;span lang="EN-US"&gt;vb&lt;/span&gt;实在是太傻瓜化了，隐藏了太多的细节）&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description><comments></comments><guid>http://blog.cechinamag.com/yzdatou/116531/message.aspx</guid><category>杂谈 工控软件</category><author></author></item><item><title>学习用VB编写OPC Client（5）</title><pubDate>Mon, 25 Aug 2008 20:38:16 GMT</pubDate><link>http://blog.cechinamag.com/yzdatou/116530/message.aspx</link><description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span lang="EN-US"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: blue; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;关于异步读写所联想到的&lt;span lang="EN-US"&gt;……&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;粗粗的浏览了一下资料里面关于异步读写的描述，包括订阅更新，感觉是一种很好的做法，特别是数据量大的时候。因为同步读写必须等待服务器返回结果才能继续后面的代码。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;看到这里，我想到了前面研究&lt;span lang="EN-US"&gt;modbus&lt;/span&gt;通讯时，对于&lt;span lang="EN-US"&gt;485&lt;/span&gt;总线多站点轮询，曾经想当然的考虑过一个方法：主站先把所有报文统统发送出去，然后等待各条报文返回来，或者是发送一条报文就接收一次再发送一次再接收一次如此循环，当然由于速度问题，每次接收的报文基本上不可能是上条发送的请求报文的返回了，我以为如此可以达到很高的效率。但是当实际动手开始编的时候，才发现这种想法是不能实现的，原因在于无法完全识别返回的报文是哪条发送报文的正确返回。例如第一条报文请求读取站号&lt;span lang="EN-US"&gt;=2&lt;/span&gt;的从站的&lt;span lang="EN-US"&gt;8&lt;/span&gt;个&lt;span lang="EN-US"&gt;bool&lt;/span&gt;量，而第二条报文则是请求读取站号＝&lt;span lang="EN-US"&gt;2&lt;/span&gt;的另外&lt;span lang="EN-US"&gt;8&lt;/span&gt;个&lt;span lang="EN-US"&gt;bool&lt;/span&gt;量，那么主站收到返回报文后就无法识别读到的这&lt;span lang="EN-US"&gt;8&lt;/span&gt;个&lt;span lang="EN-US"&gt;bool&lt;/span&gt;量是从站中哪片地址区的（因为返回报文中只包含了功能码、站号、返回的字节数和数据内容）。所以只能是发送请求报文以后，“耐心”等待返回的报文。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;这样看来，&lt;span lang="EN-US"&gt;modbus&lt;/span&gt;是一种同步读写的机制，而我所设想的所谓方法是一种不能实现的“异步”读写机制。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;说句瞎话，其实只要修改一下&lt;span lang="EN-US"&gt;slave&lt;/span&gt;返回的报文格式就能够使得&lt;span lang="EN-US"&gt;master&lt;/span&gt;识别出&lt;span lang="EN-US"&gt;slave&lt;/span&gt;返回报文的归属，以读数据为例，把返回报文变成：&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;发送报文（不含&lt;span lang="EN-US"&gt;crc&lt;/span&gt;码）＋返回数据字节数＋返回数据＋&lt;span lang="EN-US"&gt;crc&lt;/span&gt;码&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;这样的话，我前面胡乱想的那个所谓“异步”读写方法就能实现鸟。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;可惜啊，当初制定&lt;span lang="EN-US"&gt;modbus&lt;/span&gt;规约的时候没这么设计&lt;span lang="EN-US"&gt;……\^_^/&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description><comments></comments><guid>http://blog.cechinamag.com/yzdatou/116530/message.aspx</guid><category>杂谈 工控软件</category><author></author></item><item><title>学习用VB编写OPC Client（4）</title><pubDate>Sat, 23 Aug 2008 14:45:37 GMT</pubDate><link>http://blog.cechinamag.com/yzdatou/116296/message.aspx</link><description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="1" Month="7" Year="2008"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;/span&gt;&lt;/st1:chsdate&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: blue; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;关于引用对象的问题&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;从下载的资料看，需要在工程里面引用一个&lt;span lang="EN-US"&gt;opc&lt;/span&gt;对象。我看的是用&lt;span lang="EN-US"&gt;opc&lt;/span&gt;访问&lt;span lang="EN-US"&gt;wincc&lt;/span&gt;的文章，里面提到“&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体"&gt;先在“引用”将近&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"&gt; Siemens OPC DAAutomation 2.0&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体"&gt;加入&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;”，试了下去掉这个引用，运行程序就报告“变量未定义”，指向的就是定义的几个&lt;span lang="EN-US"&gt;opc&lt;/span&gt;对象变量。试着引用另外一个&lt;span lang="EN-US"&gt;opc&lt;/span&gt;对象－&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"&gt;OPC Automation 2.0,&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"&gt;就可以了。看来引用只是为了能够声明和定义&lt;span lang="EN-US"&gt;opc&lt;/span&gt;对象而已，所以随便找个就可以了。&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: blue; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;关于同步读的问题&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;百度上搜到&lt;span lang="EN-US"&gt;csdn&lt;/span&gt;上有同步读写的代码，看了下很奇怪&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt"&gt;Private Sub Command_Read_Click()'&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma"&gt;同步读&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim OutText As String&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim myValue As Variant&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim myQuality As Variant&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim myTimeStamp As Variant&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; On Error GoTo ErrorHandler&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OutText = "&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma"&gt;读&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt"&gt;ITEM&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma"&gt;值&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt"&gt;"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ItemObj.Read OPCDevice, myValue, myQuality, myTimeStamp&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Edit_ReadVal = myValue&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Edit_ReadQu = GetQualityText(myQuality)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Edit_ReadTS = myTimeStamp&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Sub&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ErrorHandler:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox Err.Description + Chr(13) + _&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OutText, vbCritical, "ERROR"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;其中&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt"&gt;GetQualityText&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma"&gt;是自定义函数，标签质量代码的解释&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt"&gt;Private Function GetQualityText(Quality) As String&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select Case Quality&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 0:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetQualityText = "BAD"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 64:&amp;nbsp;&amp;nbsp;&amp;nbsp; GetQualityText = "UNCERTAIN"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 192:&amp;nbsp;&amp;nbsp; GetQualityText = "GOOD"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 8:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetQualityText = "NOT_CONNECTED"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 13:&amp;nbsp;&amp;nbsp;&amp;nbsp; GetQualityText = "DEVICE_FAILURE"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 16:&amp;nbsp;&amp;nbsp;&amp;nbsp; GetQualityText = "SENSOR_FAILURE"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 20:&amp;nbsp;&amp;nbsp;&amp;nbsp; GetQualityText = "LAST_KNOWN"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 24:&amp;nbsp;&amp;nbsp;&amp;nbsp; GetQualityText = "COMM_FAILURE"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 28:&amp;nbsp;&amp;nbsp;&amp;nbsp; GetQualityText = "OUT_OF_SERVICE"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 132:&amp;nbsp;&amp;nbsp; GetQualityText = "LAST_USABLE"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 144:&amp;nbsp;&amp;nbsp; GetQualityText = "SENSOR_CAL"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 148:&amp;nbsp;&amp;nbsp; GetQualityText = "EGU_EXCEEDED"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 152:&amp;nbsp;&amp;nbsp; GetQualityText = "SUB_NORMAL"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 216:&amp;nbsp;&amp;nbsp; GetQualityText = "LOCAL_OVERRIDE"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case Else: GetQualityText = "UNKNOWN ERROR"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Select&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt"&gt;End Function&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;问题关键在于上面代码的同步读采用的是&lt;span lang="EN-US"&gt;item&lt;/span&gt;对象的&lt;span lang="EN-US"&gt;read&lt;/span&gt;方法，而别的资料则是用&lt;span lang="EN-US"&gt;group&lt;/span&gt;的&lt;span lang="EN-US"&gt;syncread&lt;/span&gt;方法，显然后者效率高。形如：&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;objGroup.SyncRead OPCCache, UBound(lServerHandles), lServerHandles, vItemData, lErrors&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;其中&lt;span lang="EN-US"&gt;opccache&lt;/span&gt;是个关键字，也可以用&lt;span lang="EN-US"&gt;opcdevice&lt;/span&gt;关键字，在规范里面讲了一下两者的区别。运行了下，老是报告参数错误然后竟然&lt;span lang="EN-US"&gt;vb&lt;/span&gt;出错了，以为是前面错误多了导致突然退出程序没有释放定义的对象，于是重启机器，还是依旧，看来不是这个原因了。换个引用的&lt;span lang="EN-US"&gt;opc&lt;/span&gt;对象试试看？果然&lt;span lang="EN-US"&gt;ok&lt;/span&gt;了，数据读上来了。想到&lt;span lang="EN-US"&gt;csdn&lt;/span&gt;的代码里面有标签质量，那么&lt;span lang="EN-US"&gt;group&lt;/span&gt;的&lt;span lang="EN-US"&gt;syncread&lt;/span&gt;方法也有质量参数不过是可选的，于是加上一个参数，定义为&lt;span lang="EN-US"&gt;variant&lt;/span&gt;即可，但是在显示这个质量参数的时候却出错了。我猜想应该是数组的形式来引用――――尽管其被调用的时候被定义为&lt;span lang="EN-US"&gt;variant&lt;/span&gt;，果然如此。然后借用前面&lt;span lang="EN-US"&gt;csdn&lt;/span&gt;的&lt;span lang="EN-US"&gt;GetQualityText&lt;/span&gt;函数即可显示出标签的质量了，正常就是&lt;span lang="EN-US"&gt;good &lt;/span&gt;，否则是&lt;span lang="EN-US"&gt; bad&lt;/span&gt;。同样道理，时间标戳（&lt;span lang="EN-US"&gt;TIME STAMP&lt;/span&gt;）也可以显示出来。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;下一步是同步写的问题。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;读的问题解决了，写就简单了，语法是：&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US"&gt;SyncWrite(NumItems As Long, ServerHandles() As Long, Values() As Variant, ByRef Errors() As Long)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;不过发现&lt;/span&gt;&lt;span lang="EN-US"&gt;opc&lt;/span&gt;&lt;span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;官方文档里面的例子居然有错，就是&lt;/span&gt;&lt;span lang="EN-US"&gt;Values()&lt;/span&gt;&lt;span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个数组在定义的时候必须指定长度否则&lt;/span&gt;&lt;span lang="EN-US"&gt;vb&lt;/span&gt;&lt;span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;报告下标错。我猜想这是因为在调用&lt;/span&gt;&lt;span lang="EN-US"&gt;syncwrite&lt;/span&gt;&lt;span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;方法之前，肯定要对&lt;/span&gt;&lt;span lang="EN-US"&gt;values&lt;/span&gt;&lt;span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;数组元素赋值，此时没有调用&lt;/span&gt;&lt;span lang="EN-US"&gt;syncwrite&lt;/span&gt;&lt;span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;造成系统不能划出&lt;/span&gt;&lt;span lang="EN-US"&gt;values&lt;/span&gt;&lt;span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;数组的大小，悖论啊，瞎猜瞎猜。&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;问题又来了，实际应用中，可能仅仅是指定某几个标签写下去，怎么办？&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;受到前面&lt;span lang="EN-US"&gt;csdn&lt;/span&gt;的代码启示，用&lt;span lang="EN-US"&gt;item&lt;/span&gt;的&lt;span lang="EN-US"&gt;write&lt;/span&gt;方法，写了一个小函数：&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;Sub SingleWrite(Index As Long, Value As Variant)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;'&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;单个写&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;Dim objItem As OPCItem&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;If Not objItems Is Nothing Then&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Set objItem = objItems.Item(Index)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;objItem.Write Value&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;End If&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;Set objItem = Nothing&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;End Sub&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"&gt;下一步研究下异步读写的问题。&lt;/span&gt;</description><comments></comments><guid>http://blog.cechinamag.com/yzdatou/116296/message.aspx</guid><category>杂谈 工控软件</category><author></author></item><item><title>学习用VB编写OPC Client（3）</title><pubDate>Tue, 19 Aug 2008 18:14:33 GMT</pubDate><link>http://blog.cechinamag.com/yzdatou/115404/message.aspx</link><description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span lang="EN-US"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: blue; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;添加标签的方法。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;首先看了看本机上一个&lt;span lang="EN-US"&gt;opcserver&lt;/span&gt;运行起来以后，发现里面有好几个&lt;span lang="EN-US"&gt;group&lt;/span&gt;，那么我总不能定义一摸一样的几个&lt;span lang="EN-US"&gt;group&lt;/span&gt;吧？看了下网上有人写的帖子，说&lt;span lang="EN-US"&gt;client&lt;/span&gt;里面无须指定跟&lt;span lang="EN-US"&gt;server&lt;/span&gt;一样的&lt;span lang="EN-US"&gt;group&lt;/span&gt;，我想这是很合理的，毕竟只要以标签名作为唯一标识就可以了（这里就应该隐含着&lt;span lang="EN-US"&gt;opcserver&lt;/span&gt;上标签名称是唯一的，不管其在不在一个&lt;span lang="EN-US"&gt;group&lt;/span&gt;中）&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;网上的例子里面是做了个示范，标签名用了个循环赋值，&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue"&gt;For I = 1 To 17&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;u&gt;strItemIDs(I) = "Server.Group.TAG" &amp;amp; I &lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue"&gt;lClientHandles(I) = I &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue"&gt;Next ' &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;添加&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue"&gt;OPC&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;项&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; LINE-HEIGHT: 150%"&gt;Call objItems.AddItems(17, strItemIDs, lClientHandles, lServerHandles, lErrors)&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;但是例子里面也承认“&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"&gt;OPC&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;客户端程序要按照用户指定的标签或者从组态文件里读取需要添加的&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"&gt;OPC&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标签。&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;”&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;那么，实际上来说，要么用&lt;span lang="EN-US"&gt;browse&lt;/span&gt;标签的方法去一个一个选择标签，要么事先在程序里面指定好各个标签名字了（当然可以用一个类似与&lt;span lang="EN-US"&gt;ini&lt;/span&gt;配置文件的方法存储好要各个标签的名字，这个以后再说吧）。从实际应用考虑，我觉得&lt;span lang="EN-US"&gt;browse&lt;/span&gt;的方法没有必要，因为一般来说直接确定好哪些标签就行了，而且如果用参数文件的话也算比较容易后期进行配置（前提应该是&lt;span lang="EN-US"&gt;tag&lt;/span&gt;名字要写正确）。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;Items&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;有个&lt;span lang="EN-US"&gt;additems&lt;/span&gt;的方法，用于添加标签，参数比较多，认真看了下例子，还是有点技巧的，从第二个参数开始都是数组类型的参数，而前两个数组必须指定好长度，后面三个数组则无须指定长度，很怪啊，反正&lt;span lang="EN-US"&gt;vb&lt;/span&gt;认可就&lt;span lang="EN-US"&gt;ok&lt;/span&gt;了，难怪例子里面这么定义的几个数组。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;下一步就是标签的读写了，里面牵涉的内容好像挺多，主要是同步和异步读写问题，后面再研究吧。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description><comments></comments><guid>http://blog.cechinamag.com/yzdatou/115404/message.aspx</guid><category>杂谈 工控软件</category><author></author></item><item><title>学习用VB编写OPC Client（2）</title><pubDate>Tue, 19 Aug 2008 18:13:47 GMT</pubDate><link>http://blog.cechinamag.com/yzdatou/115403/message.aspx</link><description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="6" Year="2008"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;/span&gt;&lt;/st1:chsdate&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;找到一段代码，可以&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="COLOR: blue"&gt;实现获得所有本电脑上运行的&lt;span lang="EN-US"&gt;opc&lt;/span&gt;服务&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;Private Sub Command1_Click()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;Dim AllOPCServers As Variant&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Dim i As Integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Set AnOPCServer = New OPCServer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;List1.Clear&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AllOPCServers = AnOPCServer.GetOPCServers&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;For i = LBound(AllOPCServers) To UBound(AllOPCServers)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;List1.AddItem AllOPCServers(i)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Next i&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Set AnOPCServer = Nothing&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;End Sub&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;试了一下果然可以。点击&lt;span lang="EN-US"&gt;list&lt;/span&gt;中某一个&lt;span lang="EN-US"&gt;opcserver&lt;/span&gt;，然后调用&lt;span lang="EN-US"&gt;opcserver&lt;/span&gt;对象的&lt;span lang="EN-US"&gt;connect&lt;/span&gt;方法就可以连接上去了。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;我试着定时检查&lt;span lang="EN-US"&gt;opcserver&lt;/span&gt;的&lt;span lang="EN-US"&gt;serverstatus&lt;/span&gt;属性（&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;服务器状态&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"&gt;ServerState&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性一共有&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"&gt;OPCRunning&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"&gt;OPCFailed&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"&gt;OPCNoconfig&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"&gt;OPCSuspended&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"&gt;OPCTest&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;和&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"&gt;OPCDisconnected&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;六个值，分别表示正在运行、失败、没有配置、暂停、测试和没有连接六种&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"&gt;OPC&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;服务器当前的状态。&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;）连接成功后，的却返回了&lt;span lang="EN-US"&gt;opcrunning&lt;/span&gt;值，而断开后也能返回“&lt;span lang="EN-US"&gt;opcdisconnected&lt;/span&gt;”值。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: blue; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;不过不知道在非正常中断连接（比如远程服务器网络中断等）的时候，该属性是否能真正反应状态？&lt;span lang="EN-US"&gt;ms&lt;/span&gt;有人说不行，需要从标签变&lt;span lang="EN-US"&gt;bad&lt;/span&gt;来判断。回头在虚拟机上装个&lt;span lang="EN-US"&gt;opcserver&lt;/span&gt;来测试一下。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description><comments></comments><guid>http://blog.cechinamag.com/yzdatou/115403/message.aspx</guid><category>杂谈 工控软件</category><author></author></item><item><title>Wincc7的新特性</title><pubDate>Sat, 16 Aug 2008 13:57:49 GMT</pubDate><link>http://blog.cechinamag.com/yzdatou/114814/message.aspx</link><description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;这两天参加了西门子的&lt;span lang="EN-US"&gt;wincc&lt;/span&gt;高级培训，其实是介绍了刚刚推出的&lt;span lang="EN-US"&gt;wincc7&lt;/span&gt;的一些新特点，听了两天下来，感觉&lt;span lang="EN-US"&gt;7.0&lt;/span&gt;版本确实是焕然一新啊，很多方面都做了改进，说说其中几点吧：&lt;span lang="EN-US"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;1&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;、界面漂亮了，配色方案丰富了，可以统一修改界面风格；&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;2&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;、很多控件都改头换面了，比如报警控件、趋势控件似乎是重写了，可以直接把里面的记录&lt;span lang="EN-US"&gt;copy&lt;/span&gt;出来然后&lt;span lang="EN-US"&gt;paste&lt;/span&gt;到&lt;span lang="EN-US"&gt;excel&lt;/span&gt;里面去。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;3&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;、西门子发了张&lt;span lang="EN-US"&gt;dvd&lt;/span&gt;，里面包括了&lt;span lang="EN-US"&gt;wincc7&lt;/span&gt;、&lt;span lang="EN-US"&gt;sqlserver2005&lt;/span&gt;和&lt;span lang="EN-US"&gt;simaticnet&lt;/span&gt;等，安装的时候可以一次整体安装完成，不过我安装的时候费了点力气，因为我的操作系统没有安装&lt;span lang="EN-US"&gt;kb319740&lt;/span&gt;补丁，而光盘里面没有中文版的，导致出错我又没有认真看出错提示，耽误了不少时间。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;4&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;、增加了“面板”，所谓的&lt;span lang="EN-US"&gt;faceplate&lt;/span&gt;，有点控件的味道但不是真正的控件，感觉只能用所谓的面板变量有点怪，有时间再研究。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;5&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;、驱动里面增加了&lt;span lang="EN-US"&gt;controlgix&lt;/span&gt;的以太网驱动和&lt;span lang="EN-US"&gt;modbus tcp/ip&lt;/span&gt;驱动（看了下里面的配置，是针对施耐德&lt;span lang="EN-US"&gt;plc&lt;/span&gt;的），看来&lt;span lang="EN-US"&gt;6.0&lt;/span&gt;版本里面只有西门子驱动遭到了用户的批评啊，把问题都推给&lt;span lang="EN-US"&gt;opc&lt;/span&gt;不是个好办法，毕竟用户还要去找第三方的&lt;span lang="EN-US"&gt;opc&lt;/span&gt;驱动还是很麻烦的事情。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;6&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;、所谓的“服务”模式，有点不明白，要是有演示就好了。看介绍，这种模式无须登陆，可以远程修改，还是不太明白这种模式的好处啊。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"&gt;其它新的特性还很多，有待于真正开发的时候才能去体会了。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description><comments></comments><guid>http://blog.cechinamag.com/yzdatou/114814/message.aspx</guid><category>西门子 SCADA</category><author></author></item></channel></rss>