顺宗 2024-05-28 17:06 采纳率: 70%
浏览 2
已结题

关于#软件工程#的问题:步科触摸屏宏程序当前配方是写进去了

步科触摸屏宏程序
当前配方是写进去了,但是这么读出来呢?

#include "macrotypedef.h"
#include "math.h"

int MacroEntry()
{
    // 配方名称 12个字符串写入到R20
    signed short buf[12] = {0};
    signed short buff[27] = {0};

    // 读取当前配方名
    ReadLocal("RW", 0, 12, (void*)buf, 0);
    ReadLocal("PLC", 0, 27, (void*)buff, 0);

    // 确定配方编号
    int recipeNumber = LW130;

    // 计算配方名称和参数的写入地址
    int recipeNameAddress = 20 + (recipeNumber - 1) * 100;
    int recipeParamAddress = 50 + (recipeNumber - 1) * 100;

    // 写入配方名称和参数
    WriteLocal("RW", recipeNameAddress, 12, (void*)buf, 0);
    WriteLocal("RW", recipeParamAddress, 27, (void*)buff, 0);

    return 0;
}

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-28 17:06
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的代码片段中,您已经实现了将配方名称(12个字符)和配方参数(27个字符)从内存中读取并写回的过程。然而,根据您的描述,您似乎想要从系统中读取当前配方的信息,而不是写入。

    为了实现读取功能,您可以参考以下修改后的代码示例:

    #include "macrotypedef.h"
    #include "math.h"
    
    int MacroEntry()
    {
        // 配方名称 12个字符串读取地址
        int recipeNameAddress = 20; // 假设配方名称存储位置从20开始
        int recipeParamAddress = 50; // 假设配方参数存储位置从50开始
    
        // 定义用于存储数据的缓冲区
        signed short bufRecipeName[12] = {0};
        signed short bufRecipeParam[27] = {0};
    
        // 读取当前配方名
        ReadLocal("RW", recipeNameAddress, 12, (void*)bufRecipeName, 0);
        
        // 读取当前配方参数
        ReadLocal("RW", recipeParamAddress, 27, (void*)bufRecipeParam, 0);
    
        // 打印读取到的配方名称和参数
        printf("Current Recipe Name: ");
        for(int i=0; i<12 && bufRecipeName[i]; i++)
            printf("%c", (char)bufRecipeName[i]);
        printf("\n");
    
        printf("Current Recipe Parameters: ");
        for(int i=0; i<27 && bufRecipeParam[i]; i++)
            printf("%c", (char)bufRecipeParam[i]);
        printf("\n");
    
        return 0;
    }
    

    这段代码首先定义了配方名称和参数的读取地址(这里假设它们从20和50开始),然后创建了两个缓冲区来存储读取的数据。接下来,它分别从这些地址读取配方名称和参数,并将读取的结果打印出来。

    注意,这个例子中的地址(20和50)是假设值,实际应用中你需要知道正确的内存地址。另外,由于触摸屏和PLC的具体通信方式可能不同,这里的ReadLocal函数可能是专为步科触摸屏设计的特定接口,其具体实现取决于您的硬件平台和编程环境。如果需要将这些数据显示在触摸屏界面上,你可能需要调用触摸屏API的特定方法来更新显示内容。

    此外,这里的代码将读取到的signed short类型数据转换成字符数组后直接打印,这样可以保证字符型数据正确显示。如果你的数据不是文本格式,那么你需要按照数据的实际格式进行处理。例如,如果数据是数值,你可能需要转换成整数或浮点数再输出。

    请确保你的项目包含了必要的头文件,并且对ReadLocal函数有正确的实现,这通常由设备制造商提供。如果遇到任何问题,比如找不到正确的内存地址或者函数实现,建议查阅相关文档或联系设备供应商获取支持。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月31日
  • 创建了问题 5月28日

悬赏问题

  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析
  • ¥200 sqlite3数据库设置用户名和密码
  • ¥15 AutoDL无法使用docker install吗?
  • ¥15 cups交叉编译后移植到tina sdk的t113,只需要实现usb驱动打印机,打印pdf文件
  • ¥30 关于#wireshark#的问题:需要网络应用流量数据集需要做长度序列的实验,需要与应用产生的会话的数据包的长度,如视频类或者聊天类软件
  • ¥15 根据上述描述表示泥浆密度沿着管路的长度方向在不断变化,如何来表示泥浆密度随管路的变化(标签-matlab|关键词-流计算)
  • ¥21 matlab可以把图像数据转换为小波分析吗
  • ¥60 基于香农编码的图像压缩算法实现