C#与测试仪对接自动测试主程序框架如何搭建

weixin_44615268 2021-01-10 06:56:10


我的思路要求当主界面button停止键触发事件,通知PLC切换为自动模式接通对应的耐压绝缘切换继电器,C#已经创建了一个读取写入PLC的线程,button停止键触发事件后还会创建一个 void readdata1()线程作为自动的主框架程序,读取到M100为1的时候向COM端口发送仪器代码,当线程在下一个循环到了时 dev4bool1 = true;不在重复发送同一条语句,当COM端口有返回数据时先对数据的上下限进行判断,才能进行第二步,现在的问题是当COM端口接收到数据后怎么通知 void readdata1()线程中的 我的第1条代码我已经拿到数据了可以进行第二步操作,比如写 dev4bool1 = true;感觉有点不靠谱 ,因为我同一个COM端口要发送5条代码,有可能会出错,第二个一个程序要写好多if语句请师傅们指点,给一个借鉴的主框架 单个对接设备都没问题可就是做成自动就不会没经验
...全文
4744 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ziqi0716 2021-01-11
  • 打赏
  • 举报
回复
你的思路,写硬件的吗?
gs0038 2021-01-11
  • 打赏
  • 举报
回复
C# 用ManualResetEvent 这个试试 你的代码没有任何注解,很难理解你的代码 只能给个建议给你了 向COM端口发送仪器代码之后你 WaitOne它, 当COM端口有返回数据时先对数据的上下限进行判断 之后你对它做Set
  • 打赏
  • 举报
回复
当你对单个设计写“循环”,写稍微复杂一点的 if 判断,写(2个以上的)越来越多的 bool 值状态设计,都会令逻辑干扰指数级变混乱。少一些中间“bool标记”,设计一个“灵魂”的基本框架,忘掉底层的名词儿而多从自己系统实际架构入手,才会产生一个稳定的想法。
  • 打赏
  • 举报
回复
我再打个比方,例如“网关路由器”,它对于局域网内部主机对外访问的请求,转换为路由器上的一个特定的端口,然后发送消息。它自己有路由转换地址表,使得一点定时间内外部发到此端口的消息能够精准地被重发到局域网内部的主机ip和端口上。这就是“用了一点儿心”设计一下精准回调流程。

凡是不用这一丁点儿心思,一旦要面对的编程问题“从1变到2、3、4.......10000”了,自然就懒惰了,就乱了不会编程了。
  • 打赏
  • 举报
回复
这个基本上就是“只会1,不会2、3、.....10000”的设计问题。

设计师设计的通讯程序,设计信令协议,会在发送消息序号和对方确认序号上做匹配,并且在(你说的)ReadData 的环节上做出回调(事件)设计。那么 api 使用者可以同时发送逻辑没有先后顺序的消息,但是对于操作上下文有逻辑先后关系的消息(在前一步发送消息时)就使用事件回调来监听特定的消息确认。例如
.......
var msg = 封装消息(inputData); //让设备做第一件事儿
Device1.SendMessage(msg, x =>
{
if(x.确认编号 ==msg.发送编号)
{
//这里才开始做第二件事儿
}
});


这也就是 async/await 之类的异步策略编程风格要解决的。使得整个程序不卡死,非常自然,而又异步。



许多人“只会1,不会2、3、4.......10000”,也就是只会最简单地发消息,只会最简单地收消息,就好像看文章每一个字都好像懂、但是文章的内容和要解决的问题看不懂。这就是因为没有深入一步去设计一个准确回调的事件机制。以至于至少一半编程设计做不了。
wanghui0380 2021-01-10
  • 打赏
  • 举报
回复
你差一个bus(总线)。 window本身也好,还是现在的微服务也罢。你都能看到一个东西,叫做bus。 大家对bus编程就好。 ps:你也可以看看rose机器人系统,他的核心设计其实跟window的io bus,upnp没啥区别。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