Foxtable(狐表)用户栏目专家坐堂 → [求助]关于win系统平板串口


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

主题:[求助]关于win系统平板串口

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


加好友 发短信
等级:二尾狐 帖子:542 积分:4830 威望:0 精华:0 注册:2017/4/20 11:08:00
[求助]关于win系统平板串口  发帖心情 Post By:2019/9/22 17:52:00 [只看该作者]

老师好:
        请教下,请帮看看
     一.窗口有没有什么控件可以下拉选择年+月+日+小时+分,进行选择录入(现在DateTimePicker控件选择的只能是年月日这段,后面小时+分无法选择)
     二.平板窗口按钮启动串口设备(平板电脑自带二维码扫描头,不是普通拍照摄像头)扫码,接收数据后执行查询+指定赋值
(备注:各事件代码每行后都加上MessageBox.Show("1--X") 都有提示代码有被执行(显示相应数字提示窗口),逐一提示点确定,最后能实现 接收数据后执行查询+查询结果行列指定赋值)
由于带扫码功能平板电脑没有安装注册正式版,试用版项目+商业版项目复制到平板电脑可以打开项目,但均不支持设备监视器功能,只能在电脑设计,前后反复发布60多次,拷贝到平板电脑测试,得出结果。
在此感谢狐表官方及老师们,以及那些耐心帮助我的狐友,这个功能的实现,感觉比现在某you的手持终端功能还实用......基本实现了扫码进出+结存/各环节扫码报工/扫码检验参数填报/扫码订单展开原始10多个环节自动汇总追踪及最新汇总动态/扫码多环节30多个时间节点自动登录赋值......并能做到快速'实时'更新!

