广州大彩串口屏论坛_大彩开发者交流论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 228|回复: 2

怎么用大彩串口屏用VISUAL TFT 用MODBUS RTU实现读卡扫码?

[复制链接]

3

主题

11

帖子

33

积分

新手上路

Rank: 1

积分
33
发表于 2025-4-22 14:35:04 | 显示全部楼层 |阅读模式
我现在用大彩屏,有一个支持232,485的R35D读卡扫码器来实现读卡扫码。有人会吗?怎么做?
回复

使用道具 举报

3

主题

11

帖子

33

积分

新手上路

Rank: 1

积分
33
 楼主| 发表于 2025-4-22 14:41:35 | 显示全部楼层
使用大彩串口屏与R35D读卡扫码器通过MODBUS RTU通信的实现方法
硬件连接
接线方式:

将R35D读卡扫码器的RS485接口(A+/B-)与大彩串口屏的RS485接口连接

确保A+对A+,B-对B-

共地连接(GND)

电气参数:

波特率:通常9600bps(需与R35D设置一致)

数据位:8位

停止位:1位

无校验(或根据R35D配置)

R35D读卡扫码器配置
确保R35D已配置为MODBUS RTU从站模式

设置正确的从站地址(默认通常为1)

确认数据格式(如ASCII或HEX)与大彩屏设置一致

大彩串口屏配置
1. 工程设置
在DGTools开发软件中:

选择正确的串口(通常是COM2,如果是RS485接口)

设置与R35D匹配的通信参数

2. MODBUS RTU主站配置
在LUA脚本中初始化MODBUS通信:

lua
-- 初始化MODBUS RTU
function on_init()
    -- 设置串口参数
    set_uart_baudrate(2, 9600)  -- COM2, 9600bps
    set_uart_attribute(2, 8, 1, 0)  -- 数据位8,停止位1,无校验
   
    -- MODBUS RTU配置
    modbus_rtu_set_slave_addr(1)  -- R35D的从站地址
end
3. 读取扫码数据
根据R35D的MODBUS寄存器映射(需查阅R35D手册),读取数据:

lua
-- 定时读取扫码数据
function on_timer(timer_id)
    if timer_id == 1 then
        -- 假设扫码数据存储在保持寄存器40001开始(需根据R35D手册调整)
        modbus_rtu_read_holding_reg(1, 0, 10, 1)  -- 从站1,起始地址0,读取10个字,回调函数1
    end
end

-- MODBUS读取回调
function modbus_callback(id, addr, len, data)
    if id == 1 then  -- 读取扫码数据的回调
        if data ~= nil then
            -- 将读取的数据显示在文本控件上
            set_text(1, 1, "扫码数据:"..data)  -- 假设文本控件ID为1
        else
            set_text(1, 1, "读取失败")
        end
    end
end
4. 界面设计
添加一个文本显示控件用于显示扫码数据

可以添加一个触发按钮,用于手动触发扫码

添加状态指示灯显示通信状态

完整示例代码
lua
-- 初始化函数
function on_init()
    -- 设置串口参数
    set_uart_baudrate(2, 9600)  -- COM2, 9600bps
    set_uart_attribute(2, 8, 1, 0)  -- 数据位8,停止位1,无校验
   
    -- 创建定时器,每500ms读取一次数据
    create_timer(1, 500)
end

-- 定时器回调
function on_timer(timer_id)
    if timer_id == 1 then
        -- 读取保持寄存器,假设数据在40001-40010
        modbus_rtu_read_holding_reg(1, 0, 10, 1)
    end
end

-- MODBUS读取回调
function modbus_callback(id, addr, len, data)
    if id == 1 then  -- 读取扫码数据的回调
        if data ~= nil then
            -- 将MODBUS寄存器数据转换为字符串
            local scan_data = ""
            for i = 1, #data do
                scan_data = scan_data .. string.char(data[i])
            end
            
            -- 显示在文本控件上
            set_text(1, 1, "扫码数据:"..scan_data)
            
            -- 更新状态指示灯为绿色
            set_value(2, 1)  -- 假设指示灯控件ID为2,1表示绿色
        else
            set_text(1, 1, "读取失败")
            set_value(2, 2)  -- 红色表示错误
        end
    end
end

-- 按钮触发扫码(如果需要)
function on_control_notify(screen, control, value)
    if screen == 0 and control == 3 and value == 1 then  -- 假设按钮ID为3
        -- 发送触发扫码命令(根据R35D协议)
        modbus_rtu_write_single_reg(1, 100, 1, 2)  -- 假设写入寄存器100的值为1触发扫码
    end
end
注意事项
寄存器映射:必须准确知道R35D的MODBUS寄存器映射,包括扫码数据存储位置和触发命令寄存器

超时处理:增加超时处理逻辑,防止通信失败导致界面卡死

数据解析:根据R35D返回的数据格式进行适当解析

错误处理:添加充分的错误处理逻辑

波特率匹配:确保大彩屏和R35D的波特率、数据位等参数完全一致

建议先使用MODBUS调试工具测试R35D的通信,确认寄存器映射和通信参数正确后,再在大彩屏上实现完整功能。
回复

使用道具 举报

3

主题

11

帖子

33

积分

新手上路

Rank: 1

积分
33
 楼主| 发表于 2025-4-22 14:42:15 | 显示全部楼层
wanly621 发表于 2025-4-22 14:41
使用大彩串口屏与R35D读卡扫码器通过MODBUS RTU通信的实现方法
硬件连接
接线方式:

DEEPSEEK给的,晚上回家试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|广州大彩串口屏论坛_大彩开发者交流论坛

GMT+8, 2025-5-11 23:38 , Processed in 0.048768 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表