写日志 和 动态创建jpg,保存

本文介绍了一个使用C#编写的程序,该程序能够根据输入的日志文本和图片数据,将它们分别保存到指定目录下的日志文件和图片文件中。程序首先检查并创建必要的文件夹,然后按日期格式保存日志,并直接写入图片数据。
        public  void WriteLogText(String filestr,string len)
        {
            string path = @"E:\kuben";
            if (Directory.Exists(path + "\\log") == false)//如果不存在就创建file文件夹
            {
                Directory.CreateDirectory(path + "\\log");
            }
            String filename = path + "\\log\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";


            FileStream fs;
            if (System.IO.File.Exists(filename))
            {
                fs = new FileStream(filename, FileMode.Append);
            }
            else
            {
                fs = new FileStream(filename, FileMode.Create);
            }
            StreamWriter sw = new StreamWriter(fs);
            string ss;
            try
            {


                ss = DateTime.Now.ToString("G") + "  received:\r\n" +len +"\r\n";
                sw.Write(ss + filestr + "\r\n\r\n");
                sw.Flush();
            }
            catch
            {
                //MessageBox.Show(ex.Message.ToString());
            }
            finally
            {
                sw.Close();
                fs.Close();
            }

        }



        public void Writepic(int count ,byte[] f,int len)
        {
            string path = @"E:\kuben";
            if (Directory.Exists(path + "\\pic") == false)//如果不存在就创建file文件夹
            {
                Directory.CreateDirectory(path + "\\pic");
            }
            String filename = path + "\\pic\\" + count + ".jpg";


            FileStream fs = new FileStream(filename, FileMode.Create);
            fs.Write(f,0,len);
            fs.Close();


        }
