<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>飞飏</title>
	<atom:link href="http://www.flyang.net/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.flyang.net</link>
	<description>又一个 WordPress 站点</description>
	<lastBuildDate>Sat, 22 Oct 2011 15:14:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>windows 7 x64 英文版不能玩魔兽3的解决方法</title>
		<link>http://www.flyang.net/?p=79</link>
		<comments>http://www.flyang.net/?p=79#comments</comments>
		<pubDate>Sat, 22 Oct 2011 15:12:58 +0000</pubDate>
		<dc:creator>flyang</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.flyang.net/?p=79</guid>
		<description><![CDATA[windows 7 x64 英文版不能玩魔兽3，会提示需要特定的语言版本。修改game.dll文件就可以了。 任何魔兽3版本通用，不管魔兽哪个版本的game.dll关于系统语言版本判断都在一个地方，也就是说都改一个地方就好了。 用UltraEdit打开game.dll搜索3D0408000074 记住是第一个搜到的地方，1.22和1.23可能会搜到两个地方，是前面的那个。 我的魔兽3是1.20C，搜索到了两个地方，都改了就可以完了。 将74改为EB，是大写的EB，然后保存就可以了，目前所有的魔兽版本都通用。]]></description>
			<content:encoded><![CDATA[<p>windows 7 x64 英文版不能玩魔兽3，会提示需要特定的语言版本。修改game.dll文件就可以了。<br />
任何魔兽3版本通用，不管魔兽哪个版本的game.dll关于系统语言版本判断都在一个地方，也就是说都改一个地方就好了。</p>
<p>用UltraEdit打开game.dll搜索3D0408000074<br />
记住是第一个搜到的地方，1.22和1.23可能会搜到两个地方，是前面的那个。<br />
我的魔兽3是1.20C，搜索到了两个地方，都改了就可以完了。<br />
将74改为EB，是大写的EB，然后保存就可以了，目前所有的魔兽版本都通用。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flyang.net/?feed=rss2&#038;p=79</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>不安装WinCC 7.0 SP1，直接安装WinCC 7.0 SP2的方法</title>
		<link>http://www.flyang.net/?p=74</link>
		<comments>http://www.flyang.net/?p=74#comments</comments>
		<pubDate>Tue, 19 Jul 2011 10:54:31 +0000</pubDate>
		<dc:creator>flyang</dc:creator>
				<category><![CDATA[WinCC]]></category>

		<guid isPermaLink="false">http://www.flyang.net/?p=74</guid>
		<description><![CDATA[1.在添加删除程序中安装消息队列和IIS服务。 2.运行WinCC_V70_SP2.exe 3.在安装过程中不要点任何按钮。 4.打开安装文件创建的C:\{NUMBERS-NUMBERS-….} 例如 :{DFDBB8FE-7426-454A-937C-F8E9230F896A}的文件夹。 (Windows 7 在那个100M的磁盘分区中) 5.用记事本打开Properties_SiWA.ini并且修改[Conditions]久版本中的内容 [Conditions] Action1=Extract Action1Condition=Condition1 AND Condition2 AND Condition3 Condition1 …. Condition2 …. Condition3 ….. 修改为 [Conditions] Action1=Extract Action1Condition= 保存，继续安装。]]></description>
			<content:encoded><![CDATA[<p>1.在添加删除程序中安装消息队列和IIS服务。<br />
2.运行WinCC_V70_SP2.exe<br />
3.在安装过程中不要点任何按钮。<br />
4.打开安装文件创建的C:\{NUMBERS-NUMBERS-….}<br />
例如 :{DFDBB8FE-7426-454A-937C-F8E9230F896A}的文件夹。<br />
<font color="red">(Windows 7 在那个100M的磁盘分区中)</font><br />
5.用记事本打开Properties_SiWA.ini并且修改[Conditions]久版本中的内容<br />
[Conditions]<br />
Action1=Extract<br />
Action1Condition=Condition1 AND Condition2 AND Condition3<br />
Condition1 ….<br />
Condition2 ….<br />
Condition3 …..<br />
修改为<br />
[Conditions]<br />
Action1=Extract<br />
Action1Condition=<br />
保存，继续安装。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flyang.net/?feed=rss2&#038;p=74</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转载]WinCC的n个经典问题解答(41-50)</title>
		<link>http://www.flyang.net/?p=59</link>
		<comments>http://www.flyang.net/?p=59#comments</comments>
		<pubDate>Thu, 14 Jul 2011 08:30:21 +0000</pubDate>
		<dc:creator>flyang</dc:creator>
				<category><![CDATA[WinCC]]></category>

		<guid isPermaLink="false">http://www.flyang.net/?p=59</guid>
		<description><![CDATA[41:用C编程解决授权点数不够用的问题(acsun提供) 当需要的工艺参数超过WinCC版本限制的Tag数目,可以用C语言编程实现多个工艺参数打包成一个Tag传送.例如某个配料称重系统有146个参数超过了WinCC的128个Tag的限制就可以用C语言编程决这一问题而不需要购买更高的授权. 基本思想就是把多个参数在下位机内存中连续排列然后在WinCC中定义一个Tag它的长度是多个参数之和取得这个Tag后编程将其分成多个参数 例如下位机有两个参数LTN44001和LTN44023都是16位整数分别存放在DD99.DW146和DD99.DW148 在WinCC中定义一个外部Tag命名为PackageTag类型为32位整数并联地址为DD99.DBD146再定义两个内部tag名为LTN44001和LTN44023在 Global Script全局脚本中C语言编程如下 Union { Long Dword Int Word[2] }union Union.Dword=GetTagDword(&#8220;PackageTag&#8221;) SetTagWord(&#8220;LTN44001&#8243;,Union.Word[0]) SetTagWord(&#8220;LTN44023&#8243;,Union.Word[0]) 这样两个参数LTN44001和LTN44023就通过一个Tag传送上来了理论上只要下位机内存足够可以传送任意数量的参数而不受WinCC版本外部Tag数目的限制. 42:如何在WinCC里用C语言调用SQL语言？ 1、创建一个SQL文件。 此文件在ISQL中创建，文件内容是所希望执行的SQL语句。 2、在WinCC的C Script中编写程序调用此SQL文件，如以下程序所示： ＃i nclude &#8220;apdefap.h&#8221; void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y) { &#8230; <a href="http://www.flyang.net/?p=59">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>41:用C编程解决授权点数不够用的问题(acsun提供)</p>
<p>当需要的工艺参数超过WinCC版本限制的Tag数目,可以用C语言编程实现多个工艺参数打包成一个Tag传送.例如某个配料称重系统有146个参数超过了WinCC的128个Tag的限制就可以用C语言编程决这一问题而不需要购买更高的授权.</p>
<p>基本思想就是把多个参数在下位机内存中连续排列然后在WinCC中定义一个Tag它的长度是多个参数之和取得这个Tag后编程将其分成多个参数</p>
<p>例如下位机有两个参数LTN44001和LTN44023都是16位整数分别存放在DD99.DW146和DD99.DW148<br />
在WinCC中定义一个外部Tag命名为PackageTag类型为32位整数并联地址为DD99.DBD146再定义两个内部tag名为LTN44001和LTN44023在 Global Script全局脚本中C语言编程如下<br />
Union<br />
{<br />
Long Dword<br />
Int Word[2]<br />
}union<br />
Union.Dword=GetTagDword(&#8220;PackageTag&#8221;)<br />
SetTagWord(&#8220;LTN44001&#8243;,Union.Word[0])<br />
SetTagWord(&#8220;LTN44023&#8243;,Union.Word[0])<br />
这样两个参数LTN44001和LTN44023就通过一个Tag传送上来了理论上只要下位机内存足够可以传送任意数量的参数而不受WinCC版本外部Tag数目的限制.<span id="more-59"></span></p>
<p>42:如何在WinCC里用C语言调用SQL语言？<br />
1、创建一个SQL文件。<br />
此文件在ISQL中创建，文件内容是所希望执行的SQL语句。<br />
2、在WinCC的C Script中编写程序调用此SQL文件，如以下程序所示：<br />
＃i nclude &#8220;apdefap.h&#8221;</p>
<p>void OnLButtonDown(char* lpszPictureName,</p>
<p>char* lpszObjectName,</p>
<p>char* lpszPropertyName,</p>
<p>UINT nFlags, int x, int y)</p>
<p>{</p>
<p>char*a=&#8221;C:SIEMENSCommonSQLANYISQL-q-b-c</p>
<p>UID=DBA;PWD=SQL;DBF=E:testsqltestsqlRT.DB;</p>
<p>DBN=CC_testsql_99-12-03_12:48:26R;</p>
<p>READ</p>
<p>E:testsqltest.sql&#8221;;</p>
<p>printf(&#8220;%srn&#8221;,a);</p>
<p>ProgramExecute(a);</p>
<p>}</p>
<p>下面是一个简单的SQL文件内容：</p>
<p>select * from pde#hd#t#test;</p>
<p>output to E:test2.txt FORMAT ascii<br />
注意:文件名及路径中不要带空格。</p>
<p>43:如何整点启动归档？<br />
在&#8221;Global Script&#8221;下的Project functions编写函数：cyclicarchive</p>
<p>BOOL cyclicarchive()</p>
<p>{</p>
<p>#pragma code (&#8220;kernel32.dll&#8221;);</p>
<p>void GetLocalTime (SYSTEMTIME* lpst);</p>
<p>#pragma code();</p>
<p>SYSTEMTIME time;</p>
<p>Int t1;</p>
<p>GetLocalTime(&amp;time);</p>
<p>t1=time.wMinute;</p>
<p>if(t1==00)</p>
<p>{</p>
<p>SetTagBit(&#8220;startarchive&#8221;,1);</p>
<p>return(BOOL)(GetTagBit(&#8220;startarchive&#8221;));</p>
<p>}</p>
<p>}</p>
<p>在Tagloging中的&#8221;Properties of process tag&#8221;中的&#8221;Archive Tag&#8221;tab下的Archiving type选择Cycle-selective，在&#8221;Event&#8221;标签下的&#8221;Start Event&#8221;内选择cyclicarchive函数。</p>
<p>44:如何在按键组合被禁用的情况下，从WinCC运行环境进入WinCC Control Center？<br />
最好是做一个按钮，该按钮需要用用户权限保护，在该钮中编写如下C-action：</p>
<p>低于WinCC 5.0版本：</p>
<p>#pragma code (&#8220;user32.dll&#8221;);</p>
<p>BOOL SetForegroundWindow(HWND);</p>
<p>#pragma code();</p>
<p>HWND handle;</p>
<p>handle=FindWindow(&#8220;MCPFrameWndClass&#8221;,NULL);</p>
<p>If (!SetForegroundWindow(handle))</p>
<p>Printf (&#8220;rn SetForeground fails&#8221;);</p>
<p>WinCC 5.0版本以及更高的版本：</p>
<p>#pragma code(&#8220;user32.dll&#8221;);</p>
<p>BOOL SetForegroundWindow(HWND);</p>
<p>#pragma code();</p>
<p>HWND handle;</p>
<p>handle=FindWindow(&#8220;WinCCExplorerFrameWndClass&#8221;,NULL);</p>
<p>If (!SetForegroundWindow(handle))</p>
<p>Printf (&#8220;rn SetForeground fails&#8221;);</p>
<p>45:WinCC如何实现鼠标OnMouseOVer事件?</p>
<p>用WINDOWAPI函数GetCusorPos获取当前鼠标位置，用GetWindowRect函数获取窗口位置，两值相减得鼠标在WINCC frame上的相对位置。用全局脚本（设定为1s定时刷新），然后获取要OnMouseOver事件的物体的位置，并与鼠标位置相比较，如一致则触发自己定义的动作。</p>
<p>#include &#8220;apdefap.h&#8221;</p>
<p>int gscAction( void )<br />
{<br />
#pragma code(&#8220;user32.dll&#8221;);<br />
BOOL GetCusorPos(POINT lpPoint); //获取鼠标的位置（绝对位置-对应屏幕分辨率）<br />
BOOL GetWindowRect(HWND hwnd,LPRECT lpRect); //获取窗体位置<br />
#pragma code();<br />
POINT pPos;<br />
RECT rRec;<br />
HWND hwnd;<br />
BOOL bRet,bRet2;<br />
long lLeft,lTop,lWidth,lHeight;<br />
long lX,lY;<br />
char szStr[100];</p>
<p>hwnd=FindWindow(NULL,&#8221;WinCC-Runtime &#8211; &#8220;); //如语言为中文应为&#8221;WinCC 运行系统-&#8221;</p>
<p>if (hwnd==0) {printf(&#8220;rnError! WinCc Handle is %d&#8221;,hwnd);goto over;}</p>
<p>bRet=GetCursorPos(&amp;pPos);<br />
if (bRet==0) goto over;</p>
<p>bRet2=GetWindowRect(hwnd,&amp;rRec);<br />
if (bRet2==0) goto over;<br />
lX=pPos.x-rRec.left; //鼠标 对{置<br />
lY=pPos.y-rRec.top; //鼠标 位置<br />
//如果为非全屏模式，需将上述数值中的高height判断减去标题栏的宽度<br />
//printf(&#8220;The Current Cusor Pos is x:%d,y:%drn&#8221;,pPos.x,pPos.y);<br />
//printf(&#8220;The Cusor Pos in Window is x:%d,y:%drn&#8221;,pPos.x-lLeft2,pPos.y-lTop2);<br />
lLeft=GetLeft(&#8220;NewPdl0.Pdl&#8221;,&#8221;Text1&#8243;); //Return &#8211; Type :long int<br />
lTop=GetTop(&#8220;NewPdl0.Pdl&#8221;,&#8221;Text1&#8243;); //Return &#8211; Type :long int<br />
lWidth=GetWidth(&#8220;NewPdl0.Pdl&#8221;,&#8221;Text1&#8243;); //Return &#8211; Type :long int<br />
lHeight=GetHeight(&#8220;NewPdl0.Pdl&#8221;,&#8221;Text1&#8243;); //Return &#8211; Type :long int</p>
<p>if ((lX&gt;=lLeft)&amp;&amp;(lY&gt;=lTop)&amp;&amp;(lX&lt;=lLeft+lWidth)&amp;&amp;(lY&lt;=lTop+lHeight)) {</p>
<p>sprintf(szStr,&#8221;%d,%d&#8221;,lX,lY);<br />
SetText(&#8220;NewPdl0.Pdl&#8221;,&#8221;Text1&#8243;,szStr); //Return &#8211; Type :char*</p>
<p>}<br />
//printf(&#8220;The Text1 Pos is x:%d,y:%drn&#8221;,lLeft2,lTop-lTop2);<br />
over:<br />
return 0;<br />
}</p>
<p>46:如何实现ASP与WinCC V6数据库sql server 2000的连接?<br />
WinCC V6用ODK获取DSN名，{后生成网址字符串，再用shellExecuteA函数打开网页<br />
//&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
#pragma code(&#8220;shell32.dll&#8221;)<br />
long ShellExecuteA(HWND,LPCTSTR,LPCTSTR,LPCTSTR,LPCTSTR,int);<br />
#pragma code()</p>
<p>char dsnStr[100];<br />
HWND hwnd;<br />
sprintf(dsnStr,&#8221;http://dcount/test.asp?dsnStr=%s&#8221;,GetDSN(1)); //Return-Type: LPCTSTR<br />
printf(&#8220;rn%s&#8221;,dsnStr);<br />
hwnd=FindWindow(NULL,&#8221;WinCC &#8211; Runtime &#8220;);<br />
ShellExecuteA(hwnd,&#8221;open&#8221;,dsnStr,NULL,&#8221;C:&#8221;,SW_SHOWNORMAL);<br />
//&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>ASP方面需要注意的是连接字符串的形式与普通acess ODBC不太一样，而且需要用户名和密码<br />
由于WINCC封装的sa用户的密码暂时不知道，所以必须用SQL Server EnterPrise Manager建立自己的用户，添加system Administrator权限就可以了！否则会出现错误提示<br />
Microsoft OLE DB Provider for SQL Server 错误 &#8217;80040e4d&#8217;<br />
Login failed for user &#8216;sa&#8217;.</p>
<p>&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
dsnStr=request(&#8220;dsnStr&#8221;)<br />
set conn=server.createobject(&#8220;adodb.connection&#8221;)<br />
set rs=server.createobject(&#8220;adodb.recordset&#8221;)<br />
conn.Provider = &#8220;sqloledb&#8221;<br />
conn.open &#8220;Server=DCOUNTWINCC;Database=&#8221; &amp; dsnStr &amp; &#8220;;UID=dcount;pwd=;&#8221;<br />
rs.open &#8220;select * from test&#8221;,conn,1,1<br />
response.write rs.recordcount<br />
do while not rs.eof<br />
response.write rs(&#8220;f1&#8243;) &amp; &#8220;&#8212;&#8221; &amp; rs(&#8220;f2&#8243;) &amp; &#8220;&#8212;&#8221; &amp; rs(&#8220;f3&#8243;)<br />
rs.movenext<br />
loop<br />
rs.close<br />
conn.close</p>
<p>47:如何在退出WINCC监控时直接关闭电脑?<br />
1.利用动态向导<br />
2.在脚本中加入 DMExitWinCCEx (DM_SDMODE_SYSTEM);也可以</p>
<p>48:如何通过WINCC API函数读出当前报警消息?<br />
1、使用GMsgFunction中读出当前报警信息的ID（dwMsgNr）；<br />
2、使用MSRTGetMsgCSData函数读出该报警信息ID对应文本库TEXTLIB中的文本ID（dwTextID1）；<br />
3、使用MSRTGetMsgText函数读出该文本ID的文本。<br />
信息到达处理：如果读取文本成功，则置文本变量MSG。<br />
信息离去处理：如果MsgNr与上一次相同，则复位MSG，如果不是，则继续保持信息。<br />
具体函数说明请看ODK文档<br />
BOOL GMsgFunction( char* pszMsgData)<br />
{<br />
#pragma code(&#8220;msrtcli.dll&#8221;)<br />
＃i nclude &#8220;msrtapi.h&#8221;<br />
#pragma code();</p>
<p>MSG_TEXT_STRUCT tMeld;<br />
MSG_CSDATA_STRUCT sM;<br />
CMN_ERROR err;<br />
BOOL bRet;<br />
DWORD dwTextID1;<br />
DWORD dwMsgNum;<br />
char szMsg[255];<br />
#define TAG_MSG &#8220;MSG&#8221;</p>
<p>MSG_RTDATA_STRUCT mRT;<br />
memset( &amp;mRT, 0, sizeof( MSG_RTDATA_STRUCT ) );</p>
<p>if( pszMsgData != NULL )<br />
{</p>
<p>printf( &#8220;Meldung : %s rn&#8221;, pszMsgData );<br />
sscanf( pszMsgData, &#8220;%ld,%ld,%04d.%02d.%02d,%02d:%02d:%02d:%03d,%ld, %ld, %ld, %d,%d&#8221;,<br />
&amp;mRT.dwMsgNr, // Meldungsnummer<br />
&amp;mRT.dwMsgState, // Status MSG_STATE_COME, .._GO, .._QUIT, .._QUIT_SYSTEM<br />
&amp;mRT.stMsgTime.wYear, // Tag<br />
&amp;mRT.stMsgTime.wMonth, // Monat<br />
&amp;mRT.stMsgTime.wDay, // Jahr<br />
&amp;mRT.stMsgTime.wHour, // Stunde<br />
&amp;mRT.stMsgTime.wMinute, // Minute<br />
&amp;mRT.stMsgTime.wSecond, // Sekunde<br />
&amp;mRT.stMsgTime.wMilliseconds, // Millisekunde<br />
&amp;mRT.dwTimeDiff, // Zeitdauer der anstehenden Meldung<br />
&amp;mRT.dwCounter, // Interner Meldungsz?hler<br />
&amp;mRT.dwFlags, // Flags( intern )<br />
&amp;mRT.wPValueUsed,<br />
&amp;mRT.wTextValueUsed );</p>
<p>//**************************************************************************************code for dcount<br />
if (mRT.dwMsgState==MSG_STATE_COME)//信息到达处理<br />
{<br />
dwMsgNum=mRT.dwMsgNr;<br />
printf(&#8220;rnThe Alarm Message No is %d !rn&#8221;,dwMsgNum);<br />
bRet=MSRTGetMsgCSData(dwMsgNum,&amp;sM,&amp;err);<br />
if (bRet==TRUE)<br />
{<br />
dwTextID1=sM.dwTextID[0];<br />
printf(&#8220;rnThe TextID of The MessageNr %d is %d !rn&#8221;,dwMsgNum,dwTextID1);<br />
bRet=MSRTGetMsgText(1,dwTextID1,&amp;tMeld,&amp;err);<br />
if (bRet==TRUE)<br />
{<br />
sprintf(szMsg,&#8221;%s&#8221;,tMeld.szText);<br />
printf(&#8220;rnThe Text of TextID %d is %s !rn&#8221;,dwTextID1,szMsg);<br />
}</p>
<p>}</p>
<p>}<br />
if (mRT.dwMsgState==MSG_STATE_GO)//信息离去处理<br />
{<br />
dwMsgNum=mRT.dwMsgNr;<br />
if (dwMsgNum==GetTagDWord(TAG_MSG_NR)) SetTagChar(TAG_MSG,&#8221;");</p>
<p>}<br />
//**************************************************************************************code for dcount</p>
<p>// Meldungsdaten einlesen</p>
<p>// Prozesswerte lesen, falls gew???????§???1nscht<br />
}</p>
<p>printf(&#8220;Nr : %d, St: %x, %d-%d-%d %d:%d:%d.%d, Dur: %d, Cnt %d, Fl %drn&#8221; ,<br />
mRT.dwMsgNr, mRT.dwMsgState, mRT.stMsgTime.wDay, mRT.stMsgTime.wMonth, mRT.stMsgTime.wYear,<br />
mRT.stMsgTime.wHour, mRT.stMsgTime.wMinute, mRT.stMsgTime.wSecond, mRT.stMsgTime.wMilliseconds, mRT.dwTimeDiff,<br />
mRT.dwCounter, mRT.dwFlags ) ;</p>
<p>SetTagChar(TAG_MSG,szMsg);</p>
<p>return( TRUE );<br />
}</p>
<p>49:如何实现用户登陆日志（wincc中用c脚本实现?)( 柳树成林原创)<br />
用户登陆日志：（包括用户的登陆退出信息，以便查询在什么时间段是哪个用户在使用这个监控软件）</p>
<p>＃i nclude &#8220;apdefap.h&#8221;</p>
<p>int gscAction( void )<br />
{<br />
#pragma code(&#8220;kernel32.dll&#8221;)<br />
VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);<br />
#pragma code()</p>
<p>char* username;<br />
char buf[128];<br />
static char preuser[128];<br />
unsigned a,b,c,d,e,f;<br />
FILE* fp;<br />
SYSTEMTIME sysTime;</p>
<p>//读取系统时间,并且复制给变量a,b,c,d,e,f<br />
GetLocalTime(&amp;sysTime);</p>
<p>a=sysTime.wHour;<br />
b=sysTime.wMinute;<br />
c=sysTime.wSecond;<br />
f=sysTime.wYear;<br />
e=sysTime.wMonth;<br />
d=sysTime.wDay;</p>
<p>//得到当前用户名称<br />
username = GetTagChar(&#8220;@CurrentUser&#8221;);<br />
fp= fopen(&#8220;c:wincclog.txt&#8221;, &#8220;a+&#8221;);<br />
if(strcmp(username, preuser)!=0) //如果当前用户名称和前一个用户名不同<br />
{<br />
if((strcmp(username, &#8220;&#8221;) != 0)&amp;&amp;(strcmp(preuser, &#8220;&#8221;) == 0)) //如果当前用户名称不空同时前一个用户名为空</p>
<p>{<br />
sprintf(buf, &#8220;用户:%st登陆时间是：t %d-%d-%d,%d-%d-%dn&#8221;, username,a,b,c,d,e,f);<br />
fputs(buf, fp);<br />
}<br />
else<br />
{<br />
if((strcmp(username, &#8220;&#8221;) == 0)&amp;&amp;(strcmp(preuser, &#8220;&#8221;) != 0)) //如果当前用户名称为空同时前一个用户名不空</p>
<p>{<br />
sprintf(buf, &#8220;用户:%st退出时间是：t %d-%d-%d,%d-%d-%dn&#8221;, preuser,a,b,c,d,e,f);<br />
fputs(buf, fp);<br />
}</p>
<p>else<br />
{<br />
sprintf(buf, &#8220;用户:%st退出时间是：t %d-%d-%d,%d-%d-%dn&#8221;, preuser,a,b,c,d,e,f);<br />
fputs(buf, fp);<br />
sprintf(buf, &#8220;用户:%st登陆时间是：t %d-%d-%d,%d-%d-%dn&#8221;, username,a,b,c,d,e,f);<br />
fputs(buf, fp);<br />
}<br />
}<br />
}</p>
<p>strcpy(preuser, username);<br />
fclose(fp);</p>
<p>return 0;<br />
}</p>
<p>50:在wincc画面编辑器里注册的OCX控件，由于开发时没有考虑到wincc标准控件中具备层次哪个属性！所以不能够通过画面编辑器里的菜单进行设置OCX控件的层次关系！</p>
<p>建议不要把wincc中注册的OCX控件和wincc本身的标准控件重叠放置，否则wincc本身的标准控件将被覆盖！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flyang.net/?feed=rss2&#038;p=59</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转载]WinCC的n个经典问题解答(21-40)</title>
		<link>http://www.flyang.net/?p=57</link>
		<comments>http://www.flyang.net/?p=57#comments</comments>
		<pubDate>Thu, 14 Jul 2011 08:29:04 +0000</pubDate>
		<dc:creator>flyang</dc:creator>
				<category><![CDATA[WinCC]]></category>

		<guid isPermaLink="false">http://www.flyang.net/?p=57</guid>
		<description><![CDATA[wincc的n个经典问题解答(21-40) 21： WINCC&#8211;如何在程序中动态修改用户密码 1、点击“开始”&#8211;》“设置”&#8211;》“控制面板”&#8211;》“管理工具”&#8211;》“数据源（ODBC）”，打开ODBC数据源管理器 2、在用户DSN页面的用户数据源中找到与当前项目所关联的一项，其名称为“CC_项目名_项目建立日期时间”，记下该项的名称 3、在脚本中加入以下代码： #pragma code(&#8220;UseGen.dll&#8221;) #include &#8220;USEGENAP.H&#8221; #pragma code() LPCMN_ERROR err; //定义的LPCMN_ERROR型变量,在函数调用中需使用 if (PWGENConnect(&#8220;CC_ass_04-09-21_16:35:22&#8243;,err)) //建立与数据库的联接,其中CC_ass_04-09-21_16:35:22用第二步中记下的名称取代 { if (PWGENChangePassword(GetTagChar(&#8220;user&#8221;),GetTagChar(&#8220;oldpassword&#8221;),GetTagChar(&#8220;password&#8221;),err)) //修改密码,user,oldpassword,password分别为存贮用户名,原密码,新密码的内部变量,类型为文本变量8位字符集 { //密码修改成功后的操作,如给用户提示等 } } PWGENDisconnect(err); //断开与数据库的联接 4、编译运行程序 5、工作完成 6、与用户管理相关的函数定义存贮在APPLIB目录下的USEGENAP.H文件中，可根据上面示例自行完成添加用户，修改权限等功能。 22：WinCC6.0 中归档时和5.1版本为什么不同了？ WinCC V6.0 的后台数据库采用了MS SQL Server 2000，所以归档方式与V5.1 有所不同，它的运行数据存放在数据片段（segment）当中，工程师可以根据尺寸需求组态最大容量或根据时间周期启动新的数据库归档片段。将归档数据连续的写入数据库，单个数据片段的尺寸到达或者时间界限到达时，系统会自动开启另一个数据片段进行归档。当数据片段的总体尺寸达到最大时，最早的数据片段就会被覆盖，重新开始新的归档。 &#8230; <a href="http://www.flyang.net/?p=57">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>wincc的n个经典问题解答(21-40)</p>
<p>21： WINCC&#8211;如何在程序中动态修改用户密码<br />
1、点击“开始”&#8211;》“设置”&#8211;》“控制面板”&#8211;》“管理工具”&#8211;》“数据源（ODBC）”，打开ODBC数据源管理器<br />
2、在用户DSN页面的用户数据源中找到与当前项目所关联的一项，其名称为“CC_项目名_项目建立日期时间”，记下该项的名称<br />
3、在脚本中加入以下代码：<br />
#pragma code(&#8220;UseGen.dll&#8221;)<br />
#include &#8220;USEGENAP.H&#8221;<br />
#pragma code()<br />
LPCMN_ERROR err; //定义的LPCMN_ERROR型变量,在函数调用中需使用<br />
if (PWGENConnect(&#8220;CC_ass_04-09-21_16:35:22&#8243;,err)) //建立与数据库的联接,其中CC_ass_04-09-21_16:35:22用第二步中记下的名称取代<br />
{<br />
if (PWGENChangePassword(GetTagChar(&#8220;user&#8221;),GetTagChar(&#8220;oldpassword&#8221;),GetTagChar(&#8220;password&#8221;),err)) //修改密码,user,oldpassword,password分别为存贮用户名,原密码,新密码的内部变量,类型为文本变量8位字符集<br />
{<br />
//密码修改成功后的操作,如给用户提示等<br />
}<br />
}<br />
PWGENDisconnect(err); //断开与数据库的联接<br />
4、编译运行程序<br />
5、工作完成<br />
6、与用户管理相关的函数定义存贮在APPLIB目录下的USEGENAP.H文件中，可根据上面示例自行完成添加用户，修改权限等功能。</p>
<p>22：WinCC6.0 中归档时和5.1版本为什么不同了？<br />
WinCC V6.0 的后台数据库采用了MS SQL Server 2000，所以归档方式与V5.1 有所不同，它的运行数据存放在数据片段（segment）当中，工程师可以根据尺寸需求组态最大容量或根据时间周期启动新的数据库归档片段。将归档数据连续的写入数据库，单个数据片段的尺寸到达或者时间界限到达时，系统会自动开启另一个数据片段进行归档。当数据片段的总体尺寸达到最大时，最早的数据片段就会被覆盖，重新开始新的归档。<span id="more-57"></span></p>
<p>23：WinCC6.0 中如何设定归档周期？<br />
WinCC V6.0 版本中的快慢速归档的归档周期界限可以由用户自行设<br />
定，该参数在快速归档属性的第三个标签项中设置。<br />
24：如何计算慢速归档数据库的尺寸？<br />
慢速归档时一条变量归档记录占用32 字节的空间，每个变量以2 分钟为归档周期，一周之内会产生5040 条记录，若有5000 个变量的归档，则单个数据片段的大小计算为：<br />
32×5000×5040＝806400000 byte ＝＝&gt; 约等于800MB<br />
考虑到留出20％的余量，设定单个数据片段为1G<br />
所有数据归档期限是两个月，因此所有段的尺寸为单个片段尺寸乘以单个片段的个数，<br />
即：1GB×9＝9GB</p>
<p>25：如何计算快速速归档数据库的尺寸？<br />
快速归档时一条变量归档记录占用3 字节的空间，每个变量以2 秒钟为归档周期，一周之内会产生302400 条记录，若有50 个变量的归档，则单个数据片段的大小计算为：<br />
3×50×302400＝45360000 byte ＝＝&gt; 约等于46MB<br />
考虑到留出20％的余量，设定单个数据片段为60MB<br />
所有数据归档期限是两个月，因此所有段的尺寸为单个片段尺寸乘以单个片段的个数，即：60MB×9＝540MB</p>
<p>26：所有的归档变量都可以计算出它占用的数据库大小吗？<br />
只有周期连续归档的数据才能定量的计算其占用的数据库尺寸，因此当您对应设定的时间期限计算并设置数据库尺寸大小时，需要考虑其他数据归档类型的数据，留出相应的余量。</p>
<p>27：WinCC V5.1 中文版的安装要求是什么？<br />
1）WinCC V5.1 亚洲版只有V5.1 这一个版本，不再有后继版本，WinCC V5.1 亚洲版应安装在Windows 2000 SP2 操作系统上<br />
2) WinCC 的语言版本应和操作系统的语言版本相对应，不建议将中文WinCC 装在英文操作系统上</p>
<p>28：有没有快捷的方法如何将WinCC的实时数据通过OPC DA记录到MS Access、MS SQL Server和Oracle数据库中？<br />
可以使用WinCC Industrial Data Bridge将WinCC的实时数据通过OPC DA记录到MS Access、MS SQL Server和Oracle数据库中，但是需要授权，分为以128、 512、2K和10K</p>
<p>29：WinCC 能提供的最高变量刷新速度是多少？<br />
对于一般的网络通讯方式来说，WinCC 能提供的最高刷新速度是250 毫秒，但WinCC 采用RawData 归档数据链接的方式可以实现对S7-400PLC 的高速数据采集。</p>
<p>30：如何实现WinCC 高速数据采集？<br />
WinCC 采用RawData 归档数据链接的方式可以实现对S7-400PLC 的高速数据采集。原理是PLC 将每个循环周期所采集的过程值（或PLC 以其他方式得到的数据或数据包）以一定的顺序存放在具有一定的格式的DB 块中，当到达一定的数量后，PLC 可以调用系统功能块 SFB37（AR_Send）将这个DB 块主动地发送给WinCC, 然后WinCC 会在后台自动调用标准化DLL 来拆解数据，并将其按时间顺序保存在数据库中。在WinCC 的过程画面中，可以使用在线趋势控件或在线表格控件来查看所采集的数据。<br />
由于是批量传送，可以有效地提高通讯效率，使高速数据采集成为可能，而这时所谓的采集频率就取决于你对保存在DB 块中的各过程值间的时间间隔的定义。可以定义的最小的时间间隔是1 毫秒。但如果是PLC 每个循环周期采样一次，那么定义的时间间隔应大于PLC 循环周期。DB 块的最大尺寸是16KB。<br />
技巧：可以考虑使用多DB 块进行缓冲并添加程序控制DB块的写入和发送顺序，能够实现连续的采集，但要充分考虑CPU 的负载和循环周期。</p>
<p>31：WinCC 高速数据采集的前提条件是什么？<br />
1） WinCC 的版本为 V5.1 或更高<br />
2） S7-400 系列CPU<br />
3） WinCC 站与S7 400 站建立S7 连接（包括MPI,ProfiBus,TCP/IP,工业以太网都可以实现）</p>
<p>32：为什么我无法从WinCC里调用STEP 7 变量？<br />
从WinCC里调用STEP 7 变量的前提条件是，WinCC的项目文件必须是集成在STEP 7项目中的。<br />
在安装所有Simatic 软件前，请查阅软件的安装注意事项，确定操作系统与软件的兼容性。该文档一般位于：CDDocuments&lt;语言版本&gt;InstallNotes.chm。<br />
要使用WinCC与STEP 7的集成功能，WinCC和STEP 7必须安装在同一台计算机上，必须在安装WinCC之前安装STEP 7。STEP 7 与WinCC的版本必须一致。</p>
<p>33：如何把现成的WinCC项目集成到STEP 7 项目中？<br />
如果你在一台计算机上已经安装了兼容的WinCC和STEP 7，并且有了一个单独使用的WinCC项目，想把它集成到一个已有的STEP 7项目中去。那么，你必须先添加与集成相关的WinCC组件。把WinCC光盘放入光驱，并启动WinCC的安装程序。添加与集成相关的WinCC组件。<br />
按如下步骤把已有WinCC项目文件插入STEP 7项目文件<br />
1.在STEP 7项目文件中插入一个OS站，然后把它改名为已有的WinCC项目名称。<br />
2.在STEP 7项目里删除因仅插入OS站而产生的WinCC项目文件，其位置在STEP 7 项目文件夹里的wincproj文件夹下，例如：d:siemensSTEP7S7projSTEP7_Integrationwincproj&#8217;Name of the OS&#8217;<br />
3.最后在项目复制器里用’Save as’把已有的WinCC项目文件存储到STEP 7项目路径下。项目复制器位于开始菜单项&#8221;Start &gt; SIMATIC &gt; WinCC &gt; Tools&#8221;。<br />
注意：对于集成STEP 7项目里的WinCC项目，你也可以使用压缩工具（Packer）来归档WinCC项目。</p>
<p>34：wincc怎样和s7plc-sim连接？<br />
要访问PLCSIM模拟软件，必须按如下方法操作，按照以下的顺序来安装程序：<br />
STEP 7 V 5.x<br />
PLCSIM V4.x以上<br />
WinCC V5.x<br />
选择用户自定义安装。 对于SIMATIC WinCC V5<br />
SP1及以下版本的用户,在“通讯”组件下，必须选择“S7Dos”和“对象管理器”组件。<br />
对于SIMATIC WinCC V5<br />
SP2及更高版本的用户，“S7Dos”是自动安装的。就是说不再需要在“用户自定义安装”下选择该选项。在PG/PC界面上做如下设置：在控制面板中双击“设置PG/PC界面”。在“应用程序的访问点”域中，选择“MPI<br />
(WinCC)”。在“使用的界面参数”域中选择“&lt;无&gt;”。启动应用程序STEP 7：<br />
启动SIMATIC管理器<br />
启动PLCSIM<br />
打开要模拟的项目或组态一个项目。<br />
在项目中添加一个OS。<br />
在PLCSIM中加载项目。<br />
启动WinCC并创建一个新项目或打开已有的项目。<br />
WinCC<br />
添加“SIMATIC S7 PROTOCOL SUITE”到变量管理器。<br />
在MPI下添加一个新连接。<br />
右击该连接然后选择“属性”。<br />
点击“属性”按钮。<br />
在“连接”标签中指定MPI地址和已在STEP 7中组态好的CPU的插槽。<br />
确认所做的指定。<br />
激活WinCC项目。<br />
进入“开始 &gt; SIMATIC &gt; WinCC &gt; 工具 &gt; 通道诊断”。在“通道连接”下可以显示连接的状态。<br />
如果连接没能设好：在WinCC资源管理器中的“系统参数 &#8211; MPI &gt; 单元”中，启用选项“自动设置”。<br />
在“系统参数 &#8211; MPI &gt; 通道”中，取消“使用PLC的循环读取服务”选项。<br />
wincc和西门子PLC仿真通讯需要PLCSIM ，先将PLCSIM<br />
运行，建立一个WINCC项目，使用MPI通讯即可，说白了跟MPI通讯一样，只是PLC是用PLCSIM 在计算机上模拟的<br />
但是有一点要注意的是，这种方式下不能使用输入区（I区），凡是有输入的地方都要用M区来代替<br />
可以使用输入区（I区），只是有些特殊功能不能用。</p>
<p>35：WINCC-如何使用自定义的对话框实现用户登录？</p>
<p>在登录按钮中加处以下脚本:<br />
#pragma code(&#8220;useadmin.dll&#8221;)</p>
<p>#include &#8220;PWRT_API.H&#8221;</p>
<p>#pragma code()</p>
<p>if (PWRTSilentLogin(&#8220;username&#8221;, &#8220;PassWord&#8221;))<br />
{<br />
//登录成功后的处理<br />
}</p>
<p>其中&#8221;USERNAME&#8221;,&#8221;PASSWORD&#8221;可以用存储用户名和密码的变量替换.如:<br />
PWRTSilentLogin(GetTagChar(&#8220;user&#8221;), GetTagChar(&#8220;PassWord&#8221;))</p>
<p>当登录成功时,函数返回值为真;如登录失败,则返回值为假。</p>
<p>36：WINCC-如何使用自定义的对话框实现用户退出？<br />
实现登陆：<br />
#pragma code(&#8220;&#8221;useadmin.dll)<br />
#include &#8220;PWRT_api.h&#8221;<br />
#Pragma code()<br />
PWRTlogin(&#8217;1&#8242;);<br />
实现退出：<br />
#pragma code(&#8220;&#8221;useadmin.dll)<br />
#include &#8220;PWRT_api.h&#8221;<br />
#Pragma code()<br />
PWRTlogout();</p>
<p>37：如何把GIF图片放到wincc中？<br />
首先插入aniGIF.ocx这个ole控件，然后双击它，在GIF属性中选择您需要显示的GIF图片就可以了。</p>
<p>38：如何将低版本创建的项目移植到WinCCV6.0中？<br />
将项目移植到WinCC V6.0的工作步骤：<br />
WinCC V6.0与其以前的版本相比在数据组织方面有着显著的不同。为了使在WinCC V5.0 Service Pack2或WinCC V5.1中创建的项目在WinCC V6.0中也能工作，项目数据必须首先通过移植作相应的调整。为此，WinCC V6.0提供了一个项目移植器，用于自动移植项目的组态数据、运行系统数据和归档数据在移植之前，建议为原版本的项目做一个备份。与此有关的信息参见WinCC信息系统中的主题“使用WinCC”&gt;“使用项目”&gt;“复制和归档项目”。<br />
已归档的文件:如果必须访问先前版本的归档数据，则必须将归档移植到WinCC V6.0。请使用项目移植器移植归档数据和dBASE III归档。<br />
多用户项目:为了使利用WinCC V5.0 SP2或V5.1所创建的多用户项目在WinCC V6.0中能够正常工作，可进行如下操作：<br />
移植系统中所有服务器上的单个多用户项目。如果原来的项目使用了多客户机，则分别单独移植多客户机的项目数据。正常操作中的冗余系统,不用取消激活操作就可在冗余系统中对项目进行升级。此时，将按规定的次序升级服务器、客户机和多客户机。章节“在正常操作中升级冗余系统”中提供了有关的详细说明。<br />
警惕:为了不影响系统操作，必须遵守所描述的步骤次序，且完成所有步骤时不能有任何长时间的中断。<br />
早于WinCC V5.0 Service Pack 2的WinCC版本:对于早于WinCC V5.0 SP2的WinCC版本所创建的项目，必须一步一步地进行移植,将系统先升级到WinCC V5.1，并移植项目。安装WinCC V6.0，并使用项目移植器移植项目。</p>
<p>39：wincc6.0中支持ab plc的驱动吗？<br />
WinCC V6.0将不再提供下列通讯通道：<br />
Allen Bradley DH DH+ DH485<br />
Allen Bradley Serial DF1<br />
Applicom Multi Protocol Interface<br />
GE Fanuc SNP SNPX<br />
Mitsubishi FX<br />
Modbus Protocol Suite<br />
Modbus Serial<br />
SIMATIC S5 PMC Ethernet<br />
SIMATIC S5 PMC Profibus<br />
SIPART<br />
可以用OPC来替代。某些通道需附加件的支持。<br />
40：WINCC的授权坏了，显示“Authorization SIK/SIMATIC WINCC RT 128 PowerTags is faulty.”，重新安装显示已经存在此授权，请问要怎么处理？<br />
可以询问原来的销售商索要一个激活码，可以在authorsw中manageauthorization中右键单击选择“recover autrorization”输入激活码激活授权即可。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flyang.net/?feed=rss2&#038;p=57</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转载]WinCC的n个经典问题解答(1-20)</title>
		<link>http://www.flyang.net/?p=54</link>
		<comments>http://www.flyang.net/?p=54#comments</comments>
		<pubDate>Thu, 14 Jul 2011 08:27:05 +0000</pubDate>
		<dc:creator>flyang</dc:creator>
				<category><![CDATA[WinCC]]></category>

		<guid isPermaLink="false">http://www.flyang.net/?p=54</guid>
		<description><![CDATA[wincc的n个经典问题解答(1-20) 1、问： 如何触发计算机扬声器的声音？ 答： 编写如下C-Action: #pragma code(&#8220;kernel32.dll&#8221;); BOOL Beep(DWORD dwFreq,DWORD dwDuration); #pragma code(); Beep(500,500); 2、问： 如何通过C脚本来确定报警信息？ 答： 首先必须在画面中插入报警控件，可以用如下两种方式来确认信息： （1）、确认单条信息 4版本和高于此版本的WinCC BOOL OnBtnSinglAckn（char*lpszPictureName,char*lpszObjectName） 5版本和高于此版本的WinCC BOOL AXC_OnBtnSinglAckn（char*lpszPictureName,char*lpszObjectName） （2）、确认报警窗口所有可见的报警 4版本和低于此版本的WinCC BOOL OnBtnVisibleAckn（char*lpszPictureName,char*lpszObjectName） 5版本和高于此版本的WinCC BOOL AXC_OnBtnVisibleAckn（char*lpszPictureName,char*lpszObjectName） 3、问： 如何在WinCC中读取系统时间？ 答： 通过如下C-Action： #pragma code(&#8220;kernel32.dll&#8221;); Void GetLocalTimes(SYSTEMTIME*lpst); &#8230; <a href="http://www.flyang.net/?p=54">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>wincc的n个经典问题解答(1-20)</p>
<p>1、问： 如何触发计算机扬声器的声音？<br />
答： 编写如下C-Action:<br />
#pragma code(&#8220;kernel32.dll&#8221;);<br />
BOOL Beep(DWORD dwFreq,DWORD dwDuration);<br />
#pragma code();<br />
Beep(500,500);<span id="more-54"></span></p>
<p>2、问： 如何通过C脚本来确定报警信息？</p>
<p>答： 首先必须在画面中插入报警控件，可以用如下两种方式来确认信息：<br />
（1）、确认单条信息<br />
4版本和高于此版本的WinCC<br />
BOOL OnBtnSinglAckn（char*lpszPictureName,char*lpszObjectName）<br />
5版本和高于此版本的WinCC<br />
BOOL AXC_OnBtnSinglAckn（char*lpszPictureName,char*lpszObjectName）</p>
<p>（2）、确认报警窗口所有可见的报警<br />
4版本和低于此版本的WinCC<br />
BOOL OnBtnVisibleAckn（char*lpszPictureName,char*lpszObjectName）</p>
<p>5版本和高于此版本的WinCC<br />
BOOL AXC_OnBtnVisibleAckn（char*lpszPictureName,char*lpszObjectName）</p>
<p>3、问： 如何在WinCC中读取系统时间？</p>
<p>答： 通过如下C-Action：<br />
#pragma code(&#8220;kernel32.dll&#8221;);<br />
Void GetLocalTimes(SYSTEMTIME*lpst);<br />
#pragma code();<br />
SYSTEMTIME time;<br />
GetLocalTime(&amp;time);<br />
SetTagWord(&#8220;Varname&#8221;,time.wYear);<br />
SetTagWord(&#8220;Varname&#8221;,time.wMonth);<br />
SetTagWord(&#8220;Varname&#8221;,time.wDayOfWeek);<br />
SetTagWord(&#8220;Varname&#8221;,time.wDay);<br />
SetTagWord(&#8220;Varname&#8221;,time.wHour);<br />
SetTagWord(&#8220;Varname&#8221;,time.wMinute);<br />
SetTagWord(&#8220;Varname&#8221;,time.wSecond);<br />
SetTagWord(&#8220;Varname&#8221;,time.wMilliseconds);</p>
<p>4、问： 如何经Windows对话框设置日期时间？</p>
<p>答： 通过调用Windows对话框实现。具体如下：<br />
#include&#8221;apdefap.h&#8221;<br />
void onClick(char*lpszPictureName,char*lpszObjectName,<br />
char*lpszPropertyName)<br />
{ProgramExcute(&#8220;c:win98control.exe timedate.cpl&#8221;);}<br />
其中执行的程序路径，需根据具体情况填写。</p>
<p>5、问： 如何在WinCC中调用SQL语言？</p>
<p>答： 1、创建一个 SQL文件，此文件在ISQL中建立，文件内包含所要执行的SQL语句。Windows对话框实现。具体如下：<br />
2、在WinCC中用C Script 调用上述SQL文件，如下所示：<br />
#include&#8221;apdefap.h&#8221;<br />
void OnLButtonDown(char* lpszPictureName,<br />
char* lpszObjectName,<br />
char* lpszPropertyName,<br />
UINT nFlags,int x,int y)<br />
{<br />
char*a=&#8221;c:siemenscommonSQLANYISQL-q-b-c<br />
UID=DBA;PWD=SQL;DBF=E:testsqltestsqlRT.DB;<br />
DBN=CC_testsql_99-12-03-12:48:26R;READ<br />
E:testsqltest.sql&#8221;;<br />
Printf(&#8220;%srn&#8221;,a);<br />
ProgramExcute(a);<br />
}<br />
下面是一个简单的SQL文件内容：<br />
select *from pde#hd#t#test;<br />
output to e:test2.txt FORMAT ascii<br />
注意：文件名及路径中不要带空格。</p>
<p>6、问： 如何整点启动归档？</p>
<p>答： 在&#8221;Globle Script&#8221;下的Project function编写程序函数：cyclicarchive<br />
BOOL cyclicarchive()<br />
{<br />
#pragma code(&#8220;kernel.dll&#8221;);<br />
void GetLocalTime(SYSTEMTIME*lpsz);<br />
#pragma code();<br />
SYSTEMTIME time;<br />
Int t1;<br />
GetLocalTime(&amp;time);<br />
T1=time.wMinute;<br />
If(t1==00)<br />
{<br />
SetTagBit(&#8220;startarchive&#8221;,1);<br />
Return(BOOL) (GetTagBit(&#8220;startarchive&#8221;));<br />
}<br />
}<br />
在Tagloging中的&#8221;Properties of process tag&#8221;中的&#8221;archive tag&#8221;Tab下的Archive type选择Cycle-selective，在&#8221;Event&#8221;标签下的&#8221;StartEvent&#8221;内选择cyclicarchive函数。</p>
<p>7、问： How can I set and reset a WinCC variable by m</p>
<p>答： The following function shows how you can alternately set and reset a WinCC variable by mouse click.<br />
#include &#8220;apdefap.h&#8221;<br />
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)<br />
{<br />
BOOL z;<br />
z=GetTagBit(&#8220;MyBitVariable&#8221;);<br />
if (z==0)<br />
SetTagBit(&#8220;MyBitVariable&#8221;,1);<br />
else<br />
SetTagBit(&#8220;MyBitVariable&#8221;,0);<br />
}</p>
<p>8、问： How can I program a waiting function (Sleep)</p>
<p>答： The following sample program shows how the &#8220;Sleep&#8221; is used.<br />
#pragma code(&#8220;Kernel32.dll&#8221;)<br />
void Sleep(int milliseconds);<br />
#pragma code()<br />
Sleep(1000); //time specification in milliseconds<br />
Warning:<br />
If you use Sleep(), processing the C script is interrupted for the time indicated. Requests for the interrupted function cannot be processed during this time.</p>
<p>9、问： How can I output a SIMATIC timer minutes and</p>
<p>答： If you want to output a SIMATIC Timer in minutes and seconds in WinCC, then in WinCC please use a static text in the Graphics Designer to which you interface the following action:<br />
char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)<br />
{<br />
char *p;<br />
DWORD hilf;<br />
int min, sec;<br />
p=SysMalloc(10);<br />
hilf=GetTagDWord(&#8220;Time&#8221;);<br />
min=hilf/60000;<br />
sec=hilf%60000/1000;<br />
sprintf(p,&#8221;%d min %d sec&#8221;,min,sec);<br />
return p;<br />
}<br />
The &#8220;Time&#8221; variable linked to the I/O field must have the following properties:<br />
&amp;#8226;Data type &#8220;32-bit value without sign&#8221;<br />
&amp;#8226;Format adaptation &#8220;DwordToSimaticBCDTimer&#8221;<br />
&amp;#8226;Address: data area &#8220;Times&#8221; and addressing &#8220;Word&#8221;</p>
<p>10：快捷地切换画面</p>
<p>通常要将所有的设备都显示在一张画面里是不可能的，所以将设备按照处理工艺的功能步骤分级在多张画面内，以一个污水处理厂为例分为电泳线、前处理线、生化线、加药线等，之间的切换使用按钮的鼠标动作来实现。这对于用WinCC现成的鼠标动作来实现是很简单的，但是不是要在每张图上都使用相同数量且位置排列顺序一致的按钮呢？(出于对操作的一致性考虑，不能让操作人员在不同的图上，不同的位置找想要操作的按钮)这个问题的解决我们使用WinCC的脚本编程，在按钮动作中调用它的内部函数来实现。首先，组态一幅背景画面，其中包括要显示的静态文本、OLE(例如，时钟)、所有的图形切换按钮及推出关机按钮。第二，在背景画面中插入智能对象(Smart Object)中的画面窗口(Picture Window),并且使其的尺寸与其分级画面相同。第三，在相应的切换按钮的属性-&gt;事件-&gt;鼠标动作中编写如下C语言脚本代码：</p>
<p>#include&#8221;apdefap.h&#8221;<br />
void onClick(char *lpsz PictureName,<br />
char *lpsz ObjectName,char *lpsz PropertyName)<br />
{<br />
SetPictureName(&#8220;背景画面&#8221;, &#8220;画面窗口&#8221;, &#8220;电泳处理线&#8221;);<br />
} //&#8221;背景画面&#8221;即为始终显示地静态背景的属性名，&#8221;画面窗口&#8221;即为在背景画//面中插入地画面窗口(Picture<br />
Window)属性名，&#8221;电泳处理　　线&#8221;即为分级画面//的名称</p>
<p>这样就能方便快捷地切换画面。</p>
<p>11：必须始终显示的报警记录</p>
<p>用画面颜色闪烁来提示操作者有故障发生，可以用同样的C语言脚本(当然不是加在鼠标动作中)在背景画面的底部留下一条类似Windows状态栏的报警栏，当出现故障报警的时候在报警栏显示最近一条报警记录，操作人员可以利用按钮切换到主报警记录画面了解故障的完全信息。</p>
<p>12：单个部件的组态</p>
<p>WinCC在其内部的图库里集成很多的图形对象，如水箱、电机、阀门等等，对于污水处理用的最多的是水池，搅拌机等等。为了使组态画面贴近实际，能够更好的反应现场工况，图库里的元素并不能满足要求。我们可以利用WinCC的画图工具自己绘制适应实际的图形元素，并且使用C脚本使其产生动画效果。</p>
<p>对于调节池，反应池等可以用矩形来表示，以图形的填充高度来示意其液位的高度。这里要注意的是一些数值地转化，由于一些仪表例如E+H的超声波液位计，是以4～20毫安的电流信号进入PLC，对于表的参数设定好以后4毫安就对应相应池子的液位最低点，而20毫安对应于池子的液位最高点。所以在显示数字高度的时候要将PLC相对4、20毫安的数值转化为实际池子的高度范围例如，0.5~5.5米。但是对于图形填充的时候是按照百分数来表示的所以还要将PLC数值转化为0～100%的度量范围。</p>
<p>搅拌机的组态可以使用C脚本使其产生动画，在其运行时产生视觉上的旋转。实际上搅拌机的图形是用两个部分椭圆组成的，在椭圆的属性-&gt;几何-&gt;半径中加入代码如下：</p>
<p>#include &#8220;apdefap.h&#8221;<br />
long _main(char* lpszPictureName, char* lpszObjectName, char*<br />
lpszPropertyName)<br />
{<br />
static int x=25,y,z;//x为半径的初始值为25，y为切换变量，z为搅拌机运行状态变量<br />
z=GetTagBit(&#8220;202搅拌机运行&#8221;); //取得PLC搅拌机的运行状态<br />
if(z!=0)<br />
{<br />
switch(y)<br />
{<br />
case 0:<br />
x=x-4;<br />
if(x&lt;=0)<br />
y=1;<br />
break;<br />
default :<br />
x=x+4;<br />
if(x&gt;=25)<br />
y=0;<br />
break;<br />
}<br />
}<br />
return x;<br />
}</p>
<p>13：语音报警的组态</p>
<p>在工业现场安全是极其重要的，无论从那个角度讲我们应该利用一切手段减少故障的发生。在故障已经发生的时候，应该在第一时间以多种方式通知操作人员有故障发生。现代微处理计算机的处理速度可以完全胜任对于图形，语音地同时处理。所以我们可以利用计算机的声卡和音箱在有故障发生的时候产生语言报警，但是问题是WinCC本身并不能产生语音的功能，而且其内部的上千个函数也没有提供处理声音的函数。解决这个问题的方法归功于微软开发的WinCC与操作系统地完美结合，因为在WinCC中可以直接调用Windows的API函数。实现的具体C脚本代码如下：</p>
<p>long _main(char* lpszPictureName, char* lpszObjectName, char*<br />
lpszPropertyName)<br />
{<br />
#pragma code(&#8220;Winmm.dll&#8221;)<br />
void WINAPI PlaySoundA(char *pszSound,char *hmode,DWORD dwflay);<br />
#pragma code()<br />
if(GetTagBit(&#8220;112排泥备泵故障&#8221;))<br />
PlaySoundA(&#8220;d:winntmediaMircosoft sound.wav&#8221;,NULL,8);<br />
return 1020;<br />
}</p>
<p>有一个值得主意的问题是此段代码的加入点，通过反复多次的实践得出结论，即这个点必须加在始终显示于屏幕上的任何图形元素的属性中，这样才能达到语言报警的预期效果。</p>
<p>14：当为WinCC指定PC名时应注意什么?</p>
<p>解答:</p>
<p>计算机名不能包含特殊字符如空格、退格和下划线，并前13个字符必须是唯一的。<br />
由于操作系统的原因，名字的长度不能超过15个字符。<br />
因此推荐只使用a to z, A to Z, 0 to 9这些字符。必须以子母开头。</p>
<p>从SIMATIC WinCC V6.0起，有如下限制：<br />
计算机名可包含下划线。然而，当使用DNS主机名时，不能使用下划线。</p>
<p>15：和plc用S7通讯为什么产生连接错误代码：D801？</p>
<p>解答:</p>
<p>这个错误代码表示WinCC变量地址错误，检查每个变量的地址和通讯连接是否正确，如果变量的地址不属于控制器的地址范围，则会报这个错误代码。</p>
<p>16：和plc用S7通讯怎样清除错误代码8304？</p>
<p>解答:</p>
<p>WinCC运行时的画面不再更新，WinCC的日志文件中有错误代码8304，这个错误码表明WinCC和S7连接出现问题。<br />
解决方法:<br />
停止AS站的循环读服务，在&#8221;WinCC Explorer &gt; 变量管理 &gt; SIMATIC S7 PROTOCOL SUITE&#8221;<br />
中。右键单击出现问题的S7连接，选择&#8221;系统参数&#8221;，清除复选框“周期管理&gt;通过PLC”的选择。</p>
<p>17：在动态值域对话框中怎样才能按逻辑连接两个因变量到一个结果?</p>
<p>解答:<br />
由于在WinCC动态值域对话框中的布尔数学体系运算符，您可以根据C脚本惯例运用这些符号。<br />
下面是符号及其意思的概括:<br />
与 位比较 &amp;<br />
与 表达式比较 &amp;&amp;<br />
或 位比较 |<br />
或 表达式比较 ||<br />
非 !</p>
<p>通过Object &gt; Properties &gt; Dynamic进入WinCC动态值域对话框 ，&gt; &gt; 并右击&#8221;Dynamic Value Ranges dialog&#8221; 按照需要输入表达式即可。</p>
<p>18：WinCC图形编辑器中是否存在通过鼠标点击达到增加/减少变量值的对象？</p>
<p>解答：<br />
可以使用OCX“SpinButton”实现这个功能。下面描述了如何合并和联系这个对象。</p>
<p>在WinCC图形编辑器中，插入一个“Control”类型的小对象。在打开的窗口中选择进入Microsoft Forms 2.0 SpinButton并以OK来确认。</p>
<p>右击打开对象“SpinButton”的属性。在控制属性中使用您想要的变量来连接“Value”属性。<br />
但要注意：<br />
使用第三方的ActiveX控件会导致错误(例如内存丢失，性能降低，系统阻塞)。&#8221; 软件应用者应该对由于使用第三方ActiveX控件而造成的任何问题负责。</p>
<p>ActiveX控件事件连接C脚本<br />
如果连接C脚本到ActiveX控件事件，那么应该确认这个事件名至少5个字符长。如果这个事件名少于5个字符长，那么C脚本不被执行。</p>
<p>19：重新启动后，不使用登录窗口如何以一个缺省用户的身份自动登录？怎样确保运行期间有个缺省用户始终处</p>
<p>19：重新启动后，不使用登录窗口如何以一个缺省用户的身份自动登录？怎样确保运行期间有个缺省用户始终处于登入状态？即使另外一个用户已经预先退出。</p>
<p>解答：<br />
重新启动以及在运行期间，您希望HMI系统达到最小的实用性而不使用登录窗口。然而，对于高级操作，登录功能应当保留。此外，如果没有用户 登录，则有一个缺省的用户自动登录。缺省用户的权限可以在用户管理器中根据需要设定。</p>
<p>可使用下面的C脚本执行此项功能，请按照下列步骤进行：</p>
<p>将附件中的函数“Silentlogin.pas”复制到项目中的“PAS”子文件夹中。<br />
在项目中选择Global Script &gt; C Editor &gt; Actions &gt; Global Actions并打开全局动作(Global Action)“Silentlogin.pas”。<br />
在“PWRTSilentLogin (“Login”,“Password”);”一行中，用缺省的用户名替换用户“Login”，用 缺省用户的口令代替“Password”。</p>
<p>编译和保存C脚本。<br />
用变量@CurrentUser设置一个变量触发器，周期选择为“ 2 s”。这确保了系统不会因脚本而负荷过重。在所述的例子中，变量 @CurrentUser(包含当前登录的用户)每隔 2 秒钟被询问一次察看有无变化。只有当用户变化时才调用脚本，例如当前用户退出时。<br />
确保已经在计算机的属性“Startup”选项卡上激活了“Global Script Runtime”。</p>
<p>除此之外，SIMATIC PCS 7(SIMATIC PCS 7 V6.0 SP1及更高版本)用户还需执行下列步骤：</p>
<p>将系统画面@Welcome.pdl复制到一个安全的位置，以便可以恢复原始画面。<br />
使用Graphics Designer打开画面@Welcome.pdl。<br />
打开保存在选定画面中的C脚本，(右击)&gt; Event &gt; Picture Object &gt; Miscellaneous &gt; Open Picture)。<br />
注释掉“PASSLoginDialog(Screen);”一行，以 // 作为注释的前缀。 编译C脚本。 保存系统画面@Welcome.pdl。</p>
<p>20：如何进行WinCC 和 S7之间的时间同步?</p>
<p>回答:下面的方法只能进行时间设置而不能完成时间同步的功能。因为必须考虑到延迟，比如报文的处理时间，C 脚本的运行时间等，因此这个方法在精度方面不如真正的时间同步精确。</p>
<p>1.创建一个数据块 ，其中有一个 &#8220;DATE_AND_TIME&#8221; 类型的变量和一个布尔变量。当元素&#8221;Flag&#8221; 在WinCC中被置1，程序就调用系统函数SFC0 &#8220;SET_CLK&#8221;。D B1中的触发变量&#8221;Flag&#8221; ( DB1.DBX 8.0)在WinCC脚本中被SetTagBitWait(&#8220;DB1_FLAG&#8221;,TRUE) 置1。 因此仅当此C脚本在WinCC中被调用时,时间才被设置。SFC0 必须先添加到Step7程序的块文件夹中。 在此段程序中，DB块中的各个时间变量被写到作为 SFC0参数的&#8221;DATE_AND_TIME&#8221;类型的本地变量&#8221;DateAndTime&#8221;中。 用 &#8220;SET_CLK&#8221; 设置完时钟后，触 发变量&#8221;Flag&#8221;被复位。 注意： 在此段程序中，本地变量&#8221;DateAndTime&#8221;存储在以0为起始地址的本地数据堆栈中。如果不得已要把这个变量分配到别的地址，同 时对传送指令参数化时，必须要考虑到地址分配的问题。</p>
<p>2.为“年”新建一个 &#8220;Unsigned 8-bit value&#8221;类型的变量，对其进行格式变换 ByteToBCDByte，然后为其在DB块中选择相应的字节地址： 在WinCC 中创建剩下的变量。 选择&#8221;Unsigned 16-bit value&#8221; 类型然后改变格式为 WordToBCDByte ，然后在DB块中选择实际的字节地址。</p>
<p>3.最后,在WinCC中创建一个C脚本来读取系统时间并进行拆分，然后把它们写到DB1中。 S7 PLC中的时钟设置是被脚本中的&#8221;DBI_FLAG&#8221;变量触发的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flyang.net/?feed=rss2&#038;p=54</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WinCC项目复制</title>
		<link>http://www.flyang.net/?p=52</link>
		<comments>http://www.flyang.net/?p=52#comments</comments>
		<pubDate>Tue, 12 Jul 2011 01:26:50 +0000</pubDate>
		<dc:creator>flyang</dc:creator>
				<category><![CDATA[WinCC]]></category>

		<guid isPermaLink="false">http://www.flyang.net/?p=52</guid>
		<description><![CDATA[1.WinCC项目复制推荐使用系统自带的项目复制器Project Duplicator来复制，直接拷贝文件夹的复制方式可能会造成文件的丢失或者损坏。 2.使用项目复制器复制后的项目，只包含组态数据，不包含运行数据（例如归档文件）。 3.用项目复制器复制项目的操作步骤： 开始&#8211;SIMATIC&#8211;WINCC&#8211;Tools&#8211;Project Duplicator “选择要复制的项目”中找到项目中的.MCP文件，另存即可。 4.整个wincc项目直接拷贝步骤： “开始”&#8211;“运行”，输入reset_wincc.vbs，确定后会关闭WinCC的相关进程，然后直接复制项目即可。 打开项目时，还需注意WinCC版本信息，低版本WinCC打开高版本WinCC组态过的项目是会报错的。]]></description>
			<content:encoded><![CDATA[<p>1.WinCC项目复制推荐使用系统自带的项目复制器Project Duplicator来复制，直接拷贝文件夹的复制方式可能会造成文件的丢失或者损坏。<br />
2.使用项目复制器复制后的项目，只包含组态数据，不包含运行数据（例如归档文件）。<br />
3.用项目复制器复制项目的操作步骤：<br />
开始&#8211;SIMATIC&#8211;WINCC&#8211;Tools&#8211;Project  Duplicator<br />
“选择要复制的项目”中找到项目中的.MCP文件，另存即可。<br />
4.整个wincc项目直接拷贝步骤：<br />
“开始”&#8211;“运行”，输入reset_wincc.vbs，确定后会关闭WinCC的相关进程，然后直接复制项目即可。</p>
<p>打开项目时，还需注意WinCC版本信息，低版本WinCC打开高版本WinCC组态过的项目是会报错的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flyang.net/?feed=rss2&#038;p=52</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转载]致老婆大人的一封钓鱼申请书</title>
		<link>http://www.flyang.net/?p=34</link>
		<comments>http://www.flyang.net/?p=34#comments</comments>
		<pubDate>Fri, 08 Jul 2011 08:50:09 +0000</pubDate>
		<dc:creator>flyang</dc:creator>
				<category><![CDATA[Lure]]></category>

		<guid isPermaLink="false">http://www.flyang.net/?p=34</guid>
		<description><![CDATA[亲爱的老婆： 时光如水，转眼又是一年春天！在这春光明媚的时刻，我尘封一冬的心情，也跟随这冰封的大地开始复苏、萌动…… 你是聪明人，一定会猜到，你的丈夫又想收拾行囊,奔赴钓鱼的前线了。虽然都说这是一个不见硝烟的战场，但它却给咱俩带来了连绵不断的冷战。回首这些年来咱俩之间的“斗争”，仗也打了，谎也撒了，病也装了，可结果呢？我能想到的伎俩，你现在闭着眼睛都能识破了，我只能在组织的严密监控下惶惶度日。在这里，我想澄清一下，前天我真的没去钓鱼，只不过帮老王干点活儿，弄脏了衣服，你就又发脾气了，我真的比窦娥还冤啊！你想一想，自从你捣毁了我的小金库，我的口袋比脸都干净，甭说钓鱼了，就连买香烟都挑劣等的抽。这一年以来，我一直是谨遵您的教导，“宁可在家不做一事，也不出去钓鱼半天。”可长此以往，组织就真的放心吗？所以今天，本着维护个人身心健康、维系家庭和睦、促进社会和谐的宗旨，我斗胆向老婆大人提出钓鱼申请。 我真的不明白，你为什么不支持我钓鱼呢？就因为我钓鱼回来一身腥？你仔细想想，我的腥味儿在外交上发挥了多么重要的作用？自从我钓鱼以来，咱们结交了多少朋友？远的不论，就说你单位的同事和左右领导沾了咱们多少光？以前，我是很内向的人，邻里见了面都不愿意招招呼，自从你拿我钓回来的鱼去创造和谐社会后，我从外面归来，不但社区的人都主动跟我问好，就连人家的猫都愿意跟着我。邻里净夸你来着，殊不知我才是幕后英雄。 过去我买五十斤大米都扛不上楼，还得把你叫下来一起抬着走，现在呢，我背起几十斤的渔具一口气跑上五楼，在你面前大气都不喘一下，这给你减轻了多少劳动负担？你再想一想，你是不是很久都没吃过剩饭了？这些不都得益于钓鱼吗？因为钓鱼，我身体倍棒，吃嘛嘛香，家中再没有剩饭了！ 你总说现在见到鱼就烦，据科学考证，吃鱼还有护肤养颜的功效，所以你比同龄女性看起来至少年轻五至六岁这还是保守说法，咱俩走在一起，我感到风光无限就不消说了，同时还不由自主地产生一种危机感，真怕你不能跟我一起慢慢变老，把我给甩了。 别说你没沾到钓鱼的光，自从我学会钓鱼之后，你的厨艺水平不是有了质的飞跃吗？由过去单一的清蒸鱼，发展到现在的干炸、醋溜、红烧、浇汁等十余品种，还带动了一些附加菜式花样翻新，全家人哪个不称赞你？更重要的是，通过我的耳濡目染，你还了解、增长了很多鱼类学知识，练就了一双明辨真伪的慧眼。还记得前年夏天，咱俩一起逛早市吗？有个商贩硬拿塘养鱼冒充野生鱼，被你当场揭穿。你不但为咱钓鱼人脸上争了光，也为消费者维了权，你知道当时有多少人用敬仰的目光在看着你吗？ 亲爱的老婆大人，这些年你总是嘲笑我没钓到过大鱼，你应该明白，放长线才能钓大鱼的道理。现在的野生环境不如从前，要想钓好鱼、钓大鱼，不出远门谈何容易？而我每天的行踪被你定锁定在三百米以内，怎么逮大鱼呀？嗯，前年，你说前年我碰到回大鱼，与它失之交臂了。那还不是因为咱的钓鱼武器太落后了？我知道，你看到这肯定又要瞪眼睛：得寸进尺，给你脸了是不？请领导息恕，我哪敢申请拔款啊？只是谈一下客观存在的问题。我不需要你烙糠饼，也不用做军鞋，只要你肯放我出门三百米以外，我就感激不尽了，真的！ 希望领导早日批复为盼——因为，时不我待，又是一年的钓季开始了]]></description>
			<content:encoded><![CDATA[<p>亲爱的老婆：</p>
<p style="text-indent: 2em;" _mce_style="text-indent: 2em;">时光如水，转眼又是一年春天！在这春光明媚的时刻，我尘封一冬的心情，也跟随这冰封的大地开始复苏、萌动……</p>
<p style="text-indent: 2em;" _mce_style="text-indent: 2em;">你是聪明人，一定会猜到，你的丈夫又想收拾行囊,奔赴钓鱼的前线了。虽然都说这是一个不见硝烟的战场，但它却给咱俩带来了连绵不断的冷战。回首这些年来咱俩之间的“斗争”，仗也打了，谎也撒了，病也装了，可结果呢？我能想到的伎俩，你现在闭着眼睛都能识破了，我只能在组织的严密监控下惶惶度日。在这里，我想澄清一下，前天我真的没去钓鱼，只不过帮老王干点活儿，弄脏了衣服，你就又发脾气了，我真的比窦娥还冤啊！你想一想，自从你捣毁了我的小金库，我的口袋比脸都干净，甭说钓鱼了，就连买香烟都挑劣等的抽。这一年以来，我一直是谨遵您的教导，“宁可在家不做一事，也不出去钓鱼半天。”可长此以往，组织就真的放心吗？所以今天，本着维护个人身心健康、维系家庭和睦、促进社会和谐的宗旨，我斗胆向老婆大人提出钓鱼申请。</p>
<p style="text-indent: 2em;" _mce_style="text-indent: 2em;">我真的不明白，你为什么不支持我钓鱼呢？就因为我钓鱼回来一身腥？你仔细想想，我的腥味儿在外交上发挥了多么重要的作用？自从我钓鱼以来，咱们结交了多少朋友？远的不论，就说你单位的同事和左右领导沾了咱们多少光？以前，我是很内向的人，邻里见了面都不愿意招招呼，自从你拿我钓回来的鱼去创造和谐社会后，我从外面归来，不但社区的人都主动跟我问好，就连人家的猫都愿意跟着我。邻里净夸你来着，殊不知我才是幕后英雄。</p>
<p style="text-indent: 2em;" _mce_style="text-indent: 2em;">过去我买五十斤大米都扛不上楼，还得把你叫下来一起抬着走，现在呢，我背起几十斤的渔具一口气跑上五楼，在你面前大气都不喘一下，这给你减轻了多少劳动负担？你再想一想，你是不是很久都没吃过剩饭了？这些不都得益于钓鱼吗？因为钓鱼，我身体倍棒，吃嘛嘛香，家中再没有剩饭了！</p>
<p style="text-indent: 2em;" _mce_style="text-indent: 2em;">你总说现在见到鱼就烦，据科学考证，吃鱼还有护肤养颜的功效，所以你比同龄女性看起来至少年轻五至六岁这还是保守说法，咱俩走在一起，我感到风光无限就不消说了，同时还不由自主地产生一种危机感，真怕你不能跟我一起慢慢变老，把我给甩了。</p>
<p style="text-indent: 2em;" _mce_style="text-indent: 2em;">别说你没沾到钓鱼的光，自从我学会钓鱼之后，你的厨艺水平不是有了质的飞跃吗？由过去单一的清蒸鱼，发展到现在的干炸、醋溜、红烧、浇汁等十余品种，还带动了一些附加菜式花样翻新，全家人哪个不称赞你？更重要的是，通过我的耳濡目染，你还了解、增长了很多鱼类学知识，练就了一双明辨真伪的慧眼。还记得前年夏天，咱俩一起逛早市吗？有个商贩硬拿塘养鱼冒充野生鱼，被你当场揭穿。你不但为咱钓鱼人脸上争了光，也为消费者维了权，你知道当时有多少人用敬仰的目光在看着你吗？</p>
<p style="text-indent: 2em;" _mce_style="text-indent: 2em;">亲爱的老婆大人，这些年你总是嘲笑我没钓到过大鱼，你应该明白，放长线才能钓大鱼的道理。现在的野生环境不如从前，要想钓好鱼、钓大鱼，不出远门谈何容易？而我每天的行踪被你定锁定在三百米以内，怎么逮大鱼呀？嗯，前年，你说前年我碰到回大鱼，与它失之交臂了。那还不是因为咱的钓鱼武器太落后了？我知道，你看到这肯定又要瞪眼睛：得寸进尺，给你脸了是不？请领导息恕，我哪敢申请拔款啊？只是谈一下客观存在的问题。我不需要你烙糠饼，也不用做军鞋，只要你肯放我出门三百米以外，我就感激不尽了，真的！</p>
<p style="text-indent: 2em;" _mce_style="text-indent: 2em;">希望领导早日批复为盼——因为，时不我待，又是一年的钓季开始了</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flyang.net/?feed=rss2&#038;p=34</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>笑话</title>
		<link>http://www.flyang.net/?p=26</link>
		<comments>http://www.flyang.net/?p=26#comments</comments>
		<pubDate>Sat, 02 Jul 2011 15:28:34 +0000</pubDate>
		<dc:creator>flyang</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.flyang.net/?p=26</guid>
		<description><![CDATA[1.上帝之门坏了，请人来修理。印度人报价3000材料1000，人工费1000，挣1000；德国人报价6000材料2000，人工费2000，挣2000；中国人报价9000，对上帝说：“你3000，我3000，工程包给印度人。上帝说：“太好了，就这么定！” 2.今天一早，一只老鼠误入花店被一只猫追赶，老鼠发现无路可逃，就顺手拿起一朵玫瑰花准备抵抗，猫看到立马低下了头羞愧的说：死鬼，太突然了! 3.一拜天地，从此受尽老婆气；二拜高堂，还要讨好丈母娘；夫妻对拜，从此勒紧裤腰带；送入洞房，我跪地板她睡床；唉，我是绵羊她是狼，有妻徒刑岁月长 4.小明送给女友一件礼物，女友接过来，看了一眼说：“破滴~” 小明大惊：“我从苹果专卖店新买的啊，怎么会是破的？” 女友说：“你看啊，上面拼音写着：podi。” 小明：“亲爱的，-_- 你拿倒了]]></description>
			<content:encoded><![CDATA[<p>1.上帝之门坏了，请人来修理。印度人报价3000材料1000，人工费1000，挣1000；德国人报价6000材料2000，人工费2000，挣2000；中国人报价9000，对上帝说：“你3000，我3000，工程包给印度人。上帝说：“太好了，就这么定！”</p>
<p>2.今天一早，一只老鼠误入花店被一只猫追赶，老鼠发现无路可逃，就顺手拿起一朵玫瑰花准备抵抗，猫看到立马低下了头羞愧的说：死鬼，太突然了! </p>
<p>3.一拜天地，从此受尽老婆气；二拜高堂，还要讨好丈母娘；夫妻对拜，从此勒紧裤腰带；送入洞房，我跪地板她睡床；唉，我是绵羊她是狼，有妻徒刑岁月长 </p>
<p>4.小明送给女友一件礼物，女友接过来，看了一眼说：“破滴~” 小明大惊：“我从苹果专卖店新买的啊，怎么会是破的？” 女友说：“你看啊，上面拼音写着：podi。” 小明：“亲爱的，-_- 你拿倒了</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flyang.net/?feed=rss2&#038;p=26</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>淘宝秒杀，GT-BIO巨帝亮片巨帝水蛭路亚假饵金+红-15克</title>
		<link>http://www.flyang.net/?p=21</link>
		<comments>http://www.flyang.net/?p=21#comments</comments>
		<pubDate>Wed, 22 Jun 2011 06:42:56 +0000</pubDate>
		<dc:creator>flyang</dc:creator>
				<category><![CDATA[Lure]]></category>

		<guid isPermaLink="false">http://www.flyang.net/?p=21</guid>
		<description><![CDATA[中午午睡起来，看到淘宝巨帝秒杀活动，试试手气，没想到还真给我秒到了，第一次在淘宝上秒杀到商品，以后要发动群众的力量一起秒杀，以后就不用买了，想得真美，看来还没睡醒，继续睡觉去。]]></description>
			<content:encoded><![CDATA[<p>中午午睡起来，看到淘宝巨帝秒杀活动，试试手气，没想到还真给我秒到了，第一次在淘宝上秒杀到商品，以后要发动群众的力量一起秒杀，以后就不用买了，想得真美，看来还没睡醒，继续睡觉去。</p>
<p><a href="http://www.flyang.net/wp-content/uploads/2011/06/1.jpg"><img class="alignnone size-full wp-image-22" title="淘宝秒杀巨帝水蛭" src="http://www.flyang.net/wp-content/uploads/2011/06/1.jpg" alt="" width="777" height="103" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flyang.net/?feed=rss2&#038;p=21</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>设置Oracle的ODBC数据数据源连接</title>
		<link>http://www.flyang.net/?p=18</link>
		<comments>http://www.flyang.net/?p=18#comments</comments>
		<pubDate>Wed, 22 Jun 2011 00:24:24 +0000</pubDate>
		<dc:creator>flyang</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.flyang.net/?p=18</guid>
		<description><![CDATA[如果数据仓储使用 Oracle RDBMS，则请遵循以下步骤来设置 ODBC 数据源连接。 打开 Windows NT 控制面板。 双击数据源（ODBC）图标。将显示 ODBC 数据源管理器对话框。 选择系统 DSN 选项卡。 单击添加。 选择与 Oracle 数据库客户机一同安装的 ODBC 驱动程序。 单击完成。 在数据源字段中输入数据库的名称。 在描述字段中输入数据源的描述。 在服务器名称字段中输入 RDBMS 服务器的主机全限定名称。 单击确定。]]></description>
			<content:encoded><![CDATA[<p>如果数据仓储使用 Oracle RDBMS，则请遵循以下步骤来设置 ODBC 数据源连接。</p>
<ol type="1">
<li>打开 Windows NT 控制面板。</li>
<li>双击<strong>数据源（ODBC）</strong>图标。将显示 <strong>ODBC 数据源管理器</strong>对话框。</li>
<li>选择<strong>系统 DSN</strong> 选项卡。</li>
<li>单击<strong>添加</strong>。</li>
<li>选择与 Oracle 数据库客户机一同安装的 ODBC 驱动程序。</li>
<li>单击<strong>完成</strong>。</li>
<li>在<strong>数据源</strong>字段中输入数据库的名称。</li>
<li>在<strong>描述</strong>字段中输入数据源的描述。</li>
<li>在<strong>服务器名称</strong>字段中输入 RDBMS 服务器的主机全限定名称。</li>
<li>单击<strong>确定</strong>。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.flyang.net/?feed=rss2&#038;p=18</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

