Foxtable(狐表)用户栏目专家坐堂 → 调取存储在扫码枪里的数据(厂家有提供dll)


  共有7354人关注过本帖树形打印复制链接

主题:调取存储在扫码枪里的数据(厂家有提供dll)

帅哥哟,离线,有人找我吗?
fubblyc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
调取存储在扫码枪里的数据(厂家有提供dll)  发帖心情 Post By:2018/7/26 17:48:00 [显示全部帖子]

老师,扫码枪有仓储模式,也就是扫条码,将条码存储在枪里面。
然后用数据线插在电脑,通过厂家提供的dll文件,有例子(c#),可以读取里面的数据。
我将相关文件发上来,您帮我看下怎么转换成FT的语言。
主要实现两个功能:
1.读取扫码枪的数据放到指定的textbox框中
2.点击按钮,调用清空盘点枪数据函数,清空数据
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:扫码枪dll文件.zip


[此贴子已经被作者于2018/7/26 17:50:48编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2018/7/26 17:51:00 [显示全部帖子]

文档有更新:
扫码枪读取数据一次只能60个字节,循环读取。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:例子.txt


[此贴子已经被作者于2018/7/26 18:00:51编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2018/7/27 11:55:00 [显示全部帖子]

谢谢甜老师,哈哈,直接套用你的声明函数,在命令窗口调用你写的代码,直接闪退。我知道直接套用是不对的,不过不知道怎么弄~~~
我把他后面改写的例子发在这里哈,甜老师,你看能不能帮忙写个,我自己再改改~

get_API.dll  为库文件 需将放到程序目录和生成文件目录

有两个函数需要调用
读取扫码点枪数据函数:
char Read_data(ULONGLONG Addr,UCHAR len,char *data); //Addr为读取地址,len为读取长度,一次最多只能读60,data为接收数组
//返回参数: 0为成功 1为没找到扫码枪 2为命令发送失败   3为读取失败  4为读取长度过长
发送扫码枪设置码函数:
char send_bar_code(CString bar); //直接将设置码字符填入就可以了
//返回参数: 0为成功 1为没找到扫码枪 2为命令发送失败   3为读取数据失败
需将API_inc.h 放到程序目录,并添加头文件
#include "API_inc.h"
调用函数例子:
先定义:
typedef char (* lpAddFun)(ULONGLONG Addr,UCHAR len,char *data);
typedef char (* lpAddFun1)(CString bar);//定义一个与Add_new函数接受参数类型和返回值均相同的函数指针类型

实际调用:
在需要调用的地方添加:
第一个函数,读取扫码枪数据:
ULONGLONG addr = 0x20000;
ULONGLONG read_len = 0x1e0000; //读取最大长度  0x1e0000
UCHAR package_len = 60; //每包数据的长度
ULONGLONG count = read_len/package_len; //需要读取的次数
if (read_len%package_len != 0) //不等于0就需要增加次数
{
count++;
}
char buf[60] = {0};
UCHAR ng_num = 0; //0xff计数  连续4个0xff就见底了

HINSTANCE hDll;//句柄
lpAddFun addFun;//函数指针
hDll=LoadLibrary("get_API.dll");//动态加载DLL模块句柄
if(hDll)
{
addFun=(lpAddFun) GetProcAddress(hDll,"Read_data");//得到所加载DLL模块中函数的地址
if(addFun)
{
for (ULONGLONG i = 0; i < count; i++)
{
if (i+1 == count) //最后一次   读余数
{
package_len = read_len%package_len;
}
result=addFun(addr,package_len ,buf);
ng_num = 0;
for (int a = 0; a < package_len; a++)
{
if (-1 == buf[a])
{
ng_num++;
}
}
if (ng_num >= 4) //连续4个0xff  数据就到底了
{
break;
}
addr+=60;
}
}
FreeLibrary(hDll);//释放已经加载的DLL模块
}
第二个函数,发送扫码枪设置码:
CString send_bar;
send_bar = "%%EnterSet";   //  进入设置模式
HINSTANCE hDll;//句柄
lpAddFun1 addFun;//函数指针
hDll=LoadLibrary("get_API.dll");//动态加载DLL模块句柄
if(hDll)
{
addFun=(lpAddFun1) GetProcAddress(hDll,"send_bar_code");//得到所加载DLL模块中函数的地址
if(addFun)
{
plantextcount=addFun(send_bar);// 进入设置模式
Sleep(100); //等待100ms再发送
send_bar = "%%SpecCode18";   //  清楚盘点数据
plantextcount=addFun(send_bar);
}
FreeLibrary(hDll);//释放已经加载的DLL模块
}
[此贴子已经被作者于2018/7/27 12:00:49编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2018/7/27 14:27:00 [显示全部帖子]

甜大,VB.NET不会写,我就这样复制进去调试
是要怎么测试呢。。。

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20180727142622.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2018/7/27 15:14:00 [显示全部帖子]

恩恩,谢谢甜老师,定义的代码,我这样写好像不对。。

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20180727151423.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2018/7/27 15:30:00 [显示全部帖子]

恩恩,甜老师,调试出来了,是不是不能用:如果要能用,要让他们怎么改呢。。。

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20180727152925.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2018/7/27 15:59:00 [显示全部帖子]

甜老师,我平台改为 2.0 后,出现这样:

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20180727155904.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2018/7/27 16:03:00 [显示全部帖子]

我看了网上的资料,改成3.5
那些警告没有了,出现这个:
引发类型为“System.ExecutionEngineException”的异常。

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20180727160300.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2018/7/27 16:03:39编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2018/7/27 16:11:00 [显示全部帖子]

不插设备是可以正常执行
当然弹出的就是空的
是64位的电脑
[此贴子已经被作者于2018/7/27 16:11:14编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2018/7/27 16:25:00 [显示全部帖子]

甜老师,他这个读取每包只能读60个字节,他有写了个例子,先算出枪里面总共有多少字节,除以60,得出需要读几次。

调用函数例子:
先定义:
typedef char (* lpAddFun)(ULONGLONG Addr,UCHAR len,char *data);
typedef char (* lpAddFun1)(CString bar);//定义一个与Add_new函数接受参数类型和返回值均相同的函数指针类型

在需要调用的地方添加:
ULONGLONG addr = 0x20000;
ULONGLONG read_len = 0x1e0000; //读取最大长度  0x1e0000
UCHAR package_len = 60; //每包数据的长度
ULONGLONG count = read_len/package_len; //需要读取的次数
if (read_len%package_len != 0) //不等于0就需要增加次数
{
count++;
}
char buf[60] = {0};
UCHAR ng_num = 0; //0xff计数  连续4个0xff就见底了

HINSTANCE hDll;//句柄
lpAddFun addFun;//函数指针
hDll=LoadLibrary("get_API.dll");//动态加载DLL模块句柄
if(hDll)
{
addFun=(lpAddFun) GetProcAddress(hDll,"Read_data");//得到所加载DLL模块中函数的地址
if(addFun)
{
for (ULONGLONG i = 0; i < count; i++)
{
if (i+1 == count) //最后一次   读余数
{
package_len = read_len%package_len;
}
result=addFun(addr,package_len ,buf);
ng_num = 0;
for (int a = 0; a < package_len; a++)
{
if (-1 == buf[a])
{
ng_num++;
}
}
if (ng_num >= 4) //连续4个0xff  数据就到底了
{
break;
}
addr+=60;
}
}
FreeLibrary(hDll);//释放已经加载的DLL模块
}

 回到顶部
总数 17 1 2 下一页