<think> 我们正在讨论的是组态王(KingView)软件中如何将趋势曲线自动定时保存为图片。根据之前的对话,用户已经了解了手动保存的方法,现在希望实现自动化定时保存。 组态王本身没有直接的定时保存趋势曲线为图片的功能,但我们可以通过以下两种方法实现自动定时保存: 方法一:使用组态王内置的命令语言(脚本)结合系统函数 方法二:使用外部程序(如AutoHotkey或Python脚本)模拟操作(不推荐,因为稳定性差且依赖界面操作) 这里我们重点介绍方法一,因为它是组态王官方支持的方式,主要通过脚本编程实现。 步骤详解: 1. **创建按钮或通过事件触发**(适用于手动触发测试,但定时保存需要自动触发) 在画面上创建一个按钮,在按钮的“弹起时”动画链接中添加命令语言: ``` TrendSaveAs( "TemplateName", "FileName", Format ); ``` 其中: - TemplateName:趋势曲线窗口的模板名称(在组态王中定义趋势曲线时指定的名称) - FileName:保存的文件路径及名称(注意:路径中的反斜杠要用两个,例如:"C:\\TrendImages\\Curve.bmp") - Format:保存的格式,0表示BMP,1表示JPG,2表示GIF 2. **实现自动定时保存** 我们需要使用组态王的“事件命令语言”或“数据改变命令语言”来定时触发保存操作。 - 创建一个内存整型变量,例如:`AutoSaveFlag`,用于控制保存。 - 使用“事件命令语言”中的“定时器”事件,设置定时周期(例如:每分钟保存一次)。 * 事件描述:定时器,周期设为1000毫秒(1秒)触发一次,但实际我们可能需要更长的周期(如60000毫秒为1分钟)。 * 或者在“应用程序命令语言”中,使用`\\本站点\$时`(系统时间变量)的变化来触发,判断当分钟数变化到特定值时执行。 更推荐使用“数据改变命令语言”来响应一个定时变化的变量。我们可以利用组态王提供的系统变量`$秒`或`$分`,但是注意,如果保存操作比较频繁,可能会影响系统性能。 具体步骤: a) 在组态王的工程浏览器中,选择“命令语言”->“事件命令语言”。 b) 新建一个事件命令语言,事件描述为: ```c \\本站点\$分 % 5 == 0 && \\本站点\$秒 == 0 // 每5分钟的第0秒触发(即每5分钟整点触发) ``` 或者使用定时器,设置时间间隔为300000毫秒(5分钟),然后在命令语言中编保存趋势曲线的命令。 c) 在命令语言编辑框中入: ```c // 假设我们要保存的趋势曲线模板名为"Trend1",保存路径为C:\TrendImages,按时间命名 string filename; // 格式化文件名,例如:Trend_20240508_1030.jpg filename = "C:\\TrendImages\\Trend_"+StrFromInt(\\本站点\$年,10)+ StrFromInt(\\本站点\$月,10,2)+StrFromInt(\\本站点\$日,10,2)+"_"+ StrFromInt(\\本站点\$时,10,2)+StrFromInt(\\本站点\$分,10,2)+".jpg"; // 调用保存函数 TrendSaveAs( "Trend1", filename, 1 ); ``` 注意:确保路径“C:\TrendImages”存在,否则保存会失败。 3. **注意事项** - 组态王运行系统必须具有对保存路径的入权限。 - 定时保存的频率不宜过高,因为保存图片需要一定的时间资源。 - 文件名中的时间变量(年、月、日、时、分、秒)是组态王内置的系统变量,可以直接使用。 - 如果需要多个趋势曲线保存,可以多次调用`TrendSaveAs`函数。 4. **测试** 在正式使用前,先测试脚本的正确性。可以创建一个按钮,在按钮的命令语言中入上述保存命令,点击按钮看是否能成功保存图片。然后再设置定时触发。 如果没有达到预期效果,请检查: - 趋势曲线模板名称是否正确(大小敏感) - 路径是否存在,组态王是否有权限入 - 定时触发条件是否正确(例如,事件命令语言的事件描述是否正确) 此外,组态王还提供`TrendSaveAsEx`函数,可以指定保存的时间范围,但这里我们只保存当前显示的曲线。 参考组态王函数手册,`TrendSaveAs`函数说明如下: ```c long TrendSaveAs(LPCTSTR lpszTemplate, LPCTSTR lpszFile, short nFormat); ``` 返回值:0表示成功,非0表示失败。 因此,我们可以在命令语言中加入错误处理,例如: ```c long error; error = TrendSaveAs( "Trend1", filename, 1 ); if(error != 0) { // 保存失败的处理,例如记录日志 // 可以使用MessageBox函数弹出提示(生产环境不建议) } ``` 综上所述,通过组态王的脚本功能,我们可以实现趋势曲线的自动定时保存。 下面生成相关问题: </think> ### 组态王趋势曲线自动定时保存为图片的方法 在组态王(KingView)中实现趋势曲线自动定时保存为图片,需要通过**脚本编程****系统函数**结合实现。以下是具体步骤: --- ### 方法一:使用命令语言定时触发 1. **创建定时器变量** - 在数据词典中创建内存整型变量:`AutoSaveTimer` 2. **设置应用程序命令语言** - 打开工程浏览器 → 命令语言 → 应用程序命令语言 - 在"启动时"标签页添加初始化脚本: ```vb \AutoSaveTimer = 0; // 初始化计时器 ``` 3. **配置循环执行脚本** - 在"运行时"标签页添加周期执行脚本(示例每10分钟保存一次): ```vb \AutoSaveTimer = \AutoSaveTimer + 1; IF \AutoSaveTimer >= 600 THEN // 600秒=10分钟 { TrendSaveAs("历史趋势", "C:\\TrendImages\\曲线_"+StrFromInt(\$年,0)+StrFromInt(\$月,2)+StrFromInt(\$日,2)+"_"+StrFromInt(\$时,2)+StrFromInt(\$分,2)+".jpg", 1); \AutoSaveTimer = 0; // 重置计时器 } ``` **参数说明**: - `"历史趋势"`:趋势窗口模板名称 - `C:\\TrendImages\\`:自定义保存路径(需提前创建) - `StrFromInt(\$年,0)`:动态文件名(含年月日时分) - `1`:保存JPG格式(0=BMP, 1=JPG, 2=GIF)[^1] --- ### 方法二:通过事件触发保存 ```vb // 当特定条件满足时保存(如整点保存) IF \本站点\$分 == 0 && \本站点\$秒 == 0 THEN { TrendSaveAsEx("实时趋势", "", "C:\\TrendImages\\实时曲线_"+StrFromInt(\$时,2)+".jpg", 1, 0); } ``` **参数说明**: - `TrendSaveAsEx`支持设置时间范围 - `0`:保存全部时间范围(1=当前可见范围) --- ### 关键配置说明 1. **路径权限**: - 确保组态王运行系统有入权限 - 路径使用双反斜杠(`C:\\`)避免转义错误 2. **定时精度**: - 最小时间间隔由命令语言执行周期决定 - 可在`系统配置→运行系统→特殊`调整运行参数 3. **错误处理**: - 添加日志记录: ```vb IF TrendSaveAs(...) <> 0 THEN LogMsg("保存失败!错误代码:"+StrFromInt(GetLastError(),0)); ``` --- ### 注意事项 1. 文件名长度不超过128字符,避免包含`/\:*?"<>|`等非法字符 2. 历史趋势需确保历史数据服务已启动 3. 高频率保存(如每秒)可能导致系统负载过高 4. 使用`TrendSaveAsEx`可保存指定时间范围曲线[^2] ```basic 部署流程: 1. 创建C:\TrendImages目录 2. 在数据词典定义AutoSaveTimer 3. 配置应用程序命令语言 4. 启动组态王运行系统 5. 检查目标目录是否生成图片文件 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值