| | |
| | | private void extractField(S7ParseData item, Object data) { |
| | | switch (item.getDataType()) { |
| | | case BOOL: |
| | | item.setDataItem(DataItem.createReqByBoolean((Boolean) data)); |
| | | // 类型转换容错:支持 Integer/Number 转 Boolean |
| | | Boolean boolValue; |
| | | if (data instanceof Boolean) { |
| | | boolValue = (Boolean) data; |
| | | } else if (data instanceof Number) { |
| | | boolValue = ((Number) data).intValue() != 0; |
| | | } else if (data instanceof String) { |
| | | String str = ((String) data).trim().toLowerCase(); |
| | | boolValue = "true".equals(str) || "1".equals(str) || "on".equals(str); |
| | | } else { |
| | | // 尝试转换为数字再转Boolean |
| | | try { |
| | | int intValue = Integer.parseInt(String.valueOf(data)); |
| | | boolValue = intValue != 0; |
| | | } catch (NumberFormatException e) { |
| | | throw new S7CommException("无法将值转换为Boolean: " + data + " (类型: " + (data != null ? data.getClass().getName() : "null") + ")"); |
| | | } |
| | | } |
| | | item.setDataItem(DataItem.createReqByBoolean(boolValue)); |
| | | break; |
| | | case BYTE: |
| | | item.setDataItem(DataItem.createReqByByte(ByteReadBuff.newInstance((byte[]) data) |