一,简介
日立喷码机可采集的内容挺丰富,比如设备状态,告警状态,印字次数,配方列表,正在使用的配方名(在喷码机里叫做Message,国内常叫配方),配方编号等等。在数据采集过程中,遇到了一些坑,特地记录一下。
二,过程
1,购买通信板卡以及安装授权文件
通信板卡可以扩展出modbus通信,在这里吐槽一下代理商,买了板卡只给了安装示意图,没给授权文件,搞了一天一直连不上喷码机,咨询代理商才知道还需要把授权文件发过来并安装才行。
2,使用官方SDK测试
在这里再次吐槽两下代理商:
一是资料不一次性发过来,看了老半天技术文档,发现有些内容在文档里找不到,再次询问才得知还有另外的文档。总共有两份文档是需要的,通信使用手册以及sop-4。
二是官方demo程序提示出错,技术支持不知怎么回事......
3,使用第三方代码测试
在github找到一个第三方代码,参考GitHub - MarvinThompson/HitachiEtherNetIP: EthetNet/IP interface to Hitachi EtherNet/IP enabled printers
实测该代码完全正常。官方demo代码和第三方代码在连接喷码机时的对比如下:
//官方demo代码
// Occurs when the [Connect] button is clicked.
void CIJPLib_Test_2Dlg::OnBnClickedConnectButton()
{
if ( NULL == m_pIJP )
{
ConnectIJP ();
SetDlgItemText ( IDC_CONNECT_BUTTON, L"&Disconnect" );
}
else
{
DisconnectIJP ();
SetDlgItemText ( IDC_CONNECT_BUTTON, L"&Connect" );
}
}
//第三方代码
// Connect to the printer
void cmdConnect_Click(object sender, EventArgs e) {
if (ConfigureConnection.SelectedIndex == 0) {
// Ethernet Connection
HP.Connect(ipAddress, ipPort);
} else if (ConfigureConnection.SelectedIndex == 1) {
// Serial connection
HP.Connect(sPort, sBaudRate, sParity, sDataBits, sStopBits);
} else {
HP.Connect();
}
HP.IssueControl(ControlOps.ComOn);
}
通过对比发现,第三方代码在执行connect之后,会进行一个设置动作 HP.IssueControl(ControlOps.ComOn),查阅后发现是对一个叫做本地/远程的寄存器进行操作,把数值改成远程。咨询技术支持才知道,这个寄存器的意思是:选择本地模式,就可以在喷码机操作面板进行操作,不能通过远程通信的方式进行操作;选择远程模式,在喷码机操作面板不能操作(只能进行模式切换,其他不能操作),通过远程通信的方式可以操作。实测发现,在本地模式,远程通信可以读取到设备状态以及告警状态,其他会返回出错。文档里没找到这个寄存器的详细解释(可能本人看得不够仔细,欢迎指正),技术支持非得在问到这个问题时才回答,在一开始使用官方SDK出错时,竟然不知怎么回事......
4,总结
第三方代码完成度非常高,可以直接参考使用,从代理商处拿到全部开发文档即可。
三,遗留问题
通信板卡是通过modbus协议通信的,直接通过modbus读寄存器,发现很多信息无法获取,官方SDK封装了一个中间层,看不到实际是怎样读写寄存器的。
————————————————
版权声明:本文为CSDN博主「CNC注塑机PLC专业数采」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/q22837656/article/details/123975683