石家莊市聯(lián)盛電子技術有限公司 侯嘉嶺
本文以這次在工程中組態(tài)為例,組態(tài)王畫面中的報表格式見圖1。
圖1 組態(tài)王中的報表格式
由圖中我們看出所有內容都是居中對齊的,我們再來看一下保存為Excel 格式和Csv 格式后的文件內的格式,見圖2、圖3。
圖2 保存為Excel 格式后
圖3 保存為Csv 格式后
由此可見無論是保存為Excel 還是Csv 文件,在組態(tài)中組態(tài)的報表格式已經(jīng)全然不見了,下面我們就先來解決這個問題,首先我想到了Excel,在Excel 中可以很好的處理數(shù)據(jù),但由于種種原因,未找到在組態(tài)王中操作Excel 文件的相關方法,最終放棄了這個想法,恰巧最近本人在學習網(wǎng)站開發(fā)知識,同時又查到了組態(tài)王有操作文件相關的函數(shù),因此想到了用組態(tài)王寫HTML代碼的想法。
通過操作HTML 文件可以同時解決以上兩個問題,下面筆者來講一下具體實現(xiàn)方法。
(1)首先把原工程中的四個變量改為內存變量,用于本次測試。
(2)在工程的應用程序命令語言中加入了這四個變量的500ms 自加0.1,最大值為1.7 的腳本程序。腳本如下:
if(\local汽包壓力測試_2#<=1.7)
{\local汽包壓力測試_2#=\local汽包壓力測試_2#+0.1;}
else
{\local汽包壓力測試_2#=0.1;}
if(\local汽包壓力測試_3#<=1.7)
{\local汽包壓力測試_3#=\local汽包壓力測試_3#+0.1;}
else
{\local汽包壓力測試_3#=0.1;}
if(\local汽包壓力測試_4#<=1.7)
{\local汽包壓力測試_4#=\local汽包壓力測試_4#+0.1;}
else
{\local汽包壓力測試_4#=0.1;}
if(\local蒸汽總管壓力測試_總管<=1.7)
{\local蒸汽總管壓力測試_總管=\local蒸汽總管壓力測試_總管+0.1;}
else
{\local蒸汽總管壓力測試_總管=0.1;}
(3)用ReportSetHistData()函數(shù)把所有數(shù)據(jù)都寫入到組態(tài)王中已組態(tài)的報表中。
(4)新建一個空白的HTML 文件,用reportgetCellString()函數(shù)從組態(tài)王報表中獲取每一單元格的內容,再用FileWriteStr()函數(shù)在新建的空白HTML 文件中寫入HTML 代碼包括剛才從組態(tài)王報表中獲取到的內容。腳本如下:
//循環(huán)填入變量值
float cellvalue;//存放用于比較的獲取到的單元格的值
string cellscontent;
long num_Row=7;
while(num_Row<=endRow2)//循環(huán)行
{long num_Col=1;
cellscontent=ReportGetCellString("nightreport",num_Row,num_Col);
content="
content=content+strchar(34)+"center"+strchar(34)+"valign=";
content=content+strchar(34)+"middle"+strchar(34)+">";
content=content+cellscontent+"";
FileWriteStr(htmlpath,0,content,1);
num_Col=num_Col+1;
//開始循環(huán)列,除第一列外
while(num_Col<=7)
{cellscontent=reportgetCellString("nightreport",num_Row,num_Col);
cellvalue=strtoReal(cellscontent);
if(num_Col==2&&cellvalue<\local汽包壓力比較設定值_2#
&&num_Row!=endRow2)
{content="
content=content+strchar(34)+"align=";
content=content+strchar(34)+"center"+strchar(34);
content=content+”valign="+strchar(34)+"middle";
content=content+strchar(34)+">"+cellscontent+"
else
{content="
content=content+"valign="+strchar(34)+"middle";
content=content+strchar(34)+">"+cellscontent+"
FileWriteStr(htmlpath,0,content,1);
num_Col=num_Col+1;}
//列循環(huán)結束
FileWriteStr(htmlpath,0,"
num_Row=num_Row+1;}
(5)只通過FileWriteStr()函數(shù)寫入HTML 代碼是不夠的,還需要同時寫入CSS 代碼調整表格的格式及項目負責人提到的數(shù)據(jù)標注顏色。最終實現(xiàn)效果如圖4:
圖4 最終效果
通過此圖可以看出,之前提到的兩個問題已經(jīng)都解決了。
通過解決這兩個問題,筆者意識到了自己僅會PLC 編程、SCADA 軟件組態(tài)的開發(fā)應用是遠遠不夠的,在今后的工作中一定要拓寬自己的視野,在工作之余多學習一些新知識是很有必要的。