你想要的功能它都有: 配方存储 按名称查找 查看后删除 配方修改,工控人必备不用自己在敲代码了。
/增删改查M100:存储确认,M101:数据查找,M102:数据删除,M103:数据修改
//D200:配方名称通过D200输入的名称进行查找内容
//D0-D4:要存储的数据
//D5-D9:要修改的数据
//D20-D24:数据查看
//HD0-D99:数据存储区5个地址为一组
//数据存储,全局变量(一定要放在函数外面,用来记住存到第几个位置)
static int savePos = 0; //static:保持savePos变量的值
if ( B[100] ) //确认存储
{
int i1 = savePos; // 从上次保存的位置开始
// 最多存 100组 = 500个位置,没存满才存
if ( i1 < 500 )
{
HD[i1 + 0] = D[0];
HD[i1 + 1] = D[1];
HD[i1 + 2] = D[2];
HD[i1 + 3] = D[3];
HD[i1 + 4] = D[4];
savePos = savePos + 5; // 核心:偏移+5,下次存下一组
}
B[100] = 0; //清除触发
}
HD[1000] = savePos;
//查看配方
if ( B[101] ) //确认查看
{
int i2 = 0; //查看地址偏移
while ( true )
{
if ( HD[0 + i2] == D[200] ) //对比名称是否一致
{
D[20] = HD[0 + i2]; //配方名称
D[21] = HD[1 + i2]; //数据存储
D[22] = HD[2 + i2]; //数据存储
D[23] = HD[3 + i2]; //数据存储
D[24] = HD[4 + i2]; //数据存储
break;
}
if ( i2 >= 100 ) //判断是否超出100个地址
{
break;
}
i2 += 5; //存储地址偏移,偏移存储个数
}
B[101] = 0; //上升沿
}
//配方删除
if ( B[102] )
{
int i3 = 0;
int found = 0; // 标记是否找到
while ( true )
{
if ( HD[0 + i3] == D[200] ) //根据D[200]配方名称进行查找,进行赋0删除
{
HD[0 + i3] = 0;
HD[1 + i3] = 0;
HD[2 + i3] = 0;
HD[3 + i3] = 0;
HD[4 + i3] = 0;
found = 1;
break;
}
if ( i3 >= 100 ) //判断是否超出100个地址
{
break;
}
i3 += 5;
}
if ( found ) //标志找到对应配方后把查看的也赋0
{
D[20] = 0;
D[21] = 0;
D[22] = 0;
D[23] = 0;
D[24] = 0;
found = 0;
}
B[102] = 0;
}
//配方修改
if ( B[103] ) //确认查看
{
int i4 = 0; //查看地址偏移
int found1 = 0; // 标记是否找到
while ( true )
{
if ( HD[0 + i4] == D[200] ) //对比名称是否一致
{
HD[0 + i4] = D[5]; //配方名称
HD[1 + i4] = D[6]; //数据修改
HD[2 + i4] = D[7]; //数据修改
HD[3 + i4] = D[8]; //数据修改
HD[4 + i4] = D[9]; //数据修改
found1 = 1;
break;
}
if ( i4 >= 100 ) //判断是否超出100个地址
{
break;
}
i4 += 5; //存储地址偏移,偏移存储个数
}
if ( found1 )
{
D[20] = HD[0 + i4]; //配方名称
D[21] = HD[1 + i4]; //数据存储
D[22] = HD[2 + i4]; //数据存储
D[23] = HD[3 + i4]; //数据存储
D[24] = HD[4 + i4]; //数据存储
}
B[103] = 0; //上升沿
}
顺序存储,自动 + 5 偏移, 按名称查找、删除、修改,不怕数据为 0,不误判, 数组安全,不越界, 查看后自动清空显示区, 工业现场可直接使用, 逻辑简单。
后续有时间还会更新!!!