客户要求滚码存储为BCD码小端排列。
比如4字节长度,123456 的十进制数保存为: 56 34 12 00
比如3字节长度,123456 的十进制数保存为: 56 34 12
可以通过高级脚本功能实现。
[Lua] 纯文本查看 复制代码 --产品序号SN生成函数 (支持INT64整数滚码) 输出是二进制字符串
function sn_new(void)
local bin = {}
local out = {}
local sn1
local s
local i
if (SN_TYPE == 0) then --普通滚码
sn1 = pg_read_sn() --读上次SN (必须是整数)
str = string.format("SN. = %d", sn1) print(str)
else
--1970年秒数
sn1 = os.time()
end
--存储格式固定BCD码小端左对齐
local c
local s1
s1 = ""
for i = 1,2 * SN_LEN,1 do
c = math.floor(sn1 / (10 ^ (2 * SN_LEN - i)))
c = c % 10
s1 = s1..string.char(c)
end
s = ""
for i = SN_LEN, 1, -1 do
s = s..string.char((string.byte(s1, 2 * i - 1) << 4) + string.byte(s1,2 * i))
end
if (SN_TYPE == 0) then --普通滚码
if (SN_INC_STEP ~= nil) then
sn1 = sn1 + SN_INC_STEP
else
sn1 = sn1 + 1
end
pg_write_sn(sn1) --编程成功后才会保存本次SN
end
return s
end
将上面的代码加入配置窗口,即可实现。客户完全可以自定义滚码存储格式
如果需要BCD码大端排列。
比如
4字节长度,123456 的十进制数保存为: 00 12 34 56
3字节长度,123456 的十进制数保存为: 12 34 56
关键代码为:
[Lua] 纯文本查看 复制代码 local c
local s1
s1 = ""
for i = 1,2 * SN_LEN,1 do
c = math.floor(sn1 / (10 ^ (2 * SN_LEN - i)))
c = c % 10
s1 = s1..string.char(c)
end
s = ""
for i = 1, SN_LEN,1 do
s = s..string.char((string.byte(s1, 2 * i - 1) << 4) + string.byte(s1,2 * i))
end
|