| 作者 | 主题 |
|---|---|
|
远扬 新手 经验值:45 发帖数:14 精华帖:2 |
楼主
主题:请教万泉河师兄和各位高手,如何在程序中控制WINCC趋势的Y轴范围
TagLoging中只能通过设置对话筐调整Y轴显示范围,或者设为autorange,请教如何在程序中用代码控制显示范围
|
|
远扬 新手 经验值:45 发帖数:14 精华帖:2 |
楼
主题:回复:请教万泉河师兄和各位高手,如何在程序中控制WINCC趋势的Y轴范围
谢谢笑西风师兄,我仔细看了该例程,例程中实现趋势有两种办法,一种是用Polyline实现的(不符合我的要求),另一种是用TagLoging做的,只提供了如何实现趋势,并没有提供如何控制Y轴范围(不是X轴范围)啊
|
|
Armstrong.F 侠圣 经验值:2055 发帖数:1586 精华帖:11 |
楼
主题:回复:请教万泉河师兄和各位高手,如何在程序中控制WINCC趋势的Y轴范围
虽然那个程序是改动x轴的,但我想,你应当可以参照它实现的思路,应用到对y轴的编程修改功能中。毕竟,2者的功能相近的。
|
|
远扬 新手 经验值:45 发帖数:14 精华帖:2 |
楼
主题:回复:请教万泉河师兄和各位高手,如何在程序中控制WINCC趋势的Y轴范围
下面是个简单的例子
1.在TagLoging 中建立一个空的Trend window template,名字为Trend1,在里边加入一个趋势名为Curve1,不作任何设置,保存退出。 2.建立一个画面,用于显示趋势Trend1->Curve1,设为主显示画面 3.建立两个globle action 第一个(info/trig设为time-500ms): #include "apdefap.h" int gscAction( void ) { static int direction=0; unsigned int nXPos = GetTagWord("XPos"); if(direction == 0) { if(nXPos<439) SetTagWord("XPos",nXPos+1); else {SetTagWord("XPos",438);direction = 1;} } else { if(nXPos>0) SetTagWord("XPos",nXPos-1); else {SetTagWord("XPos",1);direction = 0;} } return 1; } 第二个(info/triger设为Tag-"XPos"): #include "apdefap.h" int gscAction( void ) { DWORD dwCounter = 440; static double doTestX[440]={0}; static double doTestY[440]={0}; int i; int nXPos; time_t t; for(i=0;i<440;i++) doTestX[i]=i; srand((unsigned) time(&t)); nXPos = (int)GetTagWord("XPos"); doTestY[nXPos] = 70+(rand()%20); TLGConnect(NULL,NULL); TLGSetTemplateData( "Trend1", "Curve1", dwCounter, doTestX, dwCounter, doTestY, TLG_SETDATA_RESET, TLG_SETDATA_RESETTLG_SETDATA_TIME_RANGE_XTLG_SETDATA_TIME_RANGE_Y, TRUE, NULL ); TLGDisconnect(NULL); return 1; } 如果要控制Y轴范围,只需要在首尾增加两个点分别代表Y轴范围的最高点和最低点就行了(同时趋势显示设为Autorange),基本上不影响显示效果。具体代码XD们自己实现吧。这种方法有一定的缺点,但就我目前使用足够了,各位XD有更好的方法,还请多多指教啊 |