还需问题优化需求:在点击窗口 扫描赋值 按钮对准二维码扫描,点击1次就能对状态时间进行当前时间赋值,(现在需要点击2次,如果在设备监视器加代码:Forms("串口").Controls("TextBox11").Text = e.Port.ReadExisting() '获取数据,窗口扫描赋值按钮就不能加e.Form.Controls("TextBox11").Value = s ''代码,2个地方只能1个地方加获取显示代码,这2种方法任选1种都可以)
1.项目AfterOpenProject 事件
Ports.Add("COM4")

2.设备监视器DataReceived事件
Forms("串口").Controls("TextBox11").Text = e.Port.ReadExisting() '获取数据
Dim btn As WinForm.Button = Forms("串口").Controls("单号查询") '获取新的数据后进行单号查询按钮动作(次处如果不加代码,在窗口按钮扫描赋值添加e.Form.Controls("TextBox11").Value = s ,需要点击扫描赋值 对准二维码扫描 2次 ,TextBox11才能读取显示数据)
btn.PerformClick()

3.窗口  单号查询  Click事件
Dim str As String = e.Form.controls("textbox11").text
If str > "" Then
    Dim filter As String = "1=1"
    For Each s As String In str.Split("*")
        filter &= " and 生产单号 like '%" & s & "%'"
    Next
    DataTables("表A").loadfilter= filter
    DataTables("表A").load
Else
    DataTables("表A").loadfilter= "1=2"
    DataTables("表A").load
End If

4.窗口  扫描赋值  Click事件
e.Form.Controls("TextBox11").Value = Nothing    '清空原先数据
forms("串口").Controls("TextBox11").Select  '定位到录入位置

Ports.Add("COM4") '开启
Ports("COM4").Open() '打开串口

Dim hexa(3) As Byte
hexa(0)=&H16
hexa(1)=&H54
hexa(2)=&H0d

Ports("COM4").Write(hexa,0,3)

Dim s As String
s=Ports("COM4").ReadExisting() '从COM4接收文字数据
MessageBox.Show("接收串口数据")  '这里加上检查代码是否被执行,弹窗点确定后,就全部正常,点扫描赋值 按钮1次可以实现需求功能(所有代码有执行到)
备注:猜想,代码执行到这里能不能设定停几秒钟(可调整)后再执行后面代码.  或是设置2秒钟(可调整)后自动关闭这个代码执行检查弹窗(弹窗能否和字体都加大,再加个需要的图片)
'e.Form.Controls("TextBox11").Value = s  'TextBox11控件数据等于接收的数据(如果设备监视器加上读取显示接收数据代码后,这里不屏蔽,点击 扫描赋值按钮 对准二维码扫描 TextBox11控件无法显示接收数据,如果设备监视器代码屏蔽,需要点击  扫描赋值按钮 对准二维码扫描2次,TextBox11控件才能显示读取当前二维码数据,点击 扫描赋值按钮 对准二维码扫描 1次 ,TextBox11读取显示的还是上一次的扫码数据)
'
Dim btn As WinForm.Button = Forms("串口").Controls("单号查询") '执行点击 单号查询 按钮进行查询
btn.PerformClick()

If Tables("表A").Current IsNot Nothing Then  '先判断是否有行
    For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition
        CurrentTable.Rows(i)("状态时间") = now() '赋值当前时间(点击扫描赋值按钮 对准二维码扫描1次TextBox11可以显示接收数据,但是状态时间没有得到当前时间赋值,要需要点扫描赋值码按钮 对准二维码扫描 2次,状态时间才能得到当前时间赋值))
    Next
End If

Tables("表A").save '保存

谢谢!
[此贴子已经被作者于2019/9/22 20:01:58编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106097 积分:539596 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/22 21:14:00 [只看该作者]

目前只有DateTimePicker控件,暂时没有办法选择时分秒,只能手工录入,或者使用代码赋值。

至于其他问题,我看了2遍,愣是没看懂需要解决什么

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


加好友 发短信
等级:二尾狐 帖子:542 积分:4830 威望:0 精华:0 注册:2017/4/20 11:08:00
  发帖心情 Post By:2019/9/23 0:33:00 [只看该作者]

谢谢蓝老师,可能描述的不够简单清楚,现重新补充备注一下
需要功能:需要触摸点击1次"扫描赋值"对准二维码扫描,实现从串口接收数据+接收的数据显示在textbox11控件+后台查询定位串口数据对应的表A生产单号+将定位的生产单号行状态时间列赋值当前时间
(目前在每段代码后加上检查,每段代码检查都有通过,并且能实现从串口接收数据+接收的数据显示在textbox11控件+根据控件值后台查询定位串口数据对应的表A生产单号+将定位的生产单号行状态时间列赋值当前时间,但是去掉检查代码就无法对状态时间赋值,要触摸2次"扫描赋值"才可以)


图片点击可在新窗口打开查看此主题相关图片如下:串口补充.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:串口补充02.jpg
图片点击可在新窗口打开查看



谢谢!

[此贴子已经被作者于2019/9/23 7:21:34编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106097 积分:539596 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/23 9:03:00 [只看该作者]

试试

方法1,程序等待2秒再接收
e.Form.Controls("TextBox11").Value = Nothing    '清空原先数据
forms("串口").Controls("TextBox11").Select  '定位到录入位置

Ports.Add("COM4") '开启
Ports("COM4").Open() '打开串口

Dim hexa(3) As Byte
hexa(0)=&H16
hexa(1)=&H54
hexa(2)=&H0d

Ports("COM4").Write(hexa,0,3)
application.doevents
System.Threading.Thread.Sleep(2000)
Dim s As String
s=Ports("COM4").ReadExisting() '从COM4接收文字数据

方法2、到设备监视器里接收:http://www.foxtable.com/webhelp/topics/1967.htm

把查询相关的代码移到DataReceived事件
Forms("串口").Controls("TextBox11").Text = e.Port.ReadExisting() '获取数据
Dim btn As WinForm.Button = Forms("串口").Controls("单号查询")
btn.PerformClick()

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


加好友 发短信
等级:二尾狐 帖子:542 积分:4830 威望:0 精华:0 注册:2017/4/20 11:08:00
  发帖心情 Post By:2019/9/23 13:40:00 [只看该作者]

谢谢老师,现在通过上午反复测试,已重新找到实际哪行代码问题
请帮看看
如何实现在显示检查结果提示弹窗后,自动关闭这个弹窗,或是优化赋值代码
在各环节加了延迟时间,也不行.
按逻辑,这种需要加一个检查环节,是没有任何作用的(只是一个代码是否执行提醒),但是却偏偏起了作用,能影响后面代码.这种情况不知道是什么原因


图片点击可在新窗口打开查看此主题相关图片如下:串口补充03.jpg
图片点击可在新窗口打开查看

谢谢!


[此贴子已经被作者于2019/9/23 13:51:09编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106097 积分:539596 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/23 14:03:00 [只看该作者]

这种对话框窗口没有办法自动关闭。建议还是到设备监视器里接收

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


加好友 发短信
等级:二尾狐 帖子:542 积分:4830 威望:0 精华:0 注册:2017/4/20 11:08:00
  发帖心情 Post By:2019/9/23 15:32:00 [只看该作者]

谢谢蓝老师,现在是在设备监视器里接收的,只是不同节点是在窗口按钮里赋值时间.时间也可以在设备监视器里赋值,时间会长一些。还有是窗口有多个节点赋值按钮(比如:扫码开始、扫码结束),在设备监视器里不知道怎么写,请老师帮做个例子
我附上原按钮事件代码,请老师看看:
窗口名:串口
窗口按钮名:扫码开始
窗口按钮名:扫码结束
表名:表A

串口 窗口 扫码开始  按钮代码
e.Form.Controls("TextBox11").Value = Nothing    '清空原先数据
forms("串口").Controls("TextBox11").Select  '定位到录入位置
Ports.Add("COM4") '开启
Ports("COM4").Open() '打开串口
Dim hexa(3) As Byte
hexa(0)=&H16
hexa(1)=&H54
hexa(2)=&H0d
Ports("COM4").Write(hexa,0,3)
Dim s As String
s=Ports("COM4").ReadExisting() '从COM4接收文字数据

If Tables("表A").Current IsNot Nothing Then  '先判断是否有行
    For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition
        CurrentTable.Rows(i)("开始时间") = now() '赋值当前时间
        
    Next
End If

Tables("表A").save '保存


串口 窗口 扫码结束  按钮代码

e.Form.Controls("TextBox11").Value = Nothing    '清空原先数据
forms("串口").Controls("TextBox11").Select  '定位到录入位置
Ports.Add("COM4") '开启
Ports("COM4").Open() '打开串口
Dim hexa(3) As Byte
hexa(0)=&H16
hexa(1)=&H54
hexa(2)=&H0d
Ports("COM4").Write(hexa,0,3)
Dim s As String
s=Ports("COM4").ReadExisting() '从COM4接收文字数据

If Tables("表A").Current IsNot Nothing Then  '先判断是否有行
    For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition
        CurrentTable.Rows(i)("结束时间") = now() '赋值当前时间
        
    Next
End If

Tables("表A").save '保存

设备监视器 DataReceived事件代码 

Forms("串口").Controls("TextBox11").Text = e.Port.ReadExisting() '获取数据
'MessageBox.Show("控件接收到数据")
Dim btn As WinForm.Button = Forms("串口").Controls("单号查询") ''''获取新的数据后进行查询动作
btn.PerformClick()
'MessageBox.Show("执行查询")
[此贴子已经被作者于2019/9/23 15:39:44编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106097 积分:539596 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/23 15:51:00 [只看该作者]

串口 窗口 扫码开始  按钮代码
e.Form.Controls("TextBox11").Value = Nothing    '清空原先数据
forms("串口").Controls("TextBox11").Select  '定位到录入位置
Ports.Add("COM4") '开启
Ports("COM4").Open() '打开串口
Dim hexa(3) As Byte
hexa(0)=&H16
hexa(1)=&H54
hexa(2)=&H0d
Ports("COM4").Write(hexa,0,3)

If Tables("表A").Current IsNot Nothing Then  '先判断是否有行
    For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition
        CurrentTable.Rows(i)("开始时间") = now() '赋值当前时间
    Next
End If

Tables("表A").save '保存

去掉扫码结束按钮,结束时间放到DataReceived事件处理

设备监视器 DataReceived事件代码 

Forms("串口").Controls("TextBox11").Text = e.Port.ReadExisting() '获取数据
'MessageBox.Show("控件接收到数据")
Dim btn As WinForm.Button = Forms("串口").Controls("单号查询") ''''获取新的数据后进行查询动作
btn.PerformClick()
If Tables("表A").Current IsNot Nothing Then  '先判断是否有行
    For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition
        CurrentTable.Rows(i)("结束时间") = now() '赋值当前时间
        
    Next
End If
'MessageBox.Show("执行查询")



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


加好友 发短信
等级:二尾狐 帖子:542 积分:4830 威望:0 精华:0 注册:2017/4/20 11:08:00
  发帖心情 Post By:2019/9/23 16:23:00 [只看该作者]

谢谢老师,这种单个环节时间节点在监视器里赋值的,昨天已经测试过了,在窗口触摸这个扫码结束按钮是可以实现读取串口数据+接收串口数据+控件显示串口接收的数据+查询+对查询出的行结束时间赋值的。实际情况是:窗口里有20个按钮需要对不同环节时间节点赋值(等于1个单号有20个时间列需要在不同的时间赋值当时触摸按钮的时间,业务过程时间节点),那么就要把这20个按钮赋值代码都要加到设备监视器代码里,窗口里这20个赋值按钮要还存在,我在窗口触摸扫码开始按钮,就从设备监视器找到扫码开始这段代码执行开始时间赋值,我在窗口触摸扫码结束按钮,就从设备监视器找到扫码开始这段代码执行结束时间赋值,(这个开始和结束之间,还有18个流程过程的开始和结束),这样就涉及到我在窗口触摸的那个按钮,在设备监视器就找出那段对应代码执行赋值。如果这种能实现,就解决了在窗口按钮不能触摸扫码结束1次就实现读取串口数据+接收串口数据+控件显示串口接收的数据+查询+对查询出的行结束时间时间赋值的问题了。(如果能优化那个按钮时间赋值是最好的体验效果)
还有这两天要解决的核心问题其实就1个(类),就是现在这个扫码开始窗口按钮代码不能对开始时间赋值这一类(个)问题。

图片点击可在新窗口打开查看此主题相关图片如下:串口补充04.jpg
图片点击可在新窗口打开查看

请老师再帮看看,万分感谢!

[此贴子已经被作者于2019/9/23 16:35:08编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106097 积分:539596 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/23 16:32:00 [只看该作者]

那就这样有没有问题:
串口 窗口 扫码开始  按钮代码
e.Form.Controls("TextBox11").Value = Nothing    '清空原先数据
forms("串口").Controls("TextBox11").Select  '定位到录入位置
Ports.Add("COM4") '开启
Ports("COM4").Open() '打开串口
Dim hexa(3) As Byte
hexa(0)=&H16
hexa(1)=&H54
hexa(2)=&H0d
Ports("COM4").Write(hexa,0,3)

If Tables("表A").Current IsNot Nothing Then  '先判断是否有行
    For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition
        CurrentTable.Rows(i)("开始时间") = now() '赋值当前时间
        
    Next
End If

Tables("表A").save '保存


串口 窗口 扫码结束  按钮代码

e.Form.Controls("TextBox11").Value = Nothing    '清空原先数据
forms("串口").Controls("TextBox11").Select  '定位到录入位置
Dim s As String
s=Ports("COM4").ReadExisting() '从COM4接收文字数据
e.Form.Controls("TextBox11").Value = s
If Tables("表A").Current IsNot Nothing Then  '先判断是否有行
    For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition
        CurrentTable.Rows(i)("结束时间") = now() '赋值当前时间
        
    Next
End If
Dim btn As WinForm.Button = Forms("串口").Controls("单号查询") ''''获取新的数据后进行查询动作
btn.PerformClick()

Tables("表A").save '保存

去掉设备监视器 DataReceived事件代码

